Robot Framework - Интерфейс посетителя - Как получить ключевые слова дочерние по ключевым словам? - PullRequest
0 голосов
/ 30 ноября 2018

После реализации интерфейса робота SuiteVisitor функции def start_suite(self, suite), def start_test(self, test) и def start_keyword(self, keyword) вызываются, как и ожидалось.Но когда я пытаюсь перечислить ключевые слова потомков ключевых слов, я получаю пустые списки:

def start_suite(self, suite):
    logger.console("Event Start Suite: {}".format(suite.name))
    for x in suite.tests:
        logger.console("-> Test Name: {}".format(x))
        for y in x.keywords:
            logger.console("---> Keyword: {}".format(y))
            for z in y.keywords:
                logger.console("-----> Child Keyword: {}".format(z))

def start_test(self, test):
    logger.console("Event Start Test {}".format(test.name))
    for x in test.keywords:
        logger.console("---> Keyword: {}".format(x))
        for z in x.keywords:
            logger.console("-----> Child Keyword: {}".format(z))    

def start_keyword(self, keyword):
    logger.console("Event Start Keyword {}".format(keyword.name))
    for x in keyword.keywords:
        logger.console("-----> Child Keyword: {}".format(x))

Может кто-нибудь объяснить почему?

Я регистрирую посетителя через слушателя:

def start_suite(self, data, result):
    logger.console("Listener Start Suite")
    visitor = Visitor()
    data.visit(visitor)

Требуется ли с моей стороны больше информации, чтобы ответить на этот вопрос?

1 Ответ

0 голосов
/ 01 декабря 2018

Когда я запускаю следующую настройку, пользовательский посетитель Suite регистрирует ключевые слова, определенные в тестовом примере.Основное различие заключается в том, что в приведенном ниже примере класс добавляется в качестве предварительного запуска: --prerunmodifier SoVisitor.SoVisitor.

SoVisitor.robot

*** Test Cases ***
TC 1
    Custom Keyword
    Another Keyword

TC 2
    Custom Keyword
    Another Keyword


*** Keywords ***
Custom Keyword
    Sub Keyword
    No Operation

Another Keyword
    No Operation 

Sub Keyword
    No Operation 
    enter code here

SoVisitor.py

from robot.model.visitor import SuiteVisitor
from robot.api import logger

class SoVisitor(SuiteVisitor):
    def start_suite(self, suite):
        logger.console("Event Start Suite: {}".format(suite.name))
        for x in suite.tests:
            logger.console("-> Test Name: {}".format(x))
            for y in x.keywords:
                logger.console("---> Keyword: {}".format(y))
                for z in y.keywords:
                    logger.console("-----> Child Keyword: {}".format(z))

    def start_test(self, test):
        logger.console("Event Start Test {}".format(test.name))
        for x in test.keywords:
            logger.console("---> Keyword: {}".format(x))
            for z in x.keywords:
                logger.console("-----> Child Keyword: {}".format(z))    

    def start_keyword(self, keyword):
        logger.console("Event Start Keyword {}".format(keyword.name))
        for x in keyword.keywords:
            logger.console("-----> Child Keyword: {}".format(x))    

Затем редактор RED генерирует следующую командуи консольный вывод:

Command: C:\Users\anne\AppData\Local\Programs\Python\Python27\python.exe -m robot.run --listener C:\Users\anne\AppData\Local\Temp\RobotTempDir4913575656218095666\TestRunnerAgent.py:55023 -s RobotVisitor.SoVistor --prerunmodifier SoVisitor.SoVisitor C:\Users\anne\eclipse-workspace\RobotVisitor
Suite Executor: Robot Framework 3.0.4 (Python 2.7.15 on win32)
Event Start Suite: RobotVisitor
Event Start Suite: SoVistor
-> Test Name: TC 1
---> Keyword: Custom Keyword
---> Keyword: Another Keyword
-> Test Name: TC 2
---> Keyword: Custom Keyword
---> Keyword: Another Keyword
Event Start Test TC 1
---> Keyword: Custom Keyword
---> Keyword: Another Keyword
Event Start Keyword Custom Keyword
Event Start Keyword Another Keyword
Event Start Test TC 2
---> Keyword: Custom Keyword
---> Keyword: Another Keyword
Event Start Keyword Custom Keyword
Event Start Keyword Another Keyword
==============================================================================
RobotVisitor                                                                  
==============================================================================
RobotVisitor.SoVistor                                                         
==============================================================================
TC 1                                                                  | PASS |
------------------------------------------------------------------------------
TC 2                                                                  | PASS |
------------------------------------------------------------------------------
RobotVisitor.SoVistor                                                 | PASS |
2 critical tests, 2 passed, 0 failed
2 tests total, 2 passed, 0 failed
==============================================================================
RobotVisitor                                                          | PASS |
2 critical tests, 2 passed, 0 failed
2 tests total, 2 passed, 0 failed
==============================================================================
Output:  C:\Users\anne\eclipse-workspace\RobotVisitor\output.xml
Log:     C:\Users\anne\eclipse-workspace\RobotVisitor\log.html
Report:  C:\Users\anne\eclipse-workspace\RobotVisitor\report.html
...