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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM