一、接口自动化测试
1.1 概念:接口测试:是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。
自动化测试:是把以人为驱动的测试行为转化为机器执行的一种过程。
接口自动化测试:让程序代替人工对接口项目进行自动验证测试的过程
1.2 实现方式:工具(jmeter、postman)
代码(python-requests)
1.3 测试工具的优缺点:测试数据不好控制(无法直接读取或存储json格式)
测试数据加密不方便
扩展性不足(复杂业务逻辑,复杂断言)
二、Requests库
2.1 介绍:
Requests库是用Python编写的,基于urllib,采用Apache2 Licensed开源协议的HTTP库,相比urllib库,Requests库更加方便,可以节省我们大量的工作,完全满足HTTP测试需求。
2.2 安装:
pip install requests
# 验证是否安装成功
C:\Users\XXX>pip show requests
Name: requests
Version: 2.22.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
License: Apache 2.0
Location: e:\python\python36\lib\site-packages
Requires: idna, chardet, urllib3, certifi
Required-by: baidu-aip
2.3 发送请求常见的HTTP请求方式:GET、POST、PUT、DELETE、HEAD、OPTIONS
使用requests发送网络请求非常简单,只需要调用HTTP请求类型所对应的方法即可。
2.3.1 GET请求(查询资源)
import requests
response = requests.get("http://www.baidu.com")
请求方法的返回值response为Response对象,我们可以从这个对象中获取所有我们想要的响应信息。
# 导包
import requests
url = "http://www.baidu.com"
# response为响应数据对象
response = requests.get(url)
# 获取请求url地址
print(response.url)
# 获取响应状态码
print(response.status_code)
# 获取响应信息(文本形式)
print(response.text)
GET带参
# GET请求方法带参演练
'''
案例1. http://www.baidu.com?id=1001
案例2. http://www.baidu.com?id=1001,1002
案例3. http://www.baidu.com?id=1001&kw=北京
'''
请求方法:GET
参数:params:字典或字符串(推荐使用字典)
import requests
# 不推荐写法 静态 url = "http://www.baidu.com?id=1001"
url = "http://www.baidu.com"
# 案例1 params ={"id":1001}
# 案例1 字符串形式(不推荐)
# response = requests.get(url,params="id=1001")
# 案例2 params ={"id":"1001,1002"}
# 案例3 params ={"id":1001,"kw":"北京"}
response = requests.get(url,params=params)
print(response.url)
2.3.2 POST请求(新增资源)
import requests
url = "请求url"
response = requests.post(url,json,headers)url:新增接口url地址
json:新增请求报文
Headers:请求信息头
响应状态:response.status_code
响应信息(以json文本形式响应内容):response.json()
data与json区别:data:字典对象
json:json字符串
提示:在Python中字典对象和json字符串长得一样,但是后台格式是有区别的
如何将字典对象转为json字符串?导入json
json.dumps(字典对象)
响应数据json()与text区别:
print(response.text)
print(response.json())
json():返回类型字典,可以通过健名来获取相应的值
text():返回的类型为字符串,无法通过健名来获取相应的值
共同点:长得都像字典
2.3.3 PUT方法(更新资源)
import requests
url = "url地址"
response = requests.put(url,json,headers)
参数:参考POST方法参数
2.3.4 DELETE方法(删除资源)
import requests
url = "url地址"
response = requests.delete(url)
# 响应状态码 204
print(response.status_code)
2.4 响应内容
response.status_code 状态码
response.url 请求url
response.encoding 查看响应头字符编码
# 1.获取请求编码 响应对象.encoding
# 2.设置响应编码 响应对象.encoding="utf-8"
response.headers 获取响应信息头信息(比较重要)
response.cookies cookie信息
response.text 文本形式的响应内容
response.content 字节形式的响应内容
response.json JSON形式的响应内容