python+requests接口自动化测试1--基本请求方法封装+获取token
前段时间用python对公司项目的接口进行了自动化测试,由于存在很多不完善的地方,在这过程中也遇到了一些问题。为了便于以后温习回顾,以下做了一些总结:
1.请求登录接口
import hashlib from random import randint, choice import requests import json import time # 生成随机数 def get_nonce(): ret = "" for i in range(6): num = randint(0, 9) s = str(num) ret += s return ret # 获取时间戳 def get_timestamp(): return str(int(time.time() * 1000)) # 加密 def md5_sys(param): str_md5 = hashlib.md5(param.encode(encoding='utf-8')).hexdigest() return str_md5 # 签名(省略) def get_sign(parameter, ...): ...return sign
nonce = get_nonce() timestamp = get_timestamp() url = "https://xxx/login/password"
params = {"username": "admin", "password": "4297f44b13955235245b2497399d7a93"}
sign = get_sign(params, ...)
header = {"Content-Type": "application/json", "client": "xxx", "sign": sign, "timestamp": timestamp,"nonce": nonce}
res = requests.post(url=url, headers=header, data=str(params)) #或 res = requests.post(url=url, headers=header, json=params)
print(res.text) # 以text形式显示响应内容
print(res.json()) # 以json格式解析响应内容
print(res.encoding) # 查看requests使用的编码方式
print(res.status_code) # 服务器返回的响应状态码
print(res.headers) # 返回的响应头
print(res.request) # 请求方式
print(res.url) # 返回请求url
2.方法封装
class BaseRequest: def __init__(self, url): self.url = url def get(self, header, data=None): if data != None: r = requests.get(url=self.url, headers=header, params=data) else: r = requests.get(url=self.url, headers=header) return r def post(self, header, data=None): if data != None: r = requests.post(url=self.url, headers=header, json=data) else: r = requests.post(url=self.url, headers=header) return r def sureMethod(self, header, method, data): if method == "get": res = self.get(header, data) elif method == "post": res = self.post(header, data) return res if __name__ == '__main__': url = "https://xxx/login/password"
nonce = get_nonce()
timestamp = get_timestamp()
params = {"username": "admin", "password": "4297f44b13955235245b2497399d7a93"}
sign = get_sign(params, ...)
header = {"Content-Type": "application/json", "client": "xx", "sign": sign, "timestamp": timestamp, "nonce": nonce}
br = BaseRequest(url)
re = br.sureMethod(header, "post", params)
print(re.json())
提取token:
token = re.json()["data"]["token"]["access_token"] yamlpath = r'D:\Python37\Workspace\IndustryApi_Test\test_data\token.yaml' # yaml文件位置 tokenValue = {'token': token} # 保存token格式 with open(yamlpath, "w", encoding='utf-8') as f: yaml.dump(tokenValue, f, Dumper=yaml.Dumper) # 写入数据
token.yaml
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IjU5MUVBQjVEMEZEMUUzNUZGRTA5RjQ0QzY1QkM0RTY4MDU1MEMxMDAiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJXUjZyWFFfUjQxXy1DZlJNWmJ4T2FBVlF3UUEifQ.eyJuYmYiOjE2MjM5MDExMDgsImV4cCI6MTYyMzkwODMwOCwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDoxMDAxIiwiYXVkIjpbImh0dHA6Ly9sb2NhbGhvc3Q6MTAwMS9yZXNvdXJjZXMiLCJhcmltLndlYi5zY29wZSJdLCJjbGllbnRfaWQiOiJhcmltLndlYiIsInN1YiI6ImlkZW50aXR5IiwiYXV0aF90aW1lIjoxNjIzOTAxMTA4LCJpZHAiOiJsb2NhbCIsIkxvZ2luSWQiOiI0NzIyIiwiTG9naW5UaW1lIjoiMjAyMS0wNi0xNyAxMTozODoyOCIsIkNsaWVudElkIjoiOSIsIkNsaWVudCI6ImFyaW0ud2ViIiwiUGxhdGZvcm1JZCI6IjIiLCJBY2NvdW50SWQiOiIyMCIsIlVzZXJOYW1lIjoiY3NseXkiLCJSb2xlSWQiOiIxMSIsIlJvbGUiOiLotoXnuqfnrqHnkIYiLCJOaWNrbmFtZSI6IuWImOiOueiOuSIsIlNjaG9vbElkIjoiMSIsIlNjaG9vbCI6IuenkeWNjuWkqeW6nCIsIkRldmljZUlkIjoiMCIsInNjb3BlIjpbIm9wZW5pZCIsInByb2ZpbGUiLCJhcmltLndlYi5zY29wZSIsIm9mZmxpbmVfYWNjZXNzIl0sImFtciI6WyJjdXN0b20iXX0.Fo_XxxAwHgwg5op10JsYrCL_rTqS7ldRSv964HphQhtvEWLSskmRcBahJyQrbUukkCdppsfQ7De3nPTPVvxolJFULRWKOrbg-AjZJdMc5y-Xg4AIviiYXCj78oPa2TR6gieoYB0Z8hlgVmpmg16e7V9S1YD3FC8UBuSTsBFsg4ofWUyGJdhwlswlywpu2vW2KircO3ACt9dM-d83aQPm2O4QvZiub6lnQbjhCXfEb8hdiaYzKIhBc8Xkbtj4UcBRsgN-Jfhjbwg1uIt6JABdauHKgeonqzqiaA0NahL_6c_akg03_KhSp3xkY0eRsWLfTVUdY1B23aQek1kkVhodgA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!