如何在机器人框架中访问套件中的所有测试

Posted

技术标签:

【中文标题】如何在机器人框架中访问套件中的所有测试【英文标题】:How can I access all test in suite in robot framework 【发布时间】:2015-12-30 15:03:23 【问题描述】:

在当前测试套件执行期间,是否有任何可能的方法可以访问当前测试套件中所有测试执行的列表。就我而言,我有一个包含 20 个测试用例的脚本。他们每个人都有一些标签。启动机器人时,我可以要求它只执行带有特定标签的测试。我想知道机器人从我的脚本中选择了哪些测试。我知道这样的信息是提供给听众的。例如,我可以在执行期间在套件设置中访问它吗?

谢谢 帕维尔 R.

【问题讨论】:

你能再解释一下你的场景吗?据我了解,您想知道当您提供某些标签时,套件中的哪些测试用例将执行?如果您想要一个测试用例计数,难道不是一个更简单的选择吗?否则执行并检查日志以查看执行了哪些测试用例有什么问题? 据我所知,您希望以编程方式访问选定的测试用例,即分配给变量运行时并在代码中操作它(大概是在同一个测试套件中),对吧? 【参考方案1】:

今天,您也可以创建一个小的library that will act as a listener,它可以在运行时检查哪些测试已被选中。我在这里使用的是 Robot Framework 3.1.2。

它基本上需要两件事

    来自listener API 的start_suite 方法。这个方法将在每个套件开始时调用,或者直到它返回一个显式的False。当调用一个名为attributes 的参数时,将被传递给它。此参数是一个字典,具有以下键/值对 "tests: Names of the tests this suite has as a list. Does not include tests of the possible child suites."。 将记录所有测试名称的关键字,可用于Suite Setup

lib.py

from robot.api import logger

class lib(object):
    ROBOT_LIBRARY_SCOPE = 'TEST SUITE'    # define library scope
    ROBOT_LISTENER_API_VERSION = 2        # select listener API
    ROBOT_LIBRARY_VERSION = 0.1
    
    def __init__(self):
        self.ROBOT_LIBRARY_LISTENER = self    # tell the framework that it will be a listener library
        self.attributes = None

    def _start_suite(self, name, attributes):
        self.attributes = attributes
        
    def log_suite_test_names(self):
        for test in self.attributes['tests']:
            logger.info(test)
        

globals()[__name__] = lib

test.robot

*** Settings ***
Library    lib
Suite Setup    log suite test names

*** Test Cases ***
Test 1
    [Tags]    A
    No Operation
    
Test 11
    [Tags]    A    B
    No Operation
    
Test 111
    [Tags]    A    B    C
    No Operation
    
Test 1111
    [Tags]    A    B    C    D
    No Operation
    

启动时的结果如下:robot --pythonpath . --include C test.robot

【讨论】:

【参考方案2】:

您总是可以尝试使用

进行试运行
--dryrun

当您查看 report.html 时,这应该可以快速查看正在运行的内容

http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#dry-run

【讨论】:

【参考方案3】:

如果 RF 本身的使用不是强制性的,并且操作系统与 *nix 相关,我会选择

grep -E -B 1 "( )(tag|tag2)( |$)" test.robot

地点:

-E启动grep的正则语法,

-B 1 打印出与匹配项相关的前一个字符串(它为我们提供了测试用例名称)。

您还可以添加 |grep -v Tags 以仅保留包含案例名称的字符串。

如果您在 [Tags] 部分和案例名称之间还有其他内容,只需稍微增加 -B %index% 并在 |grep -v 之后添加更多内容。

【讨论】:

以上是关于如何在机器人框架中访问套件中的所有测试的主要内容,如果未能解决你的问题,请参考以下文章

如果机器人框架中的第一个测试用例失败,如何跳过测试用例执行

如何并行运行机器人框架测试用例而不是并行测试套件?

如何在控制台错误时停止机器人框架套件的执行?

迭代测试机器人框架

从机器人框架日志文件生成摘要

机器人框架:为整个测试套件运行设置