基于 requests 框架实现接口自动化测试
requests 库是一个常用的用于 http 请求的模块,它使用 python 语言编写,在当下 python 系列的接口自动化中应用广泛,本文将带领大家深入学习这个库。
方法 | 含义 |
---|---|
requests.get() | 发起 get 请求调用 |
requests.post() | 发起 post 请求调用 |
requests.put() | 发起 put 请求调用 |
requests.delete() | 发起 delete 请求调用 |
requests.session() | 获取 requests 的 session 对象 |
requests.session().request() | 也是发起请求,可以自动管理 cookie |
1. get 请求
import requests
host = 'http://10.0.0.18:8080'
def get():
url = host + '/pinter/com/getSku' # 接口地址
params={
'id':1
}
resp = requests.get(url,params=params)
status_code = resp.status_code # 获取响应状态码
print('响应状态码:{}'.format(status_code))
text = resp.text # 获取响应内容,结果类型是字符串
print('响应内容:{}'.format(text))
json=resp.json() # 获取响应内容,结果是字典类型
print('响应内容:{}'.format(json))
resp_headers = resp.headers #获取响应headers
print('响应header:{}'.format(resp_headers))
if __name__ == '__main__':
get()
结果如下:
响应状态码:200
响应内容:{"code":"0","message":"success","data":{"skuId":1,"skuName":"ptest-1","price":"645","stock":709,"brand":"testfan"}}
<class'dict'>
响应内容:{'code':'0','message':'success','data':{'skuId':1,'skuName':'ptest-1','price':'645','stock':709,'brand':'testfan'}}
响应header:{'Content-Type':'application/json;charset=UTF-8','Transfer-Encoding':'chunked','Date':'Fri,12Mar202122:13:49GMT','Keep-Alive':'timeout=20','Connection':'keep-alive'}
2. post 请求
表单格式的参数:
import requests
host = 'http://10.0.0.18:8080'
def post():
url = host+'/pinter/com/login'
# 表单参数
data = {
'userName': '沙陌',
'password': '123456'
}
resp = requests.post(url=url, data=data)
status_code = resp.status_code # 获取响应状态码
print('响应状态码:{}'.format(status_code))
text = resp.text # 获取响应内容,结果类型是字符串
print('响应内容:{}'.format(text))
json = resp.json() # 获取响应内容,结果是字典类型
print('响应内容:{}'.format(json))
resp_headers = resp.headers # 获取响应headers
print('响应header:{}'.format(resp_headers))
JSON 格式的参数:
import requests
host = 'http://10.0.0.18:8080'
def post_json():
url = host+'/pinter/com/register'
# header里定义参数类型
headers={
'Content-Type':'application/json'
}
# json参数
json = {
"userName": "沙陌",
"password": "1234",
"gender": 1,
"phoneNum": "110",
"email": "beihe@163.com",
"address": "Beijing"
}
resp = requests.post(url=url, json=json)
status_code = resp.status_code # 获取响应状态码
print('响应状态码:{}'.format(status_code))
text = resp.text # 获取响应内容,结果类型是字符串
print('响应内容:{}'.format(text))
json = resp.json() # 获取响应内容,结果是字典类型
print('响应内容:{}'.format(json))
resp_headers = resp.headers # 获取响应headers
print('响应header:{}'.format(resp_headers))
3. put 请求
import requests
host = 'http://10.0.0.18:8080'
def put():
url = host + '/pinter/com/phone' #接口地址
# 参数
json = {
"brand": "Huawei",
"memorySize": "64G",
"cpuCore": "8核",
"price": "8848",
"desc": "全新上市"
}
resp = requests.put(url=url, json=json)
status_code = resp.status_code # 获取响应状态码
print('响应状态码:{}'.format(status_code))
text = resp.text # 获取响应内容,结果类型是字符串
print('响应内容:{}'.format(text))
json = resp.json() # 获取响应内容,结果是字典类型
print('响应内容:{}'.format(json))
resp_headers = resp.headers # 获取响应headers
print('响应header:{}'.format(resp_headers))
4. delete 请求
import requests
host = 'http://10.0.0.18:8080'
def delete():
url = host + '/pinter/com/phone' #接口地址
# 参数
json = {
"brand": "Huawei",
"memorySize": "64G",
"cpuCore": "8核",
"price": "8848",
"desc": "全新上市"
}
resp = requests.delete(url=url, json=json)
status_code = resp.status_code # 获取响应状态码
print('响应状态码:{}'.format(status_code))
text = resp.text # 获取响应内容,结果类型是字符串
print('响应内容:{}'.format(text))
json = resp.json() # 获取响应内容,结果是字典类型
print('响应内容:{}'.format(json))
resp_headers = resp.headers # 获取响应headers
print('响应header:{}'.format(resp_headers))
5. requests.session.request
可以自动管理 cookie,比如如下需要采用 cookie 认证的接口。
import requests
host = 'http://10.0.0.18:8080'
session = requests.session
def query():
# 查询余额
url = host +'/pinter/bank/api/query' # 接口地址
params = {
'userName':'admin'
}
resp = session.request(url=url, method='get', params=params)
status_code = resp.status_code # 获取响应状态码
print('响应状态码:{}'.format(status_code))
text = resp.text # 获取响应内容,结果类型是字符串
print('响应内容:{}'.format(text))
def login():
# 登录
url = host + '/pinter/bank/api/login'
# 表单参数
data = {
'userName': 'admin',
'password': '1234'
}
session.request(url=url, method='post', data=data)
if __name__ == '__main__':
login()
query()
结果如下:
响应状态码:200
响应内容:{"code":"0","message":"success","data":"$74,780,457"}
6. token 关联的接口
对于需要 token 关联的接口来说,需要从登录接口的返回值中提取 token 信息,并传递给需要 token 的接口。
import jsonpath
import requests
host = 'http://10.0.0.18:8080'
session = requests.session()
def query():
# 查询余额
url = host + '/pinter/bank/api/query2' # 接口地址
headers = {
'testfan-token': token # 加入token字段
}
params = {
'userName': 'admin'
}
resp = session.request(url=url, method='get', params=params, headers=headers)
status_code = resp.status_code # 获取响应状态码
print('响应状态码:{}'.format(status_code))
text = resp.text # 获取响应内容,结果类型是字符串
print('响应内容:{}'.format(text))
def login():
# 登录
global token
url = host + '/pinter/bank/api/login2'
# 表单参数
data = {
'userName':'admin',
'password':'1234'
}
resp = session.request(url=url, method='post', data=data)
resp_json = resp.json()
token = jsonpath.jsonpath(resp_json, '$.data')[0] # 使用jsonpath从响应结果中提取data字段
if __name__ == '__main__':
login()
query()
结果如下:
响应状态码:200
响应内容:{"code":"0","message":"success","data":"$74,780,457"}
requests 库的请求方法里参数众多,所以简单划分一下:
- 查询参数就用
params = params
- 表单参数就用
data = data
- json 参数就用
json = json
- 请求头信息header就用
headers = headers