【问题标题】:Robot framework : How to run all test cases multiple times机器人框架:如何多次运行所有测试用例
【发布时间】:2020-06-20 01:17:30
【问题描述】:

我使用 SSHLibrary 连接到计算机来运行测试用例。如下:

*** Test Cases ***
Check CPU Temperature
    Check that the CPU temperature is less than ? °C    ${CPU tem}
Check CPU Usage
    Check if any application is using CPU more than ? percent    ${CPU usage percent}
Check TCP transmission
    Check TCP transmission > ? MBytes    ${tcp transmission}

*** Keywords ***
Open Connection & Login
    Open Connection    ${HOST}
    Login    ${ACCOUNT}    ${PASSWORD}
  
#(The following is omitted)

请问如果我想用同样的测试用例来测试第二台电脑怎么办?

【问题讨论】:

    标签: robotframework


    【解决方案1】:

    嗯,这取决于您想要更改当前文件/测试的结构的程度。由于您有单个变量 ${HOST}、${ACCOUNT} 和 ${PASSWORD},并且从您的问题看来,您似乎没有迭代一些数据结构,在其中为多个不同的主机存储不同的登录信息,那么更直接的方法是运行它只是为了运行几个命令:

    $ robot --variable HOST:host1 --variable ACCOUNT:a --variable PASSWORD:secret * && robot --variable HOST:host2 --variable ACCOUNT:a --variable PASSWORD *
    

    编辑: 正如我在 cmets 中正确提醒的那样,执行上一个示例中的第二个命令将覆盖由第一个命令创建的输出,因此是一种更好的方法(到保留两次执行的日志)是这样的:

    $ robot --timestampoutput --output host1 --log host1 --report host1 --variable HOST:host1 --variable ACCOUNT:a --variable PASSWORD:secret * && robot --timestampoutput --output host2 --log host2 --report host2 --variable HOST:host2 --variable ACCOUNT:a --variable PASSWORD:secret *
    

    这将为每个命令创建单独的输出,格式如下:host{n}-{date}-{time}。

    由于这已经是一个很长的命令,最好使用包含所有这些命令行选项的参数文件,稍后您可以从命令中仅引用此文件,例如:$ robot --argumentfile <path_to_argument_file>。更多关于 here.

    这种方法不需要更改您的测试/关键字文件,但如果您有很多机器来运行这些测试,它就不能很好地扩展。

    我很可能会采用以下方法:

    1. 为我要运行这些测试的所有机器创建一个包含登录信息的资源文件。如果可能是这样的:

    Resources/machines.py

    MACHINES = [
        {
            "host": "host1",
            "account" "a",
            "password": "secret"
        },
        {
            "host": "host2",
            "account" "b",
            "password": "secret"
        }
    ]
    
    1. 我会在每个测试用例中迭代这些测试数据,使用这些值调用关键字,例如:
    *** Test Cases ***
    Check Temperature
        FOR    ${machine}    IN    @{MACHINES}
            # you would need to assing values from the dict into ${host}, ${account},
            # and ${pwd} here, you want to check Collections library for this
            Check CPU Temperature    ${host}    ${account}    ${pwd}
        END
    

    然后您将能够只发出一个命令,而无需在命令行上指定任何变量。如果您有大量测试数据,它可以更好地扩展。

    另一种方法是数据驱动方法:

    *** Test Cases ***
    Check Temperature
        [Template]    Check CPU Temperature
        host1    a    secret
        host2    a    secret
        host3    a    secret
    

    对于其他测试用例也是如此。您还需要更改您的关键字,例如 Check CPU Temperature,以便它们接受主机、帐户和登录参数。

    这种方法可能比前一种方法更简单一些,但您将测试数据硬编码在测试 (.robot) 文件中,我个人不喜欢这样。

    【讨论】:

    • 在第一种方法中,其中一个运行应该具有自定义的日志位置或文件名,否则第二次运行将覆盖第一次运行的结果。
    • @TodorMinakov:谢谢,我更新了我的答案,所以它也包含这条信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2020-04-23
    • 2017-11-14
    • 2019-08-02
    • 2021-05-19
    • 1970-01-01
    • 2020-01-27
    相关资源
    最近更新 更多