流程控制——自动化测试精解(13)

发表于:2021-1-15 10:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:刘云    来源:51Testing软件测试网原创

  3.2.11 流程控制
  分支和循环是任何一种编程语言的基本功能。自动化测试用例经常需要根据不同的条件执行不同的验证步骤,有时还需要循环执行相同的步骤。分支和循环是Robot Framework自动化测试框架支持的基本功能。
  1.分支
  Robot Framework中的分支通过BuiltIn库里的关键字Run Keyword If实现。
  分支的语法如下。
  Run Keyword If    条件1    Action 1
  …   ELSE IF    条件2    Action 2
  …   ELSE    Action 3
  其中“…”是Robot Framework中的换行符,表示前一行的关键字还没书写完,换一行继续书写。将ELSE与ELSE IF分行书写是为了保持代码的美观和整洁。也可以把ELSE IF与ELSE写在一行里面,只是阅读起来比较困难。
  *** Keywords ***
  flow_control_if_kw
     [Arguments]    ${arg1}
     Run Keyword If    0<${arg1}<100    Return From Keyword    Middle Number
     …      ELSE IF    ${arg1}==0    Return From Keyword    Zero
     …      ELSE IF    ${arg1}<0    Return From Keyword    Negative Number
     …      ELSE    Return From Keyword    Large Number
  *** Test Cases ***
  If_Control_Testcase
     ${ret}    flow_control_if_kw    -5     #${ret}的值为"Negative Number"
     ${ret}    flow_control_if_kw    0      #${ret}的值为"Zero"
     ${ret}    flow_control_if_kw    35     #${ret}的值为"Middle Number"
     ${ret}    flow_control_if_kw    300    #${ret}的值为"Large Number"
  Robot Framework的If分支和Python以及大多数编程语言基本一致。注意,换行时ELSE前要加“…”。另外,Robot Framework中的条件判断和Python中的条件判断格式类似,可以使用“<”“>”“==”“>=”“!=”“is”“is not”等。
  除了Run Keyword If之外,BuiltIn库里还提供了其他用于分支的关键字。
  ·Run Keyword Unless:当指定的条件不满足时,执行后面的关键字。
  ·Set Variable If:当指定的条件满足时,设置变量的值。
  可以参阅Robot Framework线上文档,也可以在RIDE里从菜单栏中选择Tools→Search Keyword或按F5键搜索BuiltIn库里所有带If或Unless的关键字,了解更多的分支控制用法。
  2.循环
  重复执行某个或某些关键字在自动化测试中是一种常用的场景,这种重复的执行叫作循环。Robot Framework内置了“:FOR”作为循环的保留关键字。“:FOR”既可以用在测试用例中,也可以用在用户关键字中。
  1)普通FOR循环
  普通FOR循环的语法如下。
  :FOR    ${item}    IN    Sequence
  \       keyword
  其中,“:FOR”中的“:”用于和普通的关键字相区分;FOR循环中的临时变量“${item}”用于存储每次循环中取得的值;“IN”是一个固定关键字;“Sequence”是需要进行循环的列表。第二行中缩进一格才开始写关键字。注意,必须缩进一格。
  FOR_Normal_TestCase
     : FOR    ${item}    IN    a    b    c    d
     …      e    f    g    h
     \    Log    ${item}
     @{list_var}     Set Variable    1    2    3    4    5
     : FOR    ${item}    IN    @{list_var}
     \   Log    ${item}
  上例中第一个FOR循环将值列表直接放置在IN之后,如果太长,不能放在同一行中,可以在第二行开头用“…”表示继续上一行。每次取IN后面列表中的一个值并赋给${item},然后输出。
  第二个FOR循环在IN后面没有直接放置值列表,而是对一个List变量进行循环。每次取出List变量中的一个值并赋给${item},然后将其输出。
  2)FOR…IN…RANGE循环
  FOR…IN…RANGE循环的语法如下。
  :FOR    ${item}    IN RANGE    ${end}
  \        Keyword
  :FOR    ${item}    IN RANGE    ${start}    ${end}
  \        keyword
  :FOR    ${item}    IN RANGE    ${start}    ${end}    ${step}
  \        keyword
  将普通FOR循环的“IN”用“IN RANGE”代替,这样Sequence部分就不用将所有参数一一罗列,而只需指定从第几个开始到第几个结束。默认从第0个开始,每次加1。另外,也可以通过指定“${start}”“${end}”和“${step}”来明确指定开始编号、结束编号与间隔。示例如下。
  FOR_IN_RANGE_TestCase
     : FOR    ${item}    IN RANGE    10
     \   Log    ${item}
     : FOR    ${item}    IN RANGE    1    10
     \   Log    ${item}
     : FOR    ${item}    IN RANGE    1    10    2
     \   Log    ${item}
  上例中,第一个FOR…IN…RANGE循环中的${item}将依次取值0~9。
  第二个FOR…IN…RANGE循环中的${item}将依次取值1~9。
  第三个FOR…IN…RANGE循环中的${item}将依次取值1,3,5,7,9。
  3)FOR…IN…ENUMERATE循环
  FOR…IN…ENUMERATE循环的语法如下。
  :FOR    ${index}    ${item}    IN ENUMERATE    Sequence
  \        Keyword
  FOR…IN…ENUMERATE循环不仅用${item}来存储每次循环取得的值,还用${index}来存储这个值在Sequence里的位置。
  示例如下。
  FOR_IN_ENUMERATE_TestCase
     @{list}    Set Variable   a   b   c    d
     : FOR    ${index}   ${item}   IN ENUMERATE    @{list}
     \   Log    ${item} at index ${index}
  输出的日志如下。
  INFO : a at index 0
  INFO : b at index 1
  INFO : c at index 2
  INFO : d at index 3

版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号