2.接口强化训练
大约 4 分钟学习笔记软件测试接口测试
一、接口名词透析
1. token - 令牌
token
: 由服务器产生,存在服务器的内存或硬盘中- 有一套产生规则,会涉及到加密算法
- 根据 账户和密码 生成,用于验证 用户登录信息
- 主要通过 响应消息体传输给 客户端
2. cookies
cookies
: 存储在 浏览器的某个位置- 可以被禁用、删除,安全性不高
cookie
是分站点的,站点与站点之间的 cookie 是相互独立的cookie 与 sessionid
配合实现登录
3. sessionId
session
是一个对象,由服务器产生, 保存在服务器的内存中- 有自己的管理机制,包括 产生、销毁、超时等
sessionId
是session
对象的一个属性,是全局唯一的,永远都不会重复的
cookies 工作流程(主要里面就是 jsessionID)
- 客户端发送一个请求到服务器
- 服务器返回响应数据--响应头--setCOOkies---给我们客户端
- 这个时候这个 cookies 不一定是有效!---需要登录的网站--临时 cookies
- 需要登录---服务器判断这个账号密码正确之后,之前的 cookies 变成可以使用的!
二、 接口强化训练
1. requests 库请求参数类型
请求参 数 | 请求头中数据默认类 型 | 描述 |
---|---|---|
data | Content Type:application/x www-form urlencoded | 请求体是表单格式 如:a=1&b=2 |
json | Content Type:application/json | 请求体是 json 格式 如: |
params | 暂时不考虑 | 参数是放到 url 上 如:http://192.168.32.100:8080/路径?a=1&b=2 |
files | Content Type:multipart/form data | 文件上传接口中使 用 |
2. 请求与响应的对比
请求相关信息 resp.request.xxxx | 响应相关信息 resp.xxxx |
---|---|
resp.request.url 请求的 url | \ |
resp.request.headers 请求 头信息 | resp.headers 响应头 信息 |
resp.request.body 请求体信 息 | resp.text 请求体信息 |
3. requests 库响应消息体四种格式
四种返回格式 | 说明 | 用处 |
---|---|---|
r.text : 文本响应内容 | 返回字符串类型 | 获取网页 html 时用 |
r.content : 字节响应内容 | 返回字节类型 | 下载图片或文件时用 |
r.json() : json 解码响应内容 | 返回字典格式 | 明确服务器返回 json 数据才能用 |
r.raw : 原始响应内容 | 返回原始格式 |
三、 实战
1. token 实战
# configs/config.py
HOST = 'http://121.41.14.39:8082'#便于维护--测试环境变更--测试环境-预生产环境-生产环境
# login.py
import requests
import pprint
#需求:输入一个字符串的密码,输出的一个md5加密结果
import hashlib
from configs.config import HOST
# md5 加密
def get_md5(password):
#1-实例化加密对象
md5 = hashlib.md5()
#2- 进行加密操作
md5.update(password.encode('utf-8'))
#3- 返回加密后的值
return md5.hexdigest()
class Login:
def login(self, inData, gettoken=False):
#1-url
url = f'{HOST}/account/sLogin'
#2- 参数
#字典的修改值操作 字典[键] = 新的值
inData['password'] =get_md5(inData['password'])
payload = inData
#3-请求方法
resp =requests.post(url,params=payload)
if getToken == False:
return resp.json()#响应数据
else:
return resp.json()['data']['token']#token
if __name__ == '__main__':
res = login({'username':'xxxxxx','password':'xxxxxx'})
# pprint.pprint(res)
print(res)
2. cookie 实战
前端访问路径:http://120.55.190.222:7080/mgr/login/login.html
1.登录接口
url:
http 协议 : http://120.55.190.222:7080/api/mgr/loginReq
https 协议 : https://120.55.190.222/api/mgr/loginReq
请求体:
username | auto | 必填 |
---|---|---|
password | sdfsdfsdf | 必填 |
响应头
- Content-Type 必填 该字段值为 application/json,表示返回 JSON 格式的文本信息。
- Set-Cookie 必填 该字段保存本次登录的 sessionid
- 比如:
- sessionid=89emkau5vhyg8vcwfwvq2pvr7ul2t5sc
- 比如:
响应体
如果请求成功,返回 json 格式的消息体,如下所示,retcode 值为 0 表示登录认证成功
{ "retcode": 0 }
如果输入的用户名或者密码错误,则返回结果为 cookie 实战描述
{ "retcode": 1, "reason": "用户或者密码错误" }
cookie的关联:
1- 提取cookie
2- 后续接口使用cookie
思路:
1- 原生态cookie直接使用
resp.cookies ----后面接口
requests.post('后续接口url',cookies = 获取到的原生态的cookie)
2- 需要额外增加一些参数到cookie---定制化cookie
2.cookie 原生态直接关联后续接口实战
HOST = 'http://120.55.190.222:7080'
import requests
def login():
#1- url
url = f'{HOST}/api/mgr/loginReq'
#2- 请求体
payload ={'username':'auto','password':'sdfsdfsdf'}
#3- 请求
resp =requests.post(url,data=payload)
#获取cookie
#方案一:响应里就有这个cookie
# print(resp.cookies)
return resp.cookies#返回原生态的cookie
#需要关联的接口
def add_lesson(userCookie):
# 1- url
url = f'{HOST}/api/mgr/sq_mgr/'
# 3- 请求
resp = requests.post(url, cookies=userCookie)
print(resp.request.headers) # 查看请求头的cookies
if __name__ == '__main__':
userCookie= login()
add_lesson(userCookie)
3.自己封装 cookie 关联后续接口实战
HOST = 'http://120.55.190.222:7080'
import requests
def login():
#1- url
url = f'{HOST}/api/mgr/loginReq'
#2- 请求体
payload ={'username':'auto','password':'sdfsdfsdf'}
#3- 请求
resp =requests.post(url,data=payload)
#获取cookie
#方案二:需要额外增加一些参数到cookie---定制化cookie--提取sessionID
print(resp.cookies['sessionid'])
return resp.cookies['sessionid']#返回原生态的cookie里的sessionID
#需要关联的接口
def add_lesson(userCookie):
# 1- url
url = f'{HOST}/api/mgr/sq_mgr/'
# 3- 请求
resp = requests.post(url, cookies=userCookie)
print(resp.request.headers)#查看请求头的cookies
if __name__ == '__main__':
#自己封装cookie
userCookie ={'sessionid':userSessionId,'token':'123456'}
add_lesson(userCookie)
4. https 协议代码
不做 https 校验 :
verify =False
处理 pycharm https 警告 :
requests.packages.urllib3.disable_warnings()
#https协议
HOST = 'https://120.55.190.222'
import requests
#处理https警告
requests.packages.urllib3.disable_warnings()
def login():
#1- url
url = f'{HOST}/api/mgr/loginReq'
#2- 请求体
payload ={'username':'auto','password':'sdfsdfsdf'}
#3- 请求
resp =requests.post(url,data=payload,verify =False)#不使用SSL
return resp.text
if __name__ == '__main__':
res = login()
print(res)