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}传过去就好了,这个大家自己去做一下吧。
Robot Framework--09 分支与循环的用法的更多相关文章
- robot framework 的关键字Continue For Loop 用法
Continue For Loop关键字就是python的continue的意思,跳出本层循环,继续执行下一个循环. 我先举个栗子: :FOR ${index} IN RANGE 5 ...
- Robot Framework自动化测试Selenium2Library库详细用法
一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internete ...
- Robot Framework使用For循环
1.普通的For循环 在一个普通的For循环中,循环开始的关键字是 :FOR ,其中的:用于与一般关键字做区分,对于循环结构体内的每一行,使用 \ 作为改行的行首关键字.对于循环中的变量,可以在 IN ...
- Robot Framework 教程 (7) - 使用For循环
在自动化测试过程中,使用For循环来对某个动作进行重复操作是很普遍的行为.在Robot Framework中,各种测试库中均提供了多种方式的For循环结构,在其中覆盖了大部分类型的循环类型.而Robo ...
- Robot Framework(九) 执行测试用例——基本用法
3.1基本用法 Robot Framework测试用例从命令行执行,默认情况下,最终结果是XML格式的输出文件和HTML 报告和日志.执行后,可以组合输出文件,然后使用rebot工具进行后处理. 3. ...
- Robot Framework(13)- RF 循环的详细使用
如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 前言 RF用 ...
- Robot Framework用法总结
今天总结下Robot Framework最基本的用法,一来呢,希望自己以后看到这篇总结,很快能回忆起如何使用Robot Framework.二来呢,以初学者的姿态总结Robot Framework,希 ...
- Robot Framework 自动化测试 Selenium2Library 库 用法
Robot Framework自动化测试Selenium2Library库详细用法 一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com ...
- 【转】Robot Framework用法总结
今天总结下Robot Framework最基本的用法,一来呢,希望自己以后看到这篇总结,很快能回忆起如何使用Robot Framework.二来呢,以初学者的姿态总结Robot Framework,希 ...
随机推荐
- 浅谈HTTP请求头content-type
请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成.实体头域包含关于实体的原信息,实体头包括Allow.Content- Base.Content-Encoding.Content ...
- 【BZOJ 3053】The Closest M Points
KDTree模板,在m维空间中找最近的k个点,用的是欧几里德距离. 理解了好久,昨晚始终不明白那些“估价函数”,后来才知道分情况讨论,≤k还是=k,在当前这一维度距离过线还是不过线,过线则要继续搜索另 ...
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者jdk并配置好环境变量.(2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本不一致 ...
- composer更新不成功,启用国内镜像网站的配置更改办法
通过 composer config -l -g 命令可以列出 composer 的全局配置信息 [home] 配置项就是 composer 的主目录 修改config.json { "co ...
- 为什么局域网IP是192.168开头?
IPv4地址分为A.B.C.D.E五类,除去特殊作用的D.E两类,剩下的A.B.C三类地址是我们常见的IP地址段.A类地址的容量最大,可以容纳16777214个主机,B类地址可以容纳65534个主机, ...
- 新手该学习Python2.x版本还是3.x版本
如果你是一个初学者,或者你以前接触过其他的编程语言,你可能不知道,在开始学习python的时候都会遇到一个比较让人很头疼的问题:版本问题!!是学习python2 还是学习 python3 ?这是非常让 ...
- 【caffe】三种文件类别:solver,model和weights
@tags: caffe 文件类别 solver文件 是一堆超参数,比如迭代次数,是否用GPU,多少次迭代暂存一次训练所得参数,动量项,权重衰减(即正则化参数),基本的learning rate,多少 ...
- 大规模图的存储(前向星、next数组)
大规模图的储存 在信息学中,经常会遇到比较大规模图,使用指针固然是很好的方法,不过一有指针速度不如数组之说,二有指针不如数组稳定之说,三有,也是最重要的,指针不如数组来得方便,这也便是大多数Oier不 ...
- springMVC配置步骤
所用的工具为eclipse for javaEE,tomcat 8.0 1.导入jar包 把以上的jar包全部复制到项目的WebContent/WEB-INF/lib目录中 2.在webContent ...
- Genymotion关于【启动后player.exe已停止运行】解决方案总结
1. 你硬盘空间不足,或是暂存区不够,请少执行一些程序或关掉一些p2p的程序,或是到控制面板卸载一些不必要的程序.最好的建议是定期进行硬盘清理,确保不浪费多余空间 ---以上来源(http://www ...