在对批量测试用例进行测试的时候,往往会不知道这个用例到底执行多久结束。绝大多数情况下,含有某个关键词的日志打印出来可以对应着某个用例的流程结束。
如果用“sleep ns”方法等待执行结束,我们不得不采用放大执行时间的方法来保障在机器比较卡的时候也能执行完流程。如果可以实时监测结果日志是否出现,便可以大大降低批量测试用例实行的总时间。robot framework测试工具可以使用Wait Until Keyword Succeeds关键字实现我们的需要。
语法:Wait Until Keyword Succeeds| timeout, retry_interval, name, *args
解释:等到指定的关键字成功或给定的超时过期。| timeout 表示超时 | retry_interval 表示重新操作的间隔 时间 | name表示要等待的关键字名称 | *args 表示所需等待加载的locator
举例:
假如在执行主目录下面的log/msrp.log里出现关键字${init_succ}则用例执行成功。可以先在相应的\library\KeywordsOfSth.py 设计函数searchkeywordsinremotelog(核心思想是在主目录执行”grep -o 表示成功的关键字符 ~/log/日志文件名| wc -l”,并取出执行结果判断是否不为0),再在\resource\自定义关键字.txt里定义关键字“日志关键字验证”并与函数searchkeywordsinremotelog建立关联。
测试用例里使用如下格式即可实现每1秒钟到机器上的/log/msrp.log中查找一次${init_succ},若查到则用例执行成功。若查找10秒后仍未查到,则用例执行失败。
Wait Until Keyword Succeeds 10s 1s 日志关键字验证 ${ipaddress} ${user} ${pswd} ${init_succ} msrp.log
测试截图如下,在该测试中,从开始使用Wait Until Keyword Succeeds 后第四次查找找到了关键词,用例执行成功。
附相关修改:
Keyword目录添加以下内容:
*** Variables ***
${init_succ} MSRPInitSucc # MSRP初始化成功
自定义关键字.txt添加以下内容:
日志关键字验证
[Arguments] ${hostip} ${username} ${password} ${keywords} ${logname}
[Documentation] 说明:使用ssh连接到服务器上,从指定日志文件中搜索关键字
... ${hostip}:要搜索文件的服务器IP地址|
... ${username}:要搜索文件所在的用户名|
... ${password}: 要搜索文件所在用户的密码|
... ${keywords}:要搜索日志里的关键词
... ${logname}:要搜索文件在服务器上的日志名称,如msrp.log
${result} searchkeywordsinremotelog ${hostip} ${username} ${password} ${keywords} ${logname}
ShouldBeTrue ${result}
\library\KeywordsOfSth.py设计以下函数:
def searchkeywordsinremotelog(self,host,username,password,keyword,logname):
transport = paramiko.Transport((host, 22))
transport.connect(username=username, password=password)
ssh = paramiko.SSHClient()
ssh._transport = transport
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
searchstring = 'ls -al ~/log|grep ' + logname + ' |grep -o ' + keyword + ' ~/log/' + logname + '| wc -l'
stdin, stdout, stderr = ssh.exec_command(searchstring)
exectout = stdout.read()
print(stdout.read())
ssh.close()
return exectout
警示:python代码修改时一定要注意格式 !!!