Robotframework的测试模板

     I 测试模板

    测试模板将普通的以关键字驱动的测试用例转化为以数据驱动的用例。不管这个关键字用例是由关键词或可能的参数组来构成。应用测试模板的测试用例只包含应用于模板关键词的参数。相比于将同一个关键词重复运行无数次,测试模板可以做到一次测试或一个文件只引用一次此关键字。

  模板关键词可以支持普通的位置及命名参数,也支持嵌入于关键字中的参数,不像其他的设置,它可以只用一个变量来定义一个模板。

       1.基本应用:

        可以用以下示例来说明如何使一个接受普通的位置参数的关键词应用于测试模板。这两个用例实现的功能是一致的。

 

*** Test Cases **
Normal test case
Example keywordfirst argumentsecond argument

Templated test case
    [Template]    Example keyword
first argumentsecond argument

         就像上面指出的,为一个测试用例设置templates来指明模板是可行的。另外一种替代方案是利用setting项中的Test Templates选项,此时即可将此模板应用到此测试文件的所有测试用例中。setting选项中的Templates可以覆盖setting列表中可能的模板设置项。如果[Template]中为空,此意味着即使是Test Templates,该用例也不使用模板。也可以使用None表示此用户不使用模板。

   如果一个设置了模板的测试用例有多行数据,意即所有行的数据均使用此模板。这意味着同一个关键词被重复执行了多次,每一行数据执行此关键词一次。即使是其中某些行运行失败,也不会影响其他行的执行。普通用例利用continue on failure也可以达到同样的效果,Test Templates模式是自动全部执行的。

*** Settings ***
Test TemplateExample keyword

*** Test Cases ***
Templated test case
first round 1first round 2
second round 1second round 2
third round 1third round 2

         如果参数为default valuesvarargs,抑或named argumentsfree keyword arguments,测试模板模式的调用与普通参数一致。在参数中应用variables也是正常支持的。

   2. 嵌入式参数的模板

   自从Robot Framework 2.8.2开始,模板支持一系列嵌入式参数的变体。如果模板使用的关键词在其他命名中置有变量,这些变量即可被置换为模板的变量,产生结果的关键词因此不用使用位置变量。举例如下:

*** Test Cases ***
Normal test case with embedded arguments
The result of 1 + 1 should be 2
The result of 1 + 2 should be 3

Template with embedded arguments
    [Template]    The result of ${calculation} should be ${expected}
1 + 12
1 + 23

*** Keywords ***
The result of ${calculation} should be ${expected}
    ${result} =    Calculate    ${calculation}
Should Be Equal    ${result}     ${expected}
 

   当模板使用嵌入式参数时,模板关键词的参数个数必须与使用时的个数一致,参数名称不必与原关键词的名称一致。可以用下面例子来说明:

 

 

 

*** Test Cases ***
Different argument names
    [Template]    The result of ${foo} should be ${bar}
1 + 12
1 + 23

Only some arguments
    [Template]    The result of ${calculation} should be 3
1 + 2
4 - 1

New arguments
    [Template]    The ${meaning} of ${life} should be 42
result21 * 2

   在模板中引入嵌入式参数的主要好处是参数名称被明确指定。当使用普通的变量时,通过命名所含参数的列来实现也可达到同样的效果。这在下一章的data-driven模式中可以看到。

  3. 循环中的模板

  如果在for循环中应用模板,模板是在循环的每一步中起作用。在这种情况下,continue on failure模式也可以正常使用,它意味着即使执行中有失败,所有在循环中的每一步也会被执行。

      II   不同的用例方式

  可以有不同书写方式的测试用例,描述测试流程的测试用例可以以关键字驱动或以数据来驱动,数据驱动是用来执行有着不同输入的同一段测试流程。

  1. 关键字驱动

  类似前面实现的Valid Login实现工作流的测试,是由一些关键字和参数组成。通常地结构是,首先将系统引入到初始化状态,之后执行一些动作比如输入名称,输入密码,提交凭证等,然后来验证系统的表现是否为预期(比如显示欢迎界面)。

  2. 数据驱动

  另一种书写用例的方式为数据驱动,此时测试用例普遍使用高级别的关键词,一般为user keyword将内部的流程隐藏起来。这些用例用来执行针对有着不同输入/输出的同一个场景时非常有效。它每次执行时可能是重复使用同一个关键词,但模板只需指定关键词一次。

*** Settings ***
Test Template    Login with invalid credentials should fail

*** Test Cases ***                USERNAME         PASSWORD
Invalid User Name                 invalid          ${VALID PASSWORD}
Invalid Password                  ${VALID USER}    invalid
Invalid User Name and Password    invalid          invalid
Empty User Name                   ${EMPTY}         ${VALID PASSWORD}
Empty Password                    ${VALID USER}    ${EMPTY}
Empty User Name and Password      ${EMPTY}         ${EMPTY}

   上面这个例子有六个独立的用例,每一个是无效用户名/密码的任意组合,下面的例子说明怎样用一用个测试用例来表示所有这些组合,当应用测试模板时,即使在执行过程中有失败,用例中的其他轮次也会执行,所以执行结果和上面是一致的。在上面的例子中,各个用例独立命名所以看起来比较易懂,但大量的类似用例则会做成统计的混乱。具体应用哪种方式,还需结合场景和个人喜好。

 

*** Test Cases ***
Invalid Password
    [Template]    Login with invalid credentials should fail
    invalid          ${VALID PASSWORD}
    ${VALID USER}    invalid
    invalid          whatever
    ${EMPTY}         ${VALID PASSWORD}
    ${VALID USER}    ${EMPTY}
    ${EMPTY}         ${EMPTY}

  3. 行为驱动

  也有可能需要写些非技术相关的利益相关者希望读懂的用例,这些可以执行类似要求的过程通常被称为验收测试驱动方式或标准示例。实现此方法的一种方式是行为驱动开发(BDD)提示的 Given-When-Then方式。当用这种方式编写用例时,初始状态一般表示为以Given开头,执行的动作则以When开始,预期结果写入到Then中,And或者 But则在有多个动作时使用到。

 

*** Test Cases ***
Valid Login
    Given login page is open
    When valid username and password are inserted
    and credentials are submitted
    Then welcome page should be open

 

Ignoring Given/When/Then/And/But prefixe

如果没有基于全名的搜索没有匹配到,那么当匹配的关键词被搜索到后,前缀Given-When-Then就会被丢掉。此规 d定对user keywords和library keywords均有效。比如,上面例子中Given login page is open不管有没有 Given,对于都会被当作user keywords执行, 忽略前缀也适用于带不同前缀使用同一个关键词的情景。比如Welcome page should be open可以用作And welcome page should be open。

 提示:Ignoring But prefix 是Robot Framework 2.8.7的新功能。

 

猜你喜欢

转载自yeluowuhen.iteye.com/blog/2261174
今日推荐