Robot Framework--09 分支与循环的用法

转自:http://blog.csdn.net/tulituqi/article/details/8038923

一、分支

在Robotframework2.7.4之前的版本,我们要想写IF比较容易,可以直接使用Run keyword if 就行了,但是如果想写ELSE IF和ELSE,就不是那么方便了,以前的版本想写判断分支就必须要再写一个Run keyword if ,然后写不同的条件。

好在2.7.4的版本开始新增了这个判断分支结构的扩展,也就是在Run keyword if的语句基础上,集成了ELSE IF和ELSE进来。

1、简单分支

分支的结构如下:

Run keyword if  条件1    do action1

...  ELSE IF  条件2    do action2

<...  ELSE IF  条件X    do action X >

...  ELSE  do action N

先写个例子好了,这也是参考更新文档里的例子。

其中ELSE IF和ELSE前面的3个点是必须点的,否则无法识别的。

下面把第一行的${a}的值改成0,然后运行一下看看

大家可以自己修改${a}和${b}的变量值,来验证一下这个分支判断是否正确,结果我就不展示了。

上面给的结构只是一个标准的结构,你可以根据自己的需要进行改造。

比如中间的ELSE IF是可以有多个的,写多一些就有点像CASE分支了

你可以只写个ELSE IF,或者只写ELSE,看你的需要。

如果只有ELSE的话,也可以写到一行,如下图(截图截不下了,后面看不到的是2)

2、复杂分支

上面这些都是结构比较简单的,你也可以写出复杂结构的判断分支。

因为表格展示的太多列了,截图不方便,直接截图源代码了。

需要说明的是在第二个ELSE IF中又加了一个Run keyword if ,在最后ELSE里也加了一个Run keyword if 带ELSE的(源代码把log 8换行了,实际他们在一行里)

经过我的实验,在ELSE IF里只能加Run keyword if ,后面不能带ELSE,带了也没用。

而在ELSE里可以再加Run keyword if 同时带个ELSE。

好吧,不知道你们看懂了没用,这种复杂结构确实很难阅读,没有特别必要还是都写成标准的结构就好了,复杂的结构肯定可以整理成多个ELSE IF的或者整合一下条件,那样看起来也清晰很多。

我试着整合了一下上面的分支,看起来清晰了很多。

当然,我这只是个例子,我觉得我整合后的代码和原意稍有区别,主要在${b}<=7那里,好吧,怪我前面写的太复杂了。

如果你确实要写这么复杂,那就复杂的写吧,或许在document里写清楚你的判断逻辑,这样别人也会容易看懂些。

3、condition条件

基本上分支说的差不多了,我还想补充说一下condition的写法,大家也可以自己按F5查看,在Run keyword if 的帮助里提到:

Runs the given keyword with the given arguments, if `condition` is true.
The given `condition` is evaluated similarly as with `Should Be True` keyword, and `name` and `*args` have same semantics as with `Run Keyword`.

他的condition会进行evaluated类似于Should Be True这个关键字,那么我们继续看一下这个关键字的帮助:

If `condition` is a string (e.g. ‘${rc} < 10‘), it is evaluated as a Python expression using the built-in ‘eval‘ function and the keyword status is decided based on the result. If a non-string item is given, the status is got directly from its truth value as explained at http://docs.python.org/lib/truth.html.

实际上condition会用python语法进行判断,相当于执行了evaluate(下一讲会讲到)。那么具体的可以在http://docs.python.org/lib/truth.html.查到。

常用的贴几个:

Operation Result Notes
x or y if x is false, then y, else x (1)
x and y if x is false, then x, else y (2)
not x if x is false, then True, else False (3)
Operation Meaning Notes
< strictly less than  
<= less than or equal  
> strictly greater than  
>= greater than or equal  
== equal  
!= not equal  
is object identity  
is not negated object identity  

!=也可用<>,但是建议都用!=

条件里加上数学运算也可以,我就不一一列举了。

二、循环  FOR LOOP

这个功能一直就在系统里支持,只是FOR的写法有点特殊,要在前面加上冒号。直接在F5的关键字搜索里是找不到的,但是关键字搜索里能找到的是EXIT FOR LOOP,当时看到这个关键字就想到了应该是有FOR循环的,否则也不会有一个退出循环的关键字了。

FOR循环结构如下:

:FOR 循环变量 IN RANGE  end

:FOR 循环变量 IN RANGE start end step

循环体为接下来的缩进代码

:FOR 循环变量 IN  a <b,c,...>

循环体为接下来的缩进代码

还是先贴上2个例子。

1、IN RANGE:

IN RANGE主要是用一个整数序列做循环的计数器,如图的IN RANGE 10,运行时就是从0到9,如果写IN RANGE 1  10,那就是从1-9。

需要注意的就是RANGE里不会执行到最后那个数字,也就是10是不执行的,到9就结束了。如果你想执行到10,那就写IN RANGE 11。

如果IN RANGE后面只写一个数字N,那么就是从0到N-1的整数序列。

当然既然是序列也可以加step步进,即序列的间隔。如果要加step,就必须把起始和结束的数字都写上,然后在后面写上step,可以是正数也可以是负数,如下图就是一个负数step的例子:

2、IN:

IN的用法就比较自由了,你可以把IN后面的内容理解为一个LIST变量的全部元素,这个循环相当于遍历每个元素。这里的元素可以是字符串,也可以是数值,随意。

所以你可以像我那样把元素直接写出来,也可以直接放一个@{}的LIST变量。比如下面这样:

运行结果如下:

具体使用IN还是IN RANGE看具体需要,我只提供例子,大家自行选择具体方法。

比如你写IN  1  2  3  4  5  6 7 8 9 就不如直接用IN RANGE 1 10,效果都一样,像我这样的懒人肯定愿意用后者。

3、双重循环

以前写vbs的FOR循环可以这样写:

FOR  i=1 to 10

FOR J=1 to 8

do something

next J

next i

但是目前RF这里的FOR循环无法直接支持这样做,只能间接的做。

首先另外新增一个user keyword,比如我下面这个forJ

然后在前面那个for循环里调用这个forJ,这样就实现出了上面那种效果了。

运行结果,太长了,只贴最后的部分吧。

如果要在forJ里使用变量${i}的值,可以把forJ加上一个入参,把${i}传过去就好了,这个大家自己去做一下吧。

时间: 2024-11-10 02:04:10

Robot Framework--09 分支与循环的用法的相关文章

Robot Framework自动化测试Selenium2Library库详细用法

一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internetexplorer Internet Explorer ie googlechrome Google Chrome gc chrome opera Opera phantomjs PhantomJS htmlunit HTMLUnit htmlunitwithjs HTMLUnit with Javas

2小时入门Robot Framework

1.介绍 1.1.介绍Robot Robot Framework是一个基于关键字驱动的自动化测试框架.通过该框架,测试人员可使用python封装关键字,并在非代码环境下使用关键字构建可被执行的测试用例 Robot Framework官方网站:http://robotframework.org/ 1.2.安装 1.2.1.Robot Framework Robot Framework支持Python和Jython,本文档针对ubuntu下Python进行讲解 下载地址:https://pypi.p

Robot Framework语法学习(一)

Robot Framework语法学习: 一.变量的声明.赋值与使用 1.变量标识符:每个变量都可以用  变量标识符 ${变量名} 来表示. 2.变量声明:可以在TestSuite上点右键或者在Edit区点Add Scalar或Add List来新增变量. 3.变量赋值: 1)Set赋值:通常这种方式主要使用Set Variable或类似的使用了Set的关键字对变量进行赋值 ${type}  Set Variable  2013 2) Get赋值:主要用于返回值上,包括系统关键字的返回值和用户关

Robot Framework - 基础关键字 BuiltIn 库(二)

本篇教程,我们继续接着上篇内容进行讲解,我们本节教程讲解的是Robot Framework 机器人框架中的变量中使用判断.字符串的拼接.Evaluate的用法.调用Python文件.条件分支语句.以及For循环语句案例和字典中的基本使用,介绍字典的目的是方便后面我们做接口测试!好吧,我们开始搞起吧~~~ 判断中使用变量 字符串的拼接 Evalute用法 调用Python文件 条件分支案例 For循环语句案例 一.判断中使用变量 二.字符串的拼接 三.Evalute用法 四.调用Python文件

Robot Framework常用关键字介绍

下面关键字全部由 Builtin 库提供,Builtin 为 Robot Framework 标准类库.Builtin库提供常用的关键字 1.log log 关键字就是编程语言里的"print"一样,可以打印任何你想打印的内容. 2.定义变量 通过"Set variable"关键字来定义变量 3.连接对象 "Catenate"关键字可以连接多个信息 加上"SEPARATOR="可以对多个连接的信息进行分割. 4.定义列表 通过

Robot Framework自动化测试---Selenium API

一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internetexplorer Internet Explorer ie googlechrome Google Chrome gc chrome opera Opera phantomjs PhantomJS htmlunit HTMLUnit htmlunitwithjs HTMLUnit with Javas

Robot Framework自动化测试(三)---Selenium API

Robot  Framework  Selenium  API 说明: 此文档只是将最常用的UI 操作列出.更多方法请查找selenium 关键字库. 一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internetexplorer Internet Explorer ie googlechrome Google Chrome gc chrome opera Op

Robot framework(RF) Builti,Screenshot和Collections标准库介绍

1.1  Builti标准类库 在学习一门编程语言的时候,大多教材都是从打印“hello world”开始.我们可以像编程语言一样来学习Robot Framework.虽然通过RIDE 提供“填表”一样的写测试用例的方式.但它却有着像编程语言一样的强大的关键字,以及可以开发关键字的扩展能力. Builti标准类库包含了很多最常用的关键字,下面就逐一介绍常用关键字的使用. 3.7.1 log 关键字 log 关键字就是编程语言里的“print”一样,可以打印任何你想打印的内容. 在log关键字测试

Robot Framework 的安装配置和简单的实例介绍

Robot Framework 介绍 Robot Framework 是一款基于 Python 的功能自动化测试框架.它具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于轮次很多的验收测试和验收测试驱动开发(ATDD). 在我们进行全球化测试的时候可以用此框架来编写一些脚本任务,如定时下载 daily build , 配合 Selenium 完成自动化截图等,来方便我们的测试. Robot Framework 的安装和配置 在使用 RF(R