hello,今天和大家分享下robotfrmework来进行ui自动化的操作,个人在使用pytest执行ui自动化时,觉得从迭代效率上来说还是有点慢的,再加上有些同学本身的python基础就比较薄弱,所以想和大家一起聊下robot这个东西
废话不多说,直接上干货
一:RF介绍
我们在写RF的时候,主要的组成部分有两块,一个是用例集(test suite),一个是测试用例(test case)
1:设置区
1.1:Document->添加用例说明
1.2:Suite Setup->执行此测试套件的前置操作,如初始化数据等。
1.3:Suite TearDown->执行此测试套件结束后的操作,如恢复数据等
1.4:Setup->执行用例的前置操作
1.5:Test TearDown->执行用例结束后的操作
1.6:Force Tags->用例标签,suite中的标签会给该测试套件下的所有Test Case增加Force Tags
1.7:Timeout->设置每一个测试案例的超时时间,只要超过这个时间就会失败,并停止案例运行。防止某些情况导致案例一直卡住不动,也不停止也不失败
1.8:Template->测试模板,可以指定某个关键字为这个测试套件下所有TestCase模板,这样所有的TestCase就只需要设置这个关键字的传入参数即可。(TestCase中使用)
1.9:Arguments->传入参数(New User Keyword使用)
2.0:Return Value->返回值(New User Keyword使用)
2:RF变量数据类型
2.1:变量
是计算机语言中能存储计算结果或能表示值抽象概念,变量可以通过变量名访问
赋值:${X1}=set variable 123
运算:${X3}=evaluate ${X1}+${X2}
应用:
获取网页的文本,然后断言
2.2:数组(列表)
是有序的元素序列,用于区分数组的各个元素的数字编号称为下标。
@{list}= create list 1 2
${list[0]}
应用
调用接口传参数的时候,可以用数组
2.3:字典
数据字典:可以根据键得到值;也可以更新键的值
&{map}=create dictionary aa=AA bb=BB
${map['aa']}
应用
json格式解析之后就是字典
这里需要注意的是各变量的符号,列表使用@,字典使用&,变量使用$,其次需要注意的是三者无论哪个,在输出(log to console)时,都要使用$统一进行输出
直接上实例:
***setting***
Documentation 两个实例相加
*** Keywords ***
testkey01
[Documentation] 实现两个相加
[Arguments] ${x} ${y}
${a} Evaluate ${x}+${y}
[Return] ${a}
testkey02
[Documentation] 实现列表前两个数相加
[Arguments] @{list}
${res} Evaluate ${list[0]}+${list[1]}
[Return] ${res}
testkey03
[Documentation] 实现字典前两个数相加
[Arguments] &{map}
${m} Evaluate ${map['x']}+${map['y']}
[Return] &{map}
*** Test Cases ***
testcase01
${a} testkey01 10 10
Log To Console ${a}
testcase02
@{list_value} Create List 1 2 3 4
${a} testkey02 @{list_value}
Log To Console 列表前两数相加的结果:${a}
testcase03
&{map_value} Create Dictionary x=10 y=20
${m} testkey03 &{map_value}
Log To Console 字典前两个的值:${m}
以上三个测试用例的输出结果为:
1-->20
2-->3
3-->30
上面实例中主要了解的是一下关键字
1:Create List,代表的符号是@
2:Create Dictionary,代表的符号是&
3:Arguments类似我们在写python是,定义方法是传入的形参,在调用方法时都会传入实参
3:分支和运算
*** Settings ***
*** Test Cases ***
testcase01
${x} Set Variable 1
${y} Set Variable 2
Run Keyword If ${x}<${y} Log To Console 值最大的是:${y}
... ELSE Log To Console 值最大的是:${x}
testcase02
[Documentation] 这是利用for。。。in来实现循环
${s} Set Variable 0
@{list} Create List 1 2 3 4
FOR ${i} IN @{list}
${s}= Evaluate ${s}+${i}
Run Keyword If ${i}>3 Exit For Loop
END
Log To Console 循环后的结果为:${s}
testcase03
@{list1} Create List 1 2 3 4
Append To List ${list1} 5
Log To Console 添加元素后的列表为:${list1}
testcase04
@{list2} Create List 1 2 3
#通过下标进行删除
Remove From List ${list2} 2
Log To Console 通过下标删除元素后的列表:${list2}
#直接删除列表中的值,不通过下标
Remove Value From List ${list2} 2
Log To Console 直接删除列表值后的列表:${list2}
testcase05
[Documentation] 这是利用for。。。in range来实现循环
${res} Set Variable 10
FOR ${i} IN RANGE ${res}
Continue For Loop If ${i}>9
Log To Console ${i}
END
以上四个测试用例的输出结果为:
1-->2
2-->10
3-->[1,2,3,4,5]
4-->通过下标删除元素后的列表:[1,2]
直接删除列表值后的列表:[1]
注意:最新版本RF用【 FOR ... END 】形式,代替了旧版本【:FOR ...】 形式