文章目录
一、关键字
关键字使用方法查看
1、查看官方档 :https://robotframework.org/#libraries
2、查看源码方式(ctrl+点击关键字)
常用关键字
1、log、log to console、log many 可变关键字
*** Test Cases ***
常用关键字-log
log 我来自log
log to console 我来自log to console
log many 我 是 小仙女 #内容中间有超过一个空格时,会认定空格前后是两个参数
执行robot文件后,如下图所示:
控制台只会显示log to console 的内容,而log、log many只会在日志中显示
建议: 在调试过程中,如果遇到log很长的时候,建议使用log,这样会在日志中全部显示,且可视性比较好
log many 的参数中如果本身包含一个以上的空格,处理方法:
- 临时方法:从第二个空格处前加\修饰,但是一个反斜杠只能修饰一个空格
- python处理法
2、传递参数:set variable、convert to integer
*** Test Cases ***
常用关键字-set variable
${name} set variable xianyu #类似于python中定义的 name = 'xianyu'
${age} convert to integer 18 #定义一个整数变量
log to console ${name}
log to console ${age}
注意:
- set variable 后面的常量(无论是数字、列表、字典等) 在RF中统统都是str的格式,所以都不需要加引号
- 补充:convert to number 定义浮点数、convert to boolean 定义一个布尔值
3、sleep
*** Test Cases ***
sleep
log to console 3秒后见
sleep 3
log to console 又见了
4、断言:should be equal、should be equal as integers、should be true
*** Test Cases ***
断言1
${expect} set variable 2021
should be equal ${expect} ${2021}
上面代码执行是不会通过的,因为 ${2021}表示int格式的2021,而变量expect是str格式2021,格式不一样,所以比较未通过
*** Test Cases ***
断言2
${expect} set variable 2021
should be equal as integers ${expect} 2021
此时执行会通过,因为should be equal as integers会把${expect}和2021都转为int来比较,所以会通过
*** Test Cases ***
断言3
${expect} set variable hello
should be true $expect=='hello'
注:should be true <python表达式>,如果python表达式中有变量,那么需要给变量去{}
二、认识测试库
导入其他模块方式:
- 路径导入法:Library get_type.py
- 模块导入法:Library get_type 或者文件.包的形式,与python类似
注:如果get_type不在当前路径下执行时,需要添加模块所在目录到pythonPath中,如
robot -P …/day1 test.robot
三、变量
1、列表类型
*** Test Cases ***
列表类型
${list} create list a b c
log to console ${list} # 控制台打印结果:['a','b','c']
log many ${list} # log打印结果:['a','b','c']
log many @{list} # 相当于解包,log打印三条结果:分别是a b c
log many ${list}[0] # 也可以是${list[0]},log打印结果:a
2、字典类型
*** Test Cases ***
字典类型
${dict} create dictionary a=1 b=2 c=3
log to console ${dict}
log many ${dict}
log many &{dict} #解包
log many @{dict} # 解出key
log many ${dict}[a]
打印结果,如下:
四、循环
循环1
FOR ${i} IN a b c d
log to console 循环打印:${i}
END # 循环结束
循环2
${list} create list a b c
FOR ${i} IN @{list}
log to console 循环打印:${i}
END
循环3
FOR ${i} IN RANGE 5 # 从0开始到4结束
log to console 循环打印:${i}
END
循环4
FOR ${i} IN RANGE 1 5 # 从1开始到4结束
log to console 循环打印:${i}
END
循环5
FOR ${i} IN RANGE 1 5 1 # 从1开始到4结束,步长为1
log to console 循环打印:${i}
END
执行结果:
五、判断
1、if
关键字:run keyword if <condition表达式> 执行内容
*** Test Cases ***
条件判断
run keyword if 1==0 log to console 错误
run keyword if 1==1 log to console 正确
由上可知,如果条件不成立时,也不会执行失败,这与另一个 参数同为condition的should be true 不一样,should be true为断言类型,不通过时就会执行失败
补充:如果条件表示式后面的内容太长时,可采用如下方法:
*** Test Cases ***
条件判断
run keyword if 1==0 log to console 错误
run keyword if 1==1
... log to console 正确 # 换行后,加...且其后加两格以上空格
2、if-else
条件判断2
run keyword if 1==0 log to console 正确
... ELSE log to console 错误
执行结果:
3、if-else if
条件判断3
run keyword if 1==0 log to console 错误
... ELSE IF 1==1 log to console 正确
... ELSE log to console 都不对
4、嵌套
条件判断4
run keyword if 1==1
... run keyword if 2==2
... run keyword if 3==3 log to console 三层都对
执行结果:
实测不好用!不推荐!!如果使用嵌套的话,用python写一个吧,再调用
5、FOR循环判断
getScoreLevel.py文件
from robot.api import logger
def check_score(score):
if 90<int(score)<100:
logger.console('scoreLevel:A')
elif 60<int(score)<90:
logger.console('scoreLevel:B')
elif 0<int(score)<60
logger.console('scoreLevel:C')
*** Settings ***
Library getScoreLevel.py
Library Dialogs
*** Test Cases ***
条件判断5
FOR ${i} IN RANGE 9999
${score} get value from user 请输入分数(q退出,c继续):
exit for loop $score=='q' # exit for loop相当于break
continue for loop $score=='c' # continue for loop相当于break
check score ${score}
END
代码解读:
因为RF中没有python中的while语法,所以只能使用FOR+判断在足够多的循环次数下达到相同效果。代码运行时会弹出下面对话框(使用get value from user关键字调用)
输入的0-100的数字时,控制台会显示getScoreLevel.py文件对应的输出信息;
当输入q时,退出循环,且正常退出,控制台不会显示Fail;
当输入c时,继续循环,对话框再一次显示出来
六、evaluate <python表达式> 执行python语句
evaluate <python表达式>用来计算python表达式,不建议使用evaluate运行复杂的代码,如有需要交给python代码
evaluate练习
${list} evaluate [i for i in range(5)]
log ${list}
evaluate print('hello') #print 的内容只在log中显示
执行结果:
evaluate底层实现逻辑是python的eval函数
eval()不支持赋值操作,如:
evaluate练习
${a} set variable 123
evaluate $a=1
log ${a}