猿问

用户关键字的 robot.running.model.Keyword 对象子属性在

我有一个简单的预运行修改器,start_suite它实现了从变量中获取套件设置关键字suite并打印其属性的功能。该对象是类的实例robot.running.model.Keyword,这是该类的文档。name、关键字和type属性是正确的idparenttimeoutdoctagschildren属性不返回任何内容。keywords它与和属性相同messages。下面是我的简化代码示例和输出。

我希望有以下子项:Log、Log Many、No Operation。是否可以像这样在预运行修饰符中获取这些关键字的名称(和参数)?我正在使用 robotframework==3.1.2。

这是套件文件 (test.robot):

*** Settings ***

Suite Setup    Custom Suite Setup Keyword


*** Test Cases ***

A test

    No Operation

    

*** Keywords ***

Custom Suite Setup Keyword

    [Timeout]    2 min

    [Documentation]    It is a keyword doc.

    [Tags]    1TAG    2TAG

    Log    1st child

    Log Many    2nd    child

    No Operation

    [Teardown]    My Keyword Teardown

    

My Keyword Teardown

    Log     teardown

这是预运行修改器 (modifier.py):


from robot.api import SuiteVisitor

from robot.libraries.BuiltIn import BuiltIn


class MyModifier(SuiteVisitor):


    def __init__(self):

        self._BuiltIn = BuiltIn()

        

    

    def start_suite(self, suite):

        self._BuiltIn.log_to_console(f'suite keywords - {suite.keywords}')

        self._BuiltIn.log_to_console(f'class          - {type(suite.keywords.setup)}')

        self._BuiltIn.log_to_console(f'name           - {suite.keywords.setup.name}')

        self._BuiltIn.log_to_console(f'id             - {suite.keywords.setup.id}')

        self._BuiltIn.log_to_console(f'parent(suite)  - {suite.keywords.setup.parent}')

        self._BuiltIn.log_to_console(f'timeout        - {suite.keywords.setup.timeout}')

        self._BuiltIn.log_to_console(f'type           - {suite.keywords.setup.type}')

        self._BuiltIn.log_to_console(f'doc            - {suite.keywords.setup.doc}')

        self._BuiltIn.log_to_console(f'tags           - {suite.keywords.setup.tags}')

        self._BuiltIn.log_to_console(f'children       - {suite.keywords.setup.children}')


Cats萌萌
浏览 319回答 2
2回答

素胚勾勒不出你

我设法在 Robot Framework 的API 文档中找到了相关部分。我想要实现的目标是不可能的。访问者可以很容易地修改测试套件结构或从中收集信息。它们与executable model和 一起工作result model,但传递给访问者方法的对象根据它们所使用的模型略有不同。主要 区别在于,在执行端关键字没有子 关键字或消息,并且只有结果对象具有与状态相关的属性,如status和starttime。

aluckdog

使用 Robot Framework 4.0,如果用作套件设置的关键字是在套件本身内实现的,也就是套件拥有关键字,则这是可能的。该属性的文档说:robot.running.model.TestSuite resourceResourceFile包含套件拥有的导入、变量和关键字的实例。从文件系统解析数据时,该数据来自创建套件的同一个测试用例文件。因此可以在对象列表中找到子关键字及其参数suite.resource.keywords。from robot.api import SuiteVisitorclass Visitor(SuiteVisitor):        def start_suite(self, suite):        for keyword in suite.resource.keywords:            if suite.setup.name == keyword.name:                for item in keyword.body:                    print(f'{item.name} - {item.args} - {item.type}')                if keyword.teardown.name:                    print(f'{keyword.teardown.name} - {keyword.teardown.args} - {keyword.teardown.type}')这打印:Log - ('1st child',) - KEYWORDLog Many - ('2nd', 'child') - KEYWORDNo Operation - () - KEYWORDMy Keyword Teardown - () - TEARDOWN同样,如果 user 关键字是在导入的资源文件中而不是在套件文件本身中实现的,这将不起作用。
随时随地看视频慕课网APP

相关分类

Python
我要回答