Win11 домашняя китайская версия
Python 3.9.13
robotframework6.1.1
Описание: Для удобства используйте команду робота,После установки robotframework,Изменить среду системы,добавить вrobot.exe(PYTHON_HOME/Scripts/robot.exe
)расположениепутьприезжатьсистемапеременные средыpath
Установить эталонное соединение:https://github.com/robotframework/robotframework/blob/master/INSTALL.rst
Примечание. В ходе практики я установил обновленную версию robotframework7.0.1 и обнаружил, что после импорта пользовательской библиотеки RIDE сообщит об ошибке, аналогичной следующей, при запуске набора вариантов использования:
[ ERROR ] Calling method 'log_message' of listener 'D:\Program Files (x86)\Python39\lib\site-packages\robotide\contrib\testrunner\TestRunnerAgent.py' failed: AttributeError: 'Output' object has no attribute '_xmllogger'
docutils-0.21.2-py3-none-any.whl
pip install docutils==0.21.2
robotframework-ride 2.0.8.1
Пакеты зависимостей:
numpy 2.0.0
pillow 10.3.0
Pygments 2.18.0
Pypubsub 4.0.3
pywin32 306
six 1.16.0
wxPython 4.2.1
pip install robotframework-ride
При первом запуске вы можете запустить графический интерфейс RIDE, выполнив следующую команду:
cd %PYTHON_HOME%\Scripts
python ride.py
После открытия меню Tools -> Create RIDE Desktop Shortcut
Создайте ярлык на рабочем столе, и вы сможете запустить RIDE, дважды щелкнув ярлык при следующем запуске.
менюFile -> New Project
,Создать проект
Щелкните правой кнопкой мыши проект, созданный выше. -> New Suite
Создать набор тестов
Щелкните правой кнопкой мыши пакет, созданный выше. -> New Test Case
Создание тестовых случаев
упражнятьсяиспользоватьприезжатьизPythonКорневой каталог проектапуть:D:\PyProjects\CustomLibrary
Организационная структура инженерного кода проекта следующая:
CustomLibrary
MyTestLib.py
__init__.py
CustomLibrary/MyTestLib.py
Содержимое кода следующее:
# -*- coding:utf-8 -*-
def example_keyword():
print('example_keyword')
def key_word_func():
print('key word function')
Нажмите на элемент->Library
-> Browse
,Выберите путь, по которому находится скрипт модуля.
иллюстрировать:Вы также можете не нажиматьBrowse
кнопка,Прямо на картинке вышеName
Непосредственно введите имя целевой библиотеки классов в поле ввода.、путь
Уведомление:На практике я обнаружил, что импорт библиотеки классов должен быть установлен на узле набора тестовых примеров, иначе он не будет работать. Аналогично, то же самое справедливо и для импорта ресурсов.
в конечном итоге действительныйтест Результаты текстового редактирования Suite(TestSuite.robot
Содержимое файла)следующее:
*** Settings ***
Library ../CustomLibrary/MyTestLib.py
*** Test Cases ***
тествариант использования1 example keyword
key word func
вопрос:На фото вышеName
Можно ли упростить поле ввода, чтобы напрямую вводить имя библиотеки классов??
Окончательный эффект редактирования текста, которого необходимо достичь, выглядит следующим образом:
*** Settings ***
Library MyTestLib
Ответ: да.
Существует три конкретных метода реализации:
%PYTHON_HOME%\Lib\site-packages\pywin32.pth
,в конце файладобавить в Модуль библиотеки классоврасположение Оглавлениепуть(В примереD:\PyProjects\CustomLibrary
),Просто сохрани это(Нет необходимости перезапускатьRIDE)。Уведомление,В файле pywin32 не может быть китайского языка,В противном случае Python не сможет работать должным образом.PYTHONPATH
переменные среды,Установите значение переменной в путь к каталогу, в котором находится модуль библиотеки классов.,Просто сохранитесь (необходимо перезапустить RIDE).RIDE -> Tools -> Preferences -> Importing
, настраиватьPythonpath
输入框из值для Модуль библиотеки классоврасположение Оглавлениепуть(Нет необходимости перезапускатьRIDE)Организационная структура инженерного кода проекта следующая:
CustomLibrary
MyTestLib.py
__init__.py
CustomLibrary/MyTestLib.py
Содержимое кода следующее:
# -*- coding:utf-8 -*-
class MyLib():
def example_keyword(self):
print('example_keyword')
def key_word_func(self):
print('key word function')
в конечном итоге действительныйтест Результаты текстового редактирования Suite(TestSuite.robot
Содержимое файла)следующее:
*** Settings ***
Library MyTestLib.MyLib
*** Test Cases ***
тествариант использования1 example keyword
key word func
Уведомление:
MyTestLib.py
расположение Оглавлениепутьдобавить вприезжатьpywin32.pth
module_name.class_name
из方式指定类库ИсправлятьCustomLibrary/MyTestLib.py
Содержимое кода следующее:
# -*- coding:utf-8 -*-
class MyTestLib():
ROBOT_LIBRARY_SCOPE = 'GLOBAL' # Установите глобальную область действия библиотеки классов — во время всего выполнения теста создается только один экземпляр, и он используется всеми вариантами использования тестов и наборами тестов.
def example_keyword(self):
print('example_keyword')
def key_word_func(self):
print('key word function')
в конечном итоге действительныйтест Результаты текстового редактирования Suite(TestSuite.robot
Содержимое файла)следующее:
*** Settings ***
Library MyTestLib
*** Test Cases ***
тествариант использования1 example keyword
key word func
иллюстрировать:Если имена классов и модулей совпадают, имя класса можно опустить.
Организационная структура инженерного кода проекта следующая:
CustomLibrary
│ MyTestLib.py
│ __init__.py
│
├─host
│ host_operations.py
│ __init__.py
│
├─monitor
│ monitor_operations.py
│ __init__.py
│
└─printer
printer_operations.py
__init__.py
CustomLibrary/host/host_operations.py
Содержимое кода следующее:
# -*- coding:utf-8 -*-
class HostTestHelper():
cpu_type = 'x86'
def __init__(self):
pass
@classmethod
def set_cpu_type(cls, cpu_type):
print(f'set cpu type {cpu_type}')
cls.cpu_type = cpu_type
CustomLibrary/monitor/monitor_operations.py
Содержимое кода следующее:
# -*- coding:utf-8 -*-
class MonitorTestHelper():
def __init__(self):
pass
def get_monitor_resolution_ratio(self):
print('get monitor ratio')
return '1600 x 900'
CustomLibrary/printer/printer_operations.py
Содержимое кода следующее:
# -*- coding:utf-8 -*-
from host.host_operations import HostTestHelper
class PrinterTestHelper():
def __init__(self):
self.driver_type = ''
def set_printer_driver(self):
if HostTestHelper.cpu_type == 'x86':
self.driver_type = 'SANXIN'
elif HostTestHelper.cpu_type == 'x64':
self.driver_type = 'HP'
print(f'set printer driver {self.driver_type}')
def get_printer_driver(self):
print(f'get printer driver')
CustomLibrary/__init__.py
Содержимое кода следующее:
# -*- coding:utf-8 -*-
# Уведомление: при использовании RIDE для запуска тестового пакета пакет корневого каталога проекта должен быть включен при импорте, иначе библиотека классов не сможет работать.
# from host.host_operations import HostTestHelper # Будет сообщено об ошибке, что приведет к ошибке, похожей на: ModuleNotFoundError: No module named 'host'
from CustomLibrary.host.host_operations import HostTestHelper
from CustomLibrary.monitor.monitor_operations import MonitorTestHelper
from CustomLibrary.printer.printer_operations import PrinterTestHelper
class CustomLibrary(HostTestHelper, MonitorTestHelper, PrinterTestHelper):
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
def __init__(self):
super().__init__()
pywin32.pth
Исправлятьстановитьсяследующее Конфигурация
# .....
D:\PyProjects\CustomLibrary
D:\PyProjects
Уведомление:Если файл удаленD:\PyProjects\CustomLibrary
эта линия,приведет к приведенному выше примеруMyTestLib
Не удалось импортировать библиотеку классов.,Если удалить D:\PyProjects
эта линияприведет кCustomLibrary
Не удалось импортировать библиотеку классов.。
Окончательные результаты редактирования текста набора тестов следующие:
*** Settings ***
Library MyTestLib
Library CustomLibrary
*** Test Cases ***
тествариант использования1 example keyword
key word func
set_cpu_type x64
set_printer_driver
get_printer_driver
get monitor resolution ratio
На основе сценария 1 внесите следующие изменения, оставив все остальное без изменений.
1. Удалить CustomLibrary/__init__.py
код,то есть восстановить__init__.py
для Новыйсостояние
2、ИсправлятьCustomLibrary/MyTestLib.py
,Содержимое измененного кода следующее:
# -*- coding:utf-8 -*-
# from CustomLibrary.host.host_operations import HostTestHelper # Это тоже нормально
from host.host_operations import HostTestHelper
from monitor.monitor_operations import MonitorTestHelper
from printer.printer_operations import PrinterTestHelper
class MyTestLib(HostTestHelper, MonitorTestHelper, PrinterTestHelper):
ROBOT_LIBRARY_SCOPE = 'GLOBAL'
def __init__(self):
super().__init__()
в конечном итоге действительныйтест Результаты текстового редактирования Suite(TestSuite.robot
Содержимое файла)следующее:
*** Settings ***
Library MyTestLib
Library CustomLibrary
*** Test Cases ***
тествариант использования1 set_cpu_type x64
set_printer_driver
get_printer_driver
get monitor resolution ratio