什么是接口测试?
为什么做接口测试?
➢能够提早发现bug,符合质量控制前移的理念。
➢接口测试低成本高效益, 因为接口测试可以自动化并且是持续集成的。
➢接口测试从用户的角度对系统接口进行全面检测。实际项目中, 接口测试会覆盖一定程度的业务逻辑
json和dict
python中的dict类型要转换为json格式的数据需要用到json库:
import json
= json.dumps()
= json.loads()
需要注意的是:
python中并没有json类型这一说法,通过json.dumps(
>>> j = json.dumps()
>>> type(j)
在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json
常见的form表单可以直接使用data参数进行报文提交,而data的对象则是python中的字典类型;
# coding=utf-8
import requests
# 参数部分
payload = {
"username": "will",
"pwd": "123456",
"nickname": "William",
"describe":"你好啊",
}
# 发送注册请求
res = requests.post(url,data=payload)
print(res.text)
在抓包的过程中遇到了一种payload报文,是一种json格式的报文,因此传入的报文对象也应该是这种格式的;
# coding=utf-8
import requests
# 参数部分
payload = {
"password": "z2z111",
"userLevel": "1",
"userName": "111",
}
# 发送注册请求
res = requests.post(url, json=payload)
#判断是否注册成功
globals = {
'null':0
}
jsonres = eval(res.text,globals)
print(jsonres)
if jsonres['message'] == "注册成功":
print("注册:pass")
else:
print("注册:fail")
注意:
Python使用eval转换字符串为字典时会出现报错:
File "E:/PythonCode/demo/study/test.py", line 14, in
jsonres = eval(res.text)
File "", line 1, in
NameError: name 'null' is not defined
解决:
globals = {
'null': 0
}
data = eval(res.text, globals)
post请求中,可以使用data传递参数,也可以使用json传递参数
两种方式有什么区别?
如果参数为json数据,可以直接传入json参数,它将自动编码并将Content-Type置为application/json
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, json=payload)
print(r.text)
如果data传递的参数为字符串,如:json.dumps(payload),则request对参数进行url编码,Content-Type的值为None,所以data传字符串时,一定要在header中指定Content-Type
payload = {'key1': 'value1', 'key2': 'value2'}
headers={"Content-Type": "application/json"}
r = requests.post(url, headers=headers,data=json.dumps(payload))
print(r.text)
如果data传递的是字典、元组组成的列表或列表作为值的字典,则request对参数进行url编码,Content-Type的值为application/x-www-form-urlencoded
# 字典
payload1 = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, data=payload1)
# 元组组成的列表
payload2 = [('key1', 'value1'), ('key1', 'value2')]
r = requests.post(url, data=payload2)
# 列表作为值的字典
payload3 = {'key1': ['value1', 'value2']}
r = requests.post(url, data=payload3)