1.使用Python-requests包进行接口测试# 加载包
import requests
# 百度搜索的接口,搜索的内容为requests
url = "http://www.baidu.com/s?wd=requests"
# 发送请求,将服务器返回的响应放到变量r中
r = requests.get(url)
# 打印文本格式的响应
print(r.text)
# 对结果进行断言,判断关键字在不在结果中
# assert "Requests: HTTP for Humans™" in r.text
# 对金融项目注册接口的测试
# get请求的参数拼接到URL后面 ?key=value&key=value&key=value 的格式
url = "http://192.168.2.36:8089/futureloan/mvc/api/member/register?mobilephone=12345&pwd=12345"
r = requests.get(url)
print(r.text)
print(r.json()) # 如果响应体是json格式的内容,使用r.json()
print(r.json()['code']) # r.json()后可以当做字典使用
assert r.json()['code'] == "20108"
assert r.json()['msg'] == "密码长度必须为6~18"
# get请求的参数,使用params 传递
url = "http://192.168.2.36:8089/futureloan/mvc/api/member/register?"
cs = {
"mobilephone": "18220820775",
"pwd": "12345",
"regname": "hello"
}
# params 参数不能写错,只能是requests中定义好的参数名
r = requests.get(url, params=cs)
print(r.text)
assert r.json()['code'] == "20108"
assert r.json()['msg'] == "密码长度必须为6~18"
print("状态码", r.status_code)
print("状态原因", r.reason)
print("响应头", r.headers)
print("cookies", r.cookies)
print("文本格式的响应体", r.text)
print("请求头", r.request.headers)
# 心知天气查询接口的测试
url = "https://api.seniverse.com/v3/weather/now.json?key=Sh-LsrOsCyo4vp8Tp&location=xian"
r = requests.get(url)
print(r.json())
# 西安
print(r.json()['results'][0]['location']['name'], end = "当前的温度:")
# 温度
print(r.json()['results'][0]['now']['temperature'])
# 获取用户列表
url = "http://192.168.2.36:8089/futureloan/mvc/api/member/list"
r = requests.get(url)
print(r.json())
print(r.request.headers) # {'User-Agent': 'python-requests/2.25.1'
# 设置 User-Agent , 伪装成是浏览器发的请求
hds = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"
}
r = requests.grinet(url, headers=hds)
print(r.json())
print(r.request.headers)2.用requests 发送 post 请求 1.data传参,传的是表单格式的参数
2.json传参,传的是json格式的参数
具体用data还是json传参,要看接口是如何实现的 金融登录接口url = "http://192.168.2.36:8089/futureloan/mvc/api/member/login"
cs = {
"mobilephone": "18220820775",
"pwd": "123456789",
}
# 用data传参
r = requests.post(url, data=cs)
print(r.text)
# 请求头中,'Content-Type': 'application/x-www-form-urlencoded'
print(r.request.headers)
# 用json 传参
r = requests.post(url, json=cs)
print(r.text) # 手机号码不能为空,这个接口不支持用json 传参,参数未识别出来
# 请求头中,'Content-Type': 'application/json'
print(r.request.headers)
3.接口测试的网站, 用户发送请求,该网站把收到的请求# 组装成json格式的响应,返回给用户
# /post 是post方法
# /get 是get方法
# delete 是delete 方法
url = "http://www.httpbin.org/post"
cs = {
"user": "admin",
"email": "123456@qq.com"
}
path = "c:/test.txt"
with open(path, mode='r') as f :
fs = {
# "files" 上传接口的参数名,是接口定义的
"files1": (path, f), # 二元组: (文件名称,文件对象)
"files2": (path, f, "text/plain") # 三元组文件名,文件对象,文件类型)
}
r = requests.post(url, data=cs, files=fs)
print(r.text)
4.手动设置Cookie # 没有登录的情况下,访问接口,会跳转到登录页面
url = "https://www.bagevent.com/account/dashboard"
r = requests.get(url)
print(r.text)
# 使用界面登录后,服务器返回的cookie信息,访问该接口,返回登统计页面录后的
hds = {
"Cookie": '_ga'
}
r = requests.get(url, headers=hds)
print(r.text)
5.自动管理cookie的机制,创建一个session = requests.session(), 自动维护cookie信息s = requests.session() # 创建session
print("登录之前的cookie信息:", s.cookies)
#百格登录的接口
url = "https://www.bagevent.com/user/login"
cs = {
"access_type": 1,
"loginType": 1,
"emailLoginWay": 0,
"account": "2780487875@qq.com ",
"password": "qq2780487875",
"remindmeBox": "on",
"remindme": 1
}
r = s.post(url, data=cs) #用session 发送请求
assert "<title>百格活动 - 账户总览</title>" in r.text
print("登录之后的cookie信息:", s.cookies)
6.timeout 参数 , 设置请求的超时 1. 接口执行耗时比较久,默认的超时时间内执行不完.比如上传一个2G的大文件
2. 接口性能要求,接口在xx ms内返回结果. 超过xx ms,认为性能不符合要求# 淘宝查询手机号归属地的接口
# tcc.taobao.com/cc/json/mobile_tel_segment.htm
url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=180122345678"
# 该接口是否能在200毫秒返回结果
for i in range(10):
try:
r = requests.get(url, timeout=0.2)
# print(r.text)
print(r.status_code)
except Exception as e:
print(e) |
|