使用 requests 完成接口测试(一)
要使用 requests 方法需要安装第三方库
打开命令提示符键入:pip3 install requests
使用 GET 方法获取响应数据
import requests
r=requests.get(url='http://***.***.***.***:***/login/auth/',
params={'name':'1'})
# 协议状态码
print('协议状态码',r.status_code)
# 响应数据
print('返回字符串',r.text)
print('返回二进制内容',r.content)
print('返回的是字典数据类型',r.json())
# 响应头
print('响应头',r.headers)

使用 POST 登录
r = requests.post(
url='http://***.***.***.***/login/auth/',
params={'username': 'admin', 'password': 'admin'},
headers={'Content-Type': 'application/json;charset=UTF-8'})
print(json.dumps(r.json(), indent=True, ensure_ascii=False))
r = requests.post(
url='http://***.***.***.***/login/auth/',
data=json.dumps({'username': 'admin', 'password': 'admin'}),
headers={'content-type': 'application/json'})
print(json.dumps(r.json(), indent=True, ensure_ascii=False))
params 是用来发送查询字符串,而 data 是用来发送正文的
根据请求头的数据形式判断使用的方法
Content-Type: application/json;charset=UTF-8
数据形式为 JSON 编码格式为 UTF-8
请求头为 JSON ,但要以 DATA 返回参数,需要对请求参数进行序列化的处理
Content-Type:application/x-www-form-urlencoded
数据形式为 form表单,需要对请求参数进行序列化的处理
输出时序列化可以更好的查看返回数据
ensure_ascii 表示是否要转为 ASCII 码,默认打开 True ,那么转为 json 后中文会变成 ASCII 编码,False 中文还是中文,不会变为 ASCII 编码

分别使用 GET 和 POST 方法获取手机号归属地
'''获取手机号归属地'''
r=requests.get(
url='http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo',
params={'mobileCode':'手机号','userID':''})
print('请求地址:',r.url)
print('协议状态码:',r.status_code)
print('返回协议数据:',r.text)
print('请求头:',r.headers)
'''获取手机号归属地'''
r=requests.post(
url='http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo',
data={'mobileCode':'手机号','userID':''},
headers={'content-type':'application/x-www-form-urlencoded'})
print('请求地址:',r.url)
print('协议状态码:',r.status_code)
print('返回协议数据:',r.text)
print('请求头:',r.headers)

'''拉勾网'''
r = requests.post(
url='https://www.lagou.com/jobs/v2/positionAjax.json',
data={
'data': '自行获取'},
headers={'content-type': 'application/x-www-form-urlencoded',
'Cookie': '自行获取',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62',
'referer':'https://www.lagou.com/wn/jobs?labelWords=&fromSearch=true&suginput=&kd=%25E6%25B5%258B%25E8%25AF%2595%25E5%25BC%2580%25E5%258F%2591%25E5%25B7%25A5%25E7%25A8%258B%25E5%25B8%2588'})
print('协议状态码:',r.status_code)
print('返回协议数据:',r.text)
print(json.dumps(r.json(),indent=True,ensure_ascii=False))
复杂信息处理,对拉勾网职位信息获取
def login():
r=requests.post(
url='http://***.***.***.***/login/auth/',
json={'username':'用户名','password':'密码'},
headers={'Content-Type': 'application/json;charset=UTF-8'})
return r.json()['token']
def index():
r=requests.get(
url='http://***.***.***.***/interface/index',
headers={'Authorization':'JWT {token}'.format(token=login())})
print(r.text)
assert r.json()['count']['api']==0
index()
登录并验证返回数据
登陆后返回 token , index 函数中获取 token ,并提交主页验证身份;
使用 assert 判断返回值 Api 个数
from requests.auth import HTTPBasicAuth
r=requests.get(
url='http://***.***.***.***/v1/api/books',
auth=HTTPBasicAuth(username='admin',password='admin'),
timeout=180)
print(r.status_code)
print(r.json())
引入 HTTPBasicAuth 进行简单验证
timeout(超时等待)单位:秒
def login():
r=requests.post(
url='https://home.51cto.com/index?reback=https://www.51cto.com/&iframe=0&is_go_to_user_set_mobile=1',
data={'_csrf':'自行获取',
'LoginForm[username]':'用户名',
'LoginForm[password]':'密码',
'show_qr':0},
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62',
'Referer':'https://home.51cto.com/index?reback=https://www.51cto.com/',
'Content-Type':'application/x-www-form-urlencoded',
'Cookie':'自行获取'})
print(r.status_code)
print(r.text)
print(r.cookies)
# r.cookies获取set-cookies返回给客户端,sessionID
return r.cookies
def profile():
r=requests.get(
url='https://edu.51cto.com/center/user/info/get-user-info',
# 通过请求头cookies把返回的sessionID发送给服务器身份验证
cookies=login())
print(r.text)
print(r.status_code)
profile()
def login():
s=requests.session()
# 使用 session() 完成 cookie 传递
r=s.post(
url='https://home.51cto.com/index?reback=https%3A%2F%2Fhome.51cto.com&iframe=0&is_go_to_user_set_mobile=1',
data={'_csrf':'自行获取',
'LoginForm[username]':'用户名',
'LoginForm[password]':'密码',
'show_qr':0},
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62',
'Referer':'https://home.51cto.com/index?reback=https://www.51cto.com/',
'Content-Type':'application/x-www-form-urlencoded',
'Cookie':'自行获取'})
print(r.text)
print(r.status_code)
return s
def profile():
r=login().get(
url='https://edu.51cto.com/center/user/info/get-user-info')
print(r.text)
print(r.status_code)
profile()
使用不同方法访问51CTO个人页面
def apiTest(method,url,**kwargs):
r=requests.request(method=method,url=url,**kwargs)
return r
r=apiTest(
method='post',
url='http://***.***.***.***/login/auth/',
json={"username":"用户名","password":"密码"},
headers={'Content-Type': 'application/json;charset=UTF-8'}
)
print(r.status_code)
print(r.text)
重封装 requests(偷懒)简化参数设定

浙公网安备 33010602011771号