写点什么

RF 中使用 reuqests 的两种方式

作者:红毛丹
  • 2022 年 6 月 11 日
  • 本文字数:1322 字

    阅读完需:约 4 分钟

前言

最近遇到一个问题,在服务器上定时构建运行 UI 自动化时,总是遇到在 test case 的 set up 阶段,也就是登录阶段,页面一直加载超时,从 log 只能看出这个截图显示页面一直在加载中,但具体是加载什么超时,也就是哪个接口超时,看不出来, 我就准备在脚本中增加打印请求接口的时间


这里怎么写接口相关的脚本,有两种方式,一种是自己写一个关于请求接口的 python 库,RF 来调用它,这个自己写代码灵活性比较高。 还有一种是直接使用 RF 开源框架支持的第三方库

1. 使用 python requests 库

用 python 进行接口相关操作,会使用 requests 库,关于这个库也有官方文档可供参考https://cn.python-requests.org/zh_CN/latest/user/quickstart.html

安装

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 url_duration_dict
复制代码


在 RF 中我这样调用



这个 python 文件如何像库一样,可以被导入,可参考我之前的文章# robot framework--扩展关键字

1. 使用 RF 的第三方库 RequestsLibrary

安装

pip install robotframework-requests

使用

这个库也封装了很多关键字,可参考文档http://marketsquare.github.io/robotframework-requests/doc/RequestsLibrary.html

实例

我发起 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()}
复制代码


发布于: 刚刚阅读数: 4
用户头像

红毛丹

关注

还未添加个人签名 2022.01.26 加入

全网网名都是红毛丹 掘金个人主页https://juejin.cn/user/1820446987401374

评论

发布
暂无评论
RF中使用reuqests的两种方式_Python_红毛丹_InfoQ写作社区