Python requests http接口自动化

什么是接口测试?

  •  接口测试是测试系统组件间接口的一种测试。
  • 主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。
  • 测试的重点是要检查接口参数传递的准确性,接口功能实现的准确性,输出结果的正确性,以及对各种异常情况的容错处理的完整性和合理性。

为什么做接口测试?

    ➢能够提早发现bug,符合质量控制前移的理念。

    ➢接口测试低成本高效益, 因为接口测试可以自动化并且是持续集成的。

    ➢接口测试从用户的角度对系统接口进行全面检测。实际项目中, 接口测试会覆盖一定程度的业务逻辑

json和dict

python中的dict类型要转换为json格式的数据需要用到json库:

import json 
 
 = json.dumps()
 
 = json.loads()

需要注意的是:

python中并没有json类型这一说法,通过json.dumps()转换的字典对象,最后得到的是一个字符串对象,在python中json格式的数据实际上就是一个字符串。

>>> j = json.dumps()
 
>>> type(j)
 

requests.post()

在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json

常见的form表单可以直接使用data参数进行报文提交,而data的对象则是python中的字典类型;

Python requests http接口自动化_第1张图片

# coding=utf-8
import requests

# 参数部分
payload = {
    "username": "will",
    "pwd": "123456",
    "nickname": "William",
    "describe":"你好啊",
}

# 发送注册请求
res = requests.post(url,data=payload)
print(res.text)

在抓包的过程中遇到了一种payload报文,是一种json格式的报文,因此传入的报文对象也应该是这种格式的;

Python requests http接口自动化_第2张图片

# 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请求中json和data的区别


    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)

你可能感兴趣的:(软件测试,自动化,python,测试工具)