一年没写了,今天终于要写csdn了。
这一年里主要是在做自动化测试的东西,所以这么久没有更新。
这篇文章主要是介绍Robot Framework的基础语法。
一、Robot Framework简介
1.Robot Framework是什么
用于验收测试和验收测试驱动开发(ATDD)的通用测试自动化框架
使用关键字驱动的测试方法
使用Python或Java实现的测试库进行扩展
2.Robot Framework优缺点
优点:多兼容性,可集成PC测试,Web测试,手机测试等
缺点:工具运行时无法实时观测脚本运行状态
二、Robot Framework常用语法
1、上文说了Robot Framework是一个关键字来驱动的测试方法,所以这个时候就需要学习一下什么叫关键字
关键字在Robot Framework里就像是C语言的函数、面向对象的语言中的方法。它是为了完成一个功能来设计的,并且分为系统关键字和用户关键字。 |
系统关键字包含标准库里面的关键字和第三方库里面的关键字,这就像c/c++的库函数一样。 |
用户关键字是根据业务将不同的业务封装成一个关键字或者将用例执行的步骤封装成一个关键字。 |
关键字+测试数据组成了测试用例。 |
2、这里主要说一下标准库里面的关键字
log hello world #log:打印内容hello world到测试日志中
log many hello world hello world1 hello world2 #log many:打印多个内容到测试日志中
log to console hello world #log to console:打印内容到控制台
${str} Set Variable hello world #Set Variable:创建字符串变量hello world
@{list} Create List 1 2 3 4 5 6 #Create List:创建数组['1','2','3']
&{dict} Create Dictionary a=1 b=2 c=3 #Create Dictionary:创建字典{'a': '1', 'b': '2', 'c': '3'}
Append To List ${list} 4 5 #Append To List:添加元素4和5到已有的列表${list}中
${list} Combine Lists ${list1} ${list2} #Combine Lists:将关键字后面两个列表${list1}和${list2}合并为一个列表赋值给${list}
${count} Count Values in list ${list} 3 #Count Values in list:获取关键字后的列表${list}中存在元素3的个数赋值给${count}
${count} Get Match Count ${str} e #Get Match Count:获取关键字后的字符串${str}中存在字符串e的个数赋值给${count}
${ret} Get From List ${list} 0 #Get From List:获取关键字后的列表${list}中的索引第0个的值赋值给${ret}
${ret} Get From Dictionary ${dict} b #Get From Dictionary:获取关键字后的字典${dict}中的key值为a的value值赋值给${ret}
${ret} Get Slice From List ${list} 1 4 #Get Slice From List:获取关键字后列表${list}切片索引1至4中的内容后赋值给${ret}
${list} Insert Into List ${list} 0 a #Insert Into List:将关键字后的列表${list}插入一个新的元素a到索引0的位置后得到新列表赋值给${list}
Keep In Dictionary ${dict} a b #Keep In Dictionary:只保留key值为a和b的元素在字典${dict}中
${list} Remove Duplicates ${list} #Remove Duplicates:关键字后面的列表${list}去重之后重新赋值给${list}
Sort List ${list} #Sort List:将关键字之后的列表内容进行排序;需要注意的是原始列表数据顺序会破坏;如还使用原始列表需备份一份
${value} Catenate hello world how are you #Catenate:连接多个变量为一个变量 ${value}==hello world how are you
${value} Evaluate [i for i in range(5)] #Evaluate:使用此关键字之后可以使用python的方法并将结果返回出来给${value}
${locad_time} Get Time #Get Time:获取当前时间 例如 20xx-xx-xx xx:xx:xx
Sleep 3 #Sleep:延时3秒
关键字Run Keyword:
Run keyword and Continue on Failure #失败后仍继续运行
Run Keyword and lgnore Error #在运行关键字时忽略错误 返回两个值(执行结果和关键字返回值或错误信息)
Run Keyword If #满足后面条件时执行关键字
Robot Framework的断言:
断言类似于下判断,当该结果和我的判断一样时才算成功,否则失败
Should Be Empty ${Result} #断言结果不为空时通过;否则失败
Should Be Equal ${Result} ${Result1} #断言变量${Result}和${Result1}值相等时通过;否则失败
Should Be True 1==1 #断言后面出现的条件是True时通过;否则失败
Should Not Be True 1>2 #断言后面出现的条件不是True时通过;否则失败
Shoule Contain ${list} 3 #断言列表${list}中包含3时为通过;否则为失败
Shoule Not Contain ${list} 3 #断言列表${list}中不包含3时为通过;否则为失败
Should Start With ${Result} abc #断言变量${Result}字符串以abc开头时通过;否则失败
Should Match ${Result} hello #断言变量${Result}字符串匹配hello时通过;否则失败
Should Be Equal As Integers ${Result} 10 #断言变量${Result}整数与10相等时通过;否则失败
Should Be Equal As Number ${Result} 2.5 #断言变量${Result}数值与2.5相等时通过;否则失败
三、重要知识详解
1、在Robot Framework中的"空格"使用方法
关键字可以是一个字符串例如"log",也可以是由多个字符串拼接而成例如 "Run Keyword If",
关键字和数据之间的空格为四个(' '),由多个字符串拼接关键字中的'空格'为一个空格(' ')。
2、Run Keyword If判断语法使用
在...前后都是4个空格 (' ')
#普通的if判断语句(注意ELSE语句前面的三个点以及大写)
Run Keyword If 1==1 log to console hello world #如果满足条件 1==1 控制台输出hello world
... ELSE log to console hello world1 #否则控制台输出hello world1
#并列与或条件的if判断语句(注意ELSE语句前面的三个点以及大写)
Run Keyword If 1==1 or 1==2 log to console hello world #如果满足 1==1或1==2其中一个条件 控制台输出hello world
... ELSE IF 1==1 and 2==2 log to console hello world1 #如果满足 1==1并且还满足1==2这两个条件 控制台输出hello world1
... ELSE log to console hello world2 #否则控制台输出hello world2
#多个条件的判断语句执行单个动作(注意ELSE和ELSE IF语句前面的三个点以及大写)
Run Keyword If 1==1 log to console hello world #如果满足条件 1==1 控制台输出hello world
... ELSE IF 2==2 log to console hello world1 #又如果满足条件2==2 控制台输出hello world1
... ELSE log to console hello world2 #否则控制台输出hello world2
#多个条件的判断语句执行多个动作(注意ELSE和ELSE IF语句前面的三个点以及大写)
Run Keyword If 1==1 Run Keywords log to console hello world AND log to console hello world1 #如果满足条件 1==1 控制台输出hello world 并且输出hello world1
... ELSE IF 2==2 Run Keywords log to console hello world2 AND log to console hello world3 #又如果满足条件2==2 控制台输出hello world2 并且输出hello world3
... ELSE Run Keywords log to console hello world4 AND log to console hello world5 #否则控制台输出hello world4 并且输出hello world5
3、循环语法使用
注意FOR循环下的执行语句前面的反斜杠 ‘\’且‘\’与其后语句有4个空格
#Repeat Keyword 重复执行单一动作
Repeat Keyword 5 log to console 123 #重复循环5次控制台输出123
Repeat Keyword 5 times log to console 123 #重复循环5次控制台输出123
Repeat Keyword 5 x log to console 123 #重复循环5次控制台输出123
#循环range的范围数值
:FOR ${i} In Range 10 #for循环遍历数值0到9
\ log to console ${i} #控制台输出0到9
#循环range的范围数值
:FOR ${i} In Range 10 20 2 #for循环遍历数值10到20 步长值为2
\ log to console ${i} #控制台输出10,12,14,16,18
#循环列表中的元素
@{test_list} Create List a b c d e #创建列表['a','b','c','d','e']
:FOR ${i} In ${test_list} #for循环遍历列表元素
\ log to console ${i} #控制台输出每个元素
#循环中加判断条件
:FOR ${i} In Range 10 #for循环遍历数值0到9
\ Continue For Loop If ${i}==5 #循环条件满足遍历值等于5时跳过本次循环
\ log to console ${i} #输出遍历值
\ Run Keyword If ${i}==6 log to console hello world #如果遍历值等于6时 控制台输出 hello world
\ Exit For Loop If ${i}==8 #判断循环的值满足条件等于8时退出循环
四、常见问题及解决
1、报错:No keyword with name ‘XXXXXX’ found
这个意思是'XXXXXX'是一个没有找到的关键字,这个时候去看看是不是空格加错了,或者该关键字的库路径不对。
2、当运行时先打出来一堆路径,这时候可能是编码问题。
如果不解决乱码问题,脚本执行的时候会报编码错误问题,提示调用具体文件出现编码错误问题,怀疑可能是框架自身不完善的原因,
可以采取的规避手段就是在每次修改完Python文件时及时保存,
如果出现乱码及时撤销,关闭文件再进行修改,就可能避免出现中文乱码问题。