写点什么

软件测试 | Requests 库

  • 2023-05-06
    北京
  • 本文字数:1538 字

    阅读完需:约 5 分钟

Requests 使用 Apache2 Licensed 许可证的 HTTP 库。它基于 urllib3,因此继承了 urllib3 的所有特性。Requests 支持 HTTP 连续保持和连接池,支持使用 Cookie 保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

安装

如果已经安装,那么此处可以省略。如果尚未安装,则可以通过 PyPI 仓库获取安装。

Pypi 地址:https://pypi.python.org/pypi/requests

下面就通过 Requests 官方文档提供的第一个例子来体会它的用法。

Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015,02:27:37) [MSC v.1900 64 bit (AMD64) on win32]Type "copyright","credits" or "licence()" for more information.>>> import requests>>> r = requests.get('https://api.github.com/user',auth=('user','pass'))
>>> r.status_code200
>>> r.headers['content-type']'application/json; charset=utf-8'
>>> r.encoding'utf-8'
>>> r.text'{"login":"defnngj","id":1000588,"avatar_url".......}
>>> r.json(){'public_gists' : 0,'id':1000588,'type':......
复制代码

想要执行这个例子,你需要有一个 GitHub 账号,auth 参数的“user”和“pass”需要替换为具体的 GitHub 账号和密码才行。

接口测试

通过上面的例子,不难发现使用 Requests 调用接口非常简单。下面就针对查询发布会接口编写一个完整的接口测试用例。

import requests
#查询发布会接口url = "http://127.0.0.1:8000/api/get_event_list/"r = requests.get(url,params={'eid':'1'})result = r.json()
#断言接口返回值assert result['status'] == 200assert result['message'] == "success"assert result['data']['name'] == "XX产品发布会"assert result['data']['start_time'] == "2016-12-08T14:29:21"
复制代码

查询发布会接口请求类型为 GET,所以,通过 Requests 库的 get()方法调用。get()方法第一个参数为调用接口的 URL 地址,params 指定接口的入参,将参数定义为字典。

json()方法可以将接口返回的 JSON 格式的数据转化为字典。

最后,通过 assert 语句断言字典中的值,即接口返回的数据,其中包括状态码 status、消息 message 和发布会信息 data 等。

集成 unittest

将接口测试脚本集成到 unittest 单元测试框架中,利用 unittest 的功能来运行接口测试用例。

import requestsimport unittest
class GetEventListTest(unittest.TestCase): '''查询发布会接口测试''' def setUp(self): self.url = "http://127.0.0.1:8000/api/get_event_list/"
def test_get_event_null(self): '''发布会id为空''' r = requests.get(self.url,params={'eid':''}) result = r.json() self.assertEqual(result['status'],10021) self.assertEqual(result['message'],"parameter error")
def test_get_event_error(self): '''发布会id不存在''' r = requests.get(self.url,params={'eid':'901'}) result = r.josn() self.assertEqual(result['status'],10022) self.assertEqual(result['message'],"query result is empty")
def test_get_event_success(self): '''发布会id为1,查询成功 r = requests.get(self.url,params={'eid':'1'}) result = r.json() self.assertEqual(result['status'],200) self.assertEqual(result['message'],"success") self.assertEqual(result['data']['name'],"小米5发布会") self.assertEqual(result['data']['address'],"北京国家会议中心") self.assertEqual(result['data']['start_time'],"2016-12-08T14:29:21")
#.....
if _name_ =='_main_': unittest.main()
复制代码

关于 unittest 单元测试框架的使用,这里同样使用接口测试用例的组织与执行。

搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | Requests库_测试_测吧(北京)科技有限公司_InfoQ写作社区