如何在套件设置中运行测试用例?

时间:2019-05-06 06:20:06

标签: python robotframework

我正在使用robotframework运行一堆python函数作为测试用例。我将一堆测试用例标记为设置,并将一堆测试用例标记为清理。我在机器人中使用-i选项来运行各种测试用例。通常,我运行-i setup进行设置,并运行-i cleanup清理测试套件。但是,如果安装中的测试用例失败,则所有测试用例仍将执行。我正在寻找一种将一堆测试用例标记为套件安装和套件拆卸的功能,并且如果套件安装自动失败,则在不运行任何测试用例的情况下运行套件拆卸。我尝试了带有关键字的Suite Setup选项,但是与此同时,我将测试用例移到了关键字部分,并且失去了标签功能。

原始机器人文件

*** Settings ***

Suite Setup
Suite Teardown

*** Test Cases ***

setup_1
    [Tags]    setup    smoke    1
    ${result}   ${result_str} =     test.test.TestSetup.test_setup_1
    Should Be Equal  ${result}  ${TRUE}
setup_2
    [Tags]    setup    smoke    1
    ${result}   ${result_str} =     test.test.TestSetup.test_setup_2
    Should Be Equal  ${result}  ${TRUE}
setup_3
    [Tags]    setup    smoke    1
    ${result}   ${result_str} =     test.test.TestSetup.test_setup_3
    Should Be Equal  ${result}  ${TRUE}

TestCase 1
    [Tags]      tc
    ${result}   ${result_str} =     test.test.my_func.test_func_1
    Should Be Equal  ${result}  ${TRUE}
TestCase 2
    [Tags]      tc
    ${result}   ${result_str} =     test.test.my_func.test_func_2
    Should Be Equal  ${result}  ${TRUE}

cleanup_1
    [Tags]    cleanup    smoke    1
    ${result}   ${result_str} =     test.test.TestCleanup.test_cleanup_1
    Should Be Equal  ${result}  ${TRUE}
cleanup_2
    [Tags]    cleanup    smoke    1
    ${result}   ${result_str} =     test.test.TestCleanup.test_cleanup_2
    Should Be Equal  ${result}  ${TRUE}

带有关键字的机器人文件

*** Settings ***
Suite Setup     Run keywords
...     setup_1
...     AND setup_2
...     AND setup_3

Suite Teardown  Run keywords
...     cleanup_1
...     AND cleanup_2

*** Keywords ***
setup_1
    [Tags]    setup    smoke    1
    ${result}   ${result_str} =     test.test.TestSetup.test_setup_1
    Should Be Equal  ${result}  ${TRUE}
setup_2
    [Tags]    setup    smoke    1
    ${result}   ${result_str} =     test.test.TestSetup.test_setup_2
    Should Be Equal  ${result}  ${TRUE}
setup_3
    [Tags]    setup    smoke    1
    ${result}   ${result_str} =     test.test.TestSetup.test_setup_3
    Should Be Equal  ${result}  ${TRUE}

cleanup_1
    [Tags]    cleanup    smoke    1
    ${result}   ${result_str} =  test.test.TestCleanup.test_cleanup_1
    Should Be Equal  ${result}  ${TRUE}
cleanup_2
    [Tags]    cleanup    smoke    1
    ${result}   ${result_str} =     test.test.TestCleanup.test_cleanup_2
    Should Be Equal  ${result}  ${TRUE}

*** Test Cases ***
TestCase 1
    [Tags]      tc
    ${result}   ${result_str} =     test.test.my_func.test_func_1
    Should Be Equal  ${result}  ${TRUE}
TestCase 2
    [Tags]      tc
    ${result}   ${result_str} =     test.test.my_func.test_func_2
    Should Be Equal  ${result}  ${TRUE}

有什么方法可以将标记有安装程序的测试标记为Suite Setup,并将标记有清理标记的测试标记为Suite Teardown,并且仍然能够在安装和拆卸中运行各个测试?

2 个答案:

答案 0 :(得分:1)

  

如何在套件设置中运行测试用例?

不能。测试用例不是您可以从其他任何对象显式调用的东西。

如果要创建需要在套件设置中运行的可重用组件,则它必须是用户关键字而不是测试用例。

如果您希望整个套件在单个测试用例失败时停止运行,则可以使用-X/--exitonfailure命令行选项。另一个选择是创建一个调用内置关键字Fatal error

的测试拆卸项

答案 1 :(得分:0)

Suite SetupSuite Teardown旨在在执行测试用例之前和之后执行一系列步骤。您可以想到Suite Setup与手动测试用例中的Pre-requisite/Pre-condition类似。仅当设置失败时才执行整个套件才有意义(对于机器人而言就是如此)。

如果套件设置和拆卸中的关键字本身就是测试用例,我建议您在另一个套件中将它们作为测试用例执行。

针对以下情况,有几种解决方法:

  

假设:

     
      
  1. 套件设置和拆卸中的各个关键字彼此独立(即),如果套件设置中有两个关键字Keyword 1Keyword 2,则它们彼此不依赖。对于套件拆解中的关键字也是如此。
  2.   
  3. 测试用例仅取决于setup和tear-down关键字之一(即),如果套件设置中有两个关键字Keyword 1Keyword 2,则每个测试用例都取决于仅使用其中一个关键字。
  4.   

Workaround 1:

使用Test SetupTest Teardown settings。这样,您就只能使设置失败的测试用例失败,然后在失败时重新运行。

Workaround 2:

将测试用例移至2个不同的套件,并使用Suite SetupSuite Teardown来配置各自的节点。

  

注意:在以上两种情况下,您都必须将设置和拆卸过程中的测试用例移至其他套件。是的,您最终将需要维护多个套件,但是我相信这样可以更轻松地维护这样一个脚本,而不用弄乱一个套件。

如果上述假设无效,那么在套件中重新运行失败的测试确实没有意义。