前言
最近遇到一个问题,在服务器上定时构建运行UI自动化时,总是遇到在test case的set up阶段,也就是登录阶段,页面一直加载超时,从log只能看出这个截图显示页面一直在加载中,但具体是加载什么超时,也就是哪个接口超时,看不出来, 我就准备在脚本中增加打印请求接口的时间
这里怎么写接口相关的脚本,有两种方式,一种是自己写一个关于请求接口的python库,RF来调用它,这个自己写代码灵活性比较高。 还有一种是直接使用RF开源框架支持的第三方库
1. 使用python requests库
用python进行接口相关操作,会使用requests库,关于这个库也有官方文档可供参考 cn.python-requests.org/zh_CN/lates…
安装
pip install requests
使用
它支持request请求的7个方法: get/post/options/head/put/patch/delete
每个方法的返回都是一个response对象
去调用的时候有两种方式
- (1)分别调用requests中的特定方法
res = requests.get(url)
res = requests.post(url)
res = requests.put(url)
res = requests.patch(url)
res = requests.options(url)
res = requests.head(url)
res = requests.delete(url)
详细参数,可看源码
- (2)使用request方法
res = requests.request('GET', url)
res = requests.request('OPTIONS', url)
res = requests.request('HEAD', url)
res = requests.request('POST', url)
res = requests.request('PUT', url)
res = requests.request('PATCH', url)
res = requests.request('DELETE', url)
以上详细和使用方法可参考官方文档和源码,今天重点讲在RF中怎么使用
举例
比如我在我的TestLib库中新建一个python文件 在里面写入如下代码,获取需求请求接口的时间,然后返回
def get_interface_request_duration(self, url_list, cookie_dict):
url_duration_dict = {}
for url in url_list:
respones = requests.request('GET', url=url, headers=cookie_dict,allow_redirects=False)
duration = respones.elapsed.total_seconds()
url_duration_dict[url] = duration
return
在RF中我这样调用
这个python文件如何像库一样,可以被导入,可参考我之前的文章# robot framework--扩展关键字
1. 使用RF的第三方库RequestsLibrary
安装
pip install robotframework-requests
使用
这个库也封装了很多关键字,可参考文档marketsquare.github.io/robotframew…
实例
我发起get请求,详细代码如下, 我先引入RequestsLibrary,然后封装一个用户关键字获取接口加载时间,然后在testcase里调用这个用户关键字
*** Settings ***
Library RequestsLibrary
*** Test Cases ***
001_TC_test interface
${url_list} set variable url1 url2
get_interface_request_duration ${url_list}
***Keywords***
get_interface_request_duration
[Arguments] @{url_list} ${mocker_cookie_dict}=${EMPTY}
FOR ${url} IN ${url_list}
${RES} GET ${url} headers=${mocker_cookie_dict}
log ${RES.elapsed.total_seconds()}