Listener

Содержание
Введение
message
Suite и Test
Похожие статьи

Введение

Listener - это скрипт на Python который подключается к тестам с помощью опции --listener и могут мониторить многие события с помощью доступных методов.

Скрипт для плоской структуры вида

robot/ ├── my_test.robot └── MyListener.py

Подключается следующим оригинальным образом.

python -m robot --listener MyListener.py my_test.robot

message

Начнём с метода message().

Рассмотрим проект со следующей структурой.

listener/ ├── demo.robot └── MessageListener.py

Класс должен называться также как и файл

class MessageListener(): ROBOT_LISTENER_API_VERSION = 3 def __init__(self): pass def message(self, message): print(f"message: {message}")

*** Settings *** *** Test Cases *** First Should Be Equal As Strings ${1} 1 Second Should Be Equal 1 2 Third Should Be Equal As Integers ${2} 2

Даже после запуска такого простого теста мы увидим большое количество сообщений

python -m robot --listener MessageListener.py demo.robot

Пропустить вывод

message: Robot Framework 7.2.2 (Python 3.12.10 on win32) message: Arguments: demo.robot message: Settings: ConsoleColors: AUTO ConsoleLinks: AUTO ConsoleMarkers: AUTO ConsoleType: verbose ConsoleTypeDotted: False ConsoleTypeQuiet: False ConsoleWidth: 78 DebugFile: None Doc: None DryRun: False Exclude: [] ExitOnError: False ExitOnFailure: False ExpandKeywords: [] Extension: ('.robot', '.rbt', '.robot.rst') FlattenKeywords: [] Include: [] Language: [] LegacyOutput: False Listeners: ['MessageListener.py'] Log: log.html LogLevel: INFO LogTitle: None MaxAssignLength: 200 MaxErrorLines: 40 Metadata: [] Name: None Output: output.xml OutputDir: C:\robot\listener ParseInclude: [] Parsers: [] PreRebotModifiers: [] PreRunModifiers: [] PythonPath: [] RPA: None Randomize: NONE ReRunFailed: None ReRunFailedSuites: None RemoveKeywords: [] Report: report.html ReportBackground: ('#9e9', '#f66', '#fed84f') ReportTitle: None RunEmptySuite: False SetTag: [] Skip: [] SkipOnFailure: [] SkipTeardownOnExit: False SplitLog: False StatusRC: True StdErr: None StdOut: None SuiteNames: [] SuiteStatLevel: -1 TagDoc: [] TagStatCombine: [] TagStatExclude: [] TagStatInclude: [] TagStatLink: [] TaskNames: [] TestNames: [] TimestampOutputs: False VariableFiles: [] Variables: [] VisibleLogLevel: INFO XUnit: None message: Parsing file 'C:\robot\listener\demo.robot'. message: Imported listener class 'C:\robot\listener\MessageListener.py' from 'C:\robot\listener\MessageListener.py'. message: No debug file message: Initializing namespace for suite 'Demo'. message: message: Imported library class 'robot.libraries.BuiltIn' from 'C:\robot\venv\Lib\site-packages\robot\libraries\BuiltIn.py'. message: In library 'BuiltIn': Adding keyword 'ROBOT_LIBRARY_SCOPE' failed: Not a method or function. message: In library 'BuiltIn': Adding keyword 'ROBOT_LIBRARY_VERSION' failed: Not a method or function. message: Created keyword 'Call Method'. message: Created keyword 'Catenate'. message: Created keyword 'Comment'. message: Created keyword 'Continue For Loop'. message: Created keyword 'Continue For Loop If'. message: Created keyword 'Convert To Binary'. message: Created keyword 'Convert To Boolean'. message: Created keyword 'Convert To Bytes'. message: Created keyword 'Convert To Hex'. message: Created keyword 'Convert To Integer'. message: Created keyword 'Convert To Number'. message: Created keyword 'Convert To Octal'. message: Created keyword 'Convert To String'. message: Created keyword 'Create Dictionary'. message: Created keyword 'Create List'. message: In library 'BuiltIn': Adding keyword 'dry_run_active' failed: Not a method or function. message: Created keyword 'Evaluate'. message: Created keyword 'Exit For Loop'. message: Created keyword 'Exit For Loop If'. message: Created keyword 'Fail'. message: Created keyword 'Fatal Error'. message: Created keyword 'Get Count'. message: Created keyword 'Get Length'. message: Created keyword 'Get Library Instance'. message: Created keyword 'Get Time'. message: Created keyword 'Get Variable Value'. message: Created keyword 'Get Variables'. message: Created keyword 'Import Library'. message: Created keyword 'Import Resource'. message: Created keyword 'Import Variables'. message: Created keyword 'Keyword Should Exist'. message: Created keyword 'Length Should Be'. message: Created keyword 'Log'. message: Created keyword 'Log Many'. message: Created keyword 'Log To Console'. message: Created keyword 'Log Variables'. message: Created keyword 'No Operation'. message: Created keyword 'Pass Execution'. message: Created keyword 'Pass Execution If'. message: Created keyword 'Regexp Escape'. message: Created keyword 'Reload Library'. message: Created keyword 'Remove Tags'. message: Created keyword 'Repeat Keyword'. message: Created keyword 'Replace Variables'. message: Created keyword 'Reset Log Level'. message: Created keyword 'Return From Keyword'. message: Created keyword 'Return From Keyword If'. message: In library 'BuiltIn': Adding keyword 'robot_running' failed: Not a method or function. message: Created keyword 'Run Keyword'. message: Created keyword 'Run Keyword And Continue On Failure'. message: Created keyword 'Run Keyword And Expect Error'. message: Created keyword 'Run Keyword And Ignore Error'. message: Created keyword 'Run Keyword And Return'. message: Created keyword 'Run Keyword And Return If'. message: Created keyword 'Run Keyword And Return Status'. message: Created keyword 'Run Keyword And Warn On Failure'. message: Created keyword 'Run Keyword If'. message: Created keyword 'Run Keyword If All Tests Passed'. message: Created keyword 'Run Keyword If Any Tests Failed'. message: Created keyword 'Run Keyword If Test Failed'. message: Created keyword 'Run Keyword If Test Passed'. message: Created keyword 'Run Keyword If Timeout Occurred'. message: Created keyword 'Run Keyword Unless'. message: Created keyword 'Run Keywords'. message: Created keyword 'Set Global Variable'. message: Created keyword 'Set Library Search Order'. message: Created keyword 'Set Local Variable'. message: Created keyword 'Set Log Level'. message: Created keyword 'Set Suite Documentation'. message: Created keyword 'Set Suite Metadata'. message: Created keyword 'Set Suite Variable'. message: Created keyword 'Set Tags'. message: Created keyword 'Set Task Variable'. message: Created keyword 'Set Test Documentation'. message: Created keyword 'Set Test Message'. message: Created keyword 'Set Test Variable'. message: Created keyword 'Set Variable'. message: Created keyword 'Set Variable If'. message: Created keyword 'Should Be Empty'. message: Created keyword 'Should Be Equal'. message: Created keyword 'Should Be Equal As Integers'. message: Created keyword 'Should Be Equal As Numbers'. message: Created keyword 'Should Be Equal As Strings'. message: Created keyword 'Should Be True'. message: Created keyword 'Should Contain'. message: Created keyword 'Should Contain Any'. message: Created keyword 'Should Contain X Times'. message: Created keyword 'Should End With'. message: Created keyword 'Should Match'. message: Created keyword 'Should Match Regexp'. message: Created keyword 'Should Not Be Empty'. message: Created keyword 'Should Not Be Equal'. message: Created keyword 'Should Not Be Equal As Integers'. message: Created keyword 'Should Not Be Equal As Numbers'. message: Created keyword 'Should Not Be Equal As Strings'. message: Created keyword 'Should Not Be True'. message: Created keyword 'Should Not Contain'. message: Created keyword 'Should Not Contain Any'. message: Created keyword 'Should Not End With'. message: Created keyword 'Should Not Match'. message: Created keyword 'Should Not Match Regexp'. message: Created keyword 'Should Not Start With'. message: Created keyword 'Should Start With'. message: Created keyword 'Skip'. message: Created keyword 'Skip If'. message: Created keyword 'Sleep'. message: Created keyword 'Variable Should Exist'. message: Created keyword 'Variable Should Not Exist'. message: Created keyword 'Wait Until Keyword Succeeds'. message: Imported library 'BuiltIn' with arguments [ ] (version 7.2.2, class type, GLOBAL scope, 107 keywords). message: message: Imported library module 'robot.libraries.Easter' from 'C:\robot\venv\Lib\site-packages\robot\libraries\Easter.py'. message: In library 'Easter': Adding keyword 'logger' failed: Not a method or function. message: Created keyword 'None Shall Pass'. message: Imported library 'Easter' with arguments [ ] (version <unknown>, module type, GLOBAL scope, 1 keywords). ============================================================================== Demo ============================================================================== First | PASS | ------------------------------------------------------------------------------ Second | FAIL | 1 != 2 ------------------------------------------------------------------------------ Third | PASS | ------------------------------------------------------------------------------ Demo | FAIL | 3 tests, 2 passed, 1 failed ============================================================================== Output: C:\robot\listener\output.xml message: Tests execution ended. Statistics: 3 tests, 2 passed, 1 failed Log: C:\robot\listener\log.html Report: C:\robot\listener\report.html

>

Две самые большие группы сообщений это Settings и уведомления о созданных ключевых словах.

Suite и Test

Создадим новый Listener - SuiteAndTestListener.py и подключим его к тому же тесту

class SuiteAndTestListener(): ROBOT_LISTENER_API_VERSION = 3 def __init__(self): pass def start_suite(self, suite, result): print(f"Suite '{suite.name}' starting.") print(f"Suite '{suite.name}' result is: {result}.") print(f"Suite '{suite.name}' setup is: {suite.setup}.") print(f"Suite '{suite.name}' teardown is: {suite.teardown}.") print(f"Suite '{suite.name}' tests are: {suite.tests}.") def start_test(self, test, result): print("\n\n") print(f"Start test '{test.name}'") print(f"Test '{test.name}' tags are: {test.tags}.") print(f"Test '{test.name}' setup is: {test.setup}.") print(f"Test '{test.name}' teardown is: {test.teardown}.") print(f"Test '{test.name}' template is: {test.template}.") def end_test(self, test, result): print(f"End of '{test.name}' test") print(f"Test '{test.name}' result is: {result.status}.") print(f"Test '{test.name}' elapsed time is: {result.elapsed_time.total_seconds()}.") def end_suite(self, suite, result): print(f"End of '{suite.name}' suite") print(f"Suite '{suite.name}' result is: {result}.")

python -m robot --listener SuiteAndTestListener.py demo.robot

============================================================================== Demo ============================================================================== Suite 'Demo' starting. Suite 'Demo' result is: robot.result.TestSuite(name='Demo'). Suite 'Demo' setup is: None. Suite 'Demo' teardown is: None. Suite 'Demo' tests are: [robot.running.TestCase(name='First'), robot.running.TestCase(name='Second'), robot.running.TestCase(name='Third')]. First Start test 'First' Test 'First' tags are: []. Test 'First' setup is: None. Test 'First' teardown is: None. Test 'First' template is: None. .End of 'First' test Test 'First' result is: PASS. Test 'First' elapsed time is: 0.00098. First | PASS | ------------------------------------------------------------------------------ Second Start test 'Second' Test 'Second' tags are: []. Test 'Second' setup is: None. Test 'Second' teardown is: None. Test 'Second' template is: None. FEnd of 'Second' test Test 'Second' result is: FAIL. Test 'Second' elapsed time is: 0.000977. Second | FAIL | 1 != 2 ------------------------------------------------------------------------------ Third Start test 'Third' Test 'Third' tags are: []. Test 'Third' setup is: None. Test 'Third' teardown is: None. Test 'Third' template is: None. .End of 'Third' test Test 'Third' result is: PASS. Test 'Third' elapsed time is: 0.000976. Third | PASS | ------------------------------------------------------------------------------ End of 'Demo' suite Suite 'Demo' result is: robot.result.TestSuite(name='Demo'). Demo | FAIL | 3 tests, 2 passed, 1 failed ============================================================================== Output: C:\robot\listener\output.xml Log: C:\robot\listener\log.html Report: C:\robot\listener\report.html

Автор статьи: Андрей Олегович

Похожие статьи
Listener

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: