🎬Python实现头条项目接口自动化测试实战,含接口自动化测试流程、项目接口介绍、用例设计、代码编写、数据驱动、生成报告
📒笔记:
1.需求分析
登录接口
(1)请求登录接口
- 请求 url:http://...
请求方法:post,
请求数据(来自Headers):Headers = {"Content-Tpye":"application/json"}
请求报文(来自Body):{"mobile":"18600000000","code":888888}
- 响应(响应数据{"message":"xxx"},
状态码:201)
(2)获取短信验证码 url:http://...
状态码:200
请求方法:get
提示:验证码1分钟之内只能接收1次
单接口:颗粒度放比较小,以测试数据为颗粒度
多接口:以接口为颗粒度进行划分
2.挑选需要做自动化的接口(时间,人员,接口复杂度)
3.设计自动化测试用例(如果功能阶段设计过用例,直接拿过来使用即可)
4.搭建自动化环境
5。设计自动化执行框架(报告,参数化,用例执行框架(unittest、pytest)
6.编写代码
7.执行用例(unittest、pytest)
8.生成测试报告(htmltestrunner,allure)
登录接口:
api层:
case层:
⚠️运行登陆接口时请求接口成功后会返回一个token(令牌),有些依赖登陆成功的接口需要token才可以进行
参数化:
参数化使用的是列表嵌套元组,如果数据存储在json文件里需要封装一个把json文件改成列表 嵌套元组的方法
tools工具层:
read_json.py:读取json文件
cookies、token、session
cookies:
来源:服务器生成
作用:区分统一请求客户端
获取:响应对象.cookies
设置:cookies = {"获取出的cookies键名":"获取出的值"}
应用:request.请求方法(url,cookies=cookies)
session:
代表一次用户会话:从客户端浏览器连接服务开始,到客户端浏览器与服务器断开(可以记录一次会话的全部cookies数据并自动在下一条请求附加,不需要手动添加cookies)
import requests
#获取session对象
session = requests.session()
#请求验证码,让session对象记录cookies信息
url_verify = "http://"
session.get(url_verify)
#请求登陆
url_login = “http://”
data = {"username":"13800001111",
"password":"123456",
"verify_code":8888}
session.post(url_login,data=data)
⚠️请求方法返回值为Response对象,含有如下信息:
import requests
url = 'http://www.baidu.com'
r = requests.get(url)
print(r) #<Response [200]>
⚠️如果请求响应的内容为json格式数据,可以直接调用response.json()获取数据,requests中内置了json解码器,解码异常会抛出异常
常见http请求:
GET,POST,PUT,DELETE(对应资源的增删改查),HEAD(只有信息头,没有body),OPTIONS(可以查看可以用了什么方法)
GET:资源查询请求获取资源,响应成功状态码:200
GET带参使用:使用params= 动态传参,params为字典或者字符串
import requests
url = "http://www.baidu.com"
params = {"id":1001}
#请求带参数
r = requests.get(url,params=params)
#获取请求URL地址
print("请求URL",r.url)
POST:新增资源,响应成功状态码:201
import requests
url = "http://127.0.0.1:8000/api/department"
headers = {"content-Type":"application/json"}
data = {"data":[{"dep_id":"T01","dep_name":"Test学院","master_name":"Test-Master","slogan":"Here is Slogan"}]}
r = requests.post(url,json=data,headers=headers)
print(r.json())
post中data= 和json= 的区别:
data:字典对象
json:json字符串
字典对象转json字符串:
import requests
import json
url = "http://127.0.0.1:8000/api/department"
headers = {"content-Type":"application/json"}
data = {"data":[{"dep_id":"T01","dep_name":"Test学院","master_name":"Test-Master","slogan":"Here is Slogan"}]}
r = requests.post(url,data=json.dunmps(data),headers=headers)
print(r.json())
post中 json()与text的区别:
json():返回类型是字典,可以通过键名获取值
text:返回的是字符串,看起来是字典的样式,但不能获取值
PUT:实现资源的更新,响应成功状态码:200或者201
import requests
url = "http://127.0.0.1:8000/api/department/TT702/" #URL里要把ID加进去
headers = {"content-Type":"application/json"}
data = {"data":[{
"dep_id":"TT702",
"dep_name":"TestTT702update",
"master_name":"Test-Master",
"slogan":"Here is Slogan"
}]
}
r = requests.put(url,json=data,headers=headers)
print(r.json())
print(r.status_code)
DELETE:删除资源,响应状态码:204
import requests
url = "http://127.0.0.1:8000/api/department/TT702/"
headers = {"content-Type":"application/json"}
r = requests.delete(url)
print(r.status_code)