软件测试 | Requests库

86 阅读2分钟

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

安装

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

Pypi地址:pypi.python.org/pypi/reques…

下面就通过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_code
200

>>> 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'] == 200
assert 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 requests
import 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霍格沃兹的干货都很硬核