'''
基于Requests实现接口测试
1. 请求模拟的实现
定义url、定义headers、定义body、定义其他的相关数据
在Requests中传递的数据,基本都以字典格式为准。
2. 请求方法的不同,body参数会有不同
get请求:params
post请求:data
3. requests下发请求时,默认会返回一个response对象
4. 其实所谓的接口测试,就是把接口正常调用一次。来看返回结果是否正常。
不考虑代码本身的运行逻辑,只考虑运行时返回的响应结果是否正确,所以接口测试也是黑盒测试。
5. 如果需要传递JSON格式的参数,一般有两种方法:
1. 在post请求中,将data入参改为json入参,将接口传入的数据改为json格式,在get请求无效
2. 在请求头中,设置Content-Type:Application/json,可以将参数转为JSON格式进行传递
6. 不论业务多复杂,在请求模拟的时候,把需要的数据准备好,也可以适当修改响应的内容,便于后续的请求处理。
7. 在接口测试中,基本上所有的数据都遵循字典的格式,获取特定内容都是通过key来获取
8. 接口的断言是基于响应结果的文本进行assert关键字的调用来实现的
接口是发送请求就会有响应,所以断言直接对返回的响应进行关键数据的断言即可
'''
import requests
# 1. 准备测试数据
# 定义接口的url
url = 'http://apihcc.fecmall.com/v1/account/login'
# 定义接口传入的数据
# body数据:并不是每一个请求都要有body信息,根据实际需要进行添加即可
data = {
'username': 'admin',
'password': 'admin123'
}
# headers数据:并不是每一个请求都要有头部信息,根据实际需要进行添加即可
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 '
'Safari/537.36'
# 'Content-Type': 'Application/json;charset=utf-8' # 设置请求数据为json格式
}
# 2. 模拟请求
res = requests.post(url=url, headers=headers, json=data)
print(res.text)
# requests.get()
# Cookies手动添加:1.伪造cookie信息,如果有比较复杂的业务处理,来生成cookie数据,则可以直接通过手动添加的方式伪造一个即可。
# print(res.cookies)
# for cookie in res.cookies:
# print(cookie)
# cookies = requests.cookies.RequestsCookieJar()
# cookies.set('name', 'hcc')
# res.cookies.update(cookies) # 将手动生成的cookies添加到响应之中
# print(res.cookies)
# 3. 解析响应,进行校验
# print(res) # 200表示请求成功,其实这里是一个response对象
# print(res.text) # 输出响应结果的文本信息,就相当于body信息转str,这里获取的是str,不是字典
# print(res.status_code) # 获取本次请求的状态码
# print(res.request) # res.request就是获取本次请求的相关信息,一般用于做调试
# print(res.cookies)
# for cookie in res.cookies:
# print(cookie.name)
# print(cookie.value)
# print(res.headers) # 显示当前response的头部信息,如果想要获取其中特定数据,则通过key来获取
# print(res.json()) # 将响应的body转为json格式,便于通过key获取value
assert res.json()['status'] == 'success'
# url
# 获取多语言list接口的调用,涉及到接口关联业务。接口关联业务下,要做数据的关联,一定是在前一个接口调用完成后,先传参,再调用第二个接口
url1 = 'http://apihcc.fecmall.com/v1/languages'
# 请求参数
headers = {
'access-token': res.json()['access-token'] # 将login接口返回的access-token设置为languages接口的头部参数
}
res1 = requests.get(url=url1, headers=headers)
print(res1.text)
'''
{
"code":200,
"message":"fetch all languages success",
"data":
[
{
"name":"en-US",
"code":"en",
"is_default":true
},
{
"name":"zh-CN",
"code":"zh",
"is_default":false
"demo":"niubi"
},
{
"name":"fr-FR",
"code":"fr",
"is_default":false
},
{"name":"de-DE","code":"de","is_default":false},
{"name":"es-ES","code":"es","is_default":false},
{"name":"pt-PT","code":"pt","is_default":false},
{"name":"ru-RU","code":"ru","is_default":false},
{"name":"it-IT","code":"it","is_default":false}
]
}
此类格式的响应结果一般是在获取批量数据的时候会存在。一定记住一点:
所有data中的数据要获取,都是通过下标来获取,而不是直接通过key来获取
'''
print(res1.json()['data'][1]['name']) # 因为是字典与list嵌套,所以获取的时候,需要考虑key和下标的存在
print(res1.json()['code'])
print(res1.json()['message'])
'''
在响应结果中,一般都会约定俗成地生成指定的字段Code,这个字段与响应状态码没有关系
res.status_code 响应状态码 这个状态码不推荐作为断言校验点 这是http网络协议自带的数据
res.json()['code'] 响应结果中的code字段 这个字段可以作为断言校验点 这是开发人员写入的数据
'''
# 响应结果的校验
assert res1.json()['code'] == 200
基于Requests实现接口测试
最新推荐文章于 2024-07-12 19:06:42 发布