区别于其他的自动化流程,从正常的逻辑角度来说,可能就是不需要去调用登录接口
在api层,我们只需要定义加密方法
查看开发文档,根据文档中的规则及加密方式,进行封装
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA
import base64
privateKey = """-----BEGIN PRIVATE KEY-----
我是PRIVATE KEY,问开发要,或者是在页面在数据库取对应的PRIVATE KEY
-----END PRIVATE KEY-----"""
def sign_body(body):
# 取出body中的key和value
a = ["=".join(i) for i in body.items() if(i[1] and i[0] !="sign_type")]
# 对值进行排序并且使用&拼接
strA = "&".join(sorted(a))
# print("AA"+strA)
return strA
def RSA_sign(data):
# 实现RSA加密
priKey = RSA.importKey(privateKey)
signature = PKCS1_v1_5.new(priKey)
hash_val = SHA.new(data.encode("utf-8"))
re =signature.sign(hash_val)
result = base64.b64encode(re)
red = result.decode()
return red
if __name__ == '__main__':
a='1232323231hfgds45123@¥%'
print(RSA_sign(a))
获取需要实现开放接口的body,及请求方式内容
import requests
from api.sign import RSA_sign,sign_body
def way(context='这里是内容',method="这里是内容",**kwargs):
# 设置默认参数
url="http://url"
body={
# 这里是body参数,看是json格式还是data
}
h={
# 这里是头部参数,有些是把签名放置在body,按文档实现
"sign": RSA_sign(sign_body(body))
}
body.update(**kwargs)
# print(h)
r=requests.post(url,data=body,headers=h)
# print(r.json())
return r
if __name__ == '__main__':
b=way()
print(b.json())
完成底层的api调试后,我们来实现一下辅助类的技能吧
需要实现自动化,我们需要让她能读取我们的测试数据
在common中新增一个read_yaml.py,当然你名字叫啥都行
import yaml
import os
def yaml_to_json(yaml_path):
try:
with open(yaml_path,"r",encoding="utf-8") as f:
b=f.read()
abc=yaml.safe_load(b)
# abc=yaml.safe_load(f.read())
except:
print("读取异常")
return abc
if __name__ == '__main__':
a=r'D:\xx.yaml'
print(yaml_to_json(a))
比如在config中定义基础内容,根目录啥的
import os
curpath=os.path.realpath(__file__)
rootpath=os.path.dirname(os.path.dirname(curpath))
好了 以上弄好了 可以设置case了
读取测试数据
实际结果跟预设的结果进行断言判断
import os
import pytest
import allure
# from api.sign import RSA_sign,sign_body
from api.way import way
from commmon.read_yaml import yaml_to_json
from config.config import rootpath
# print(rootpath)
# a=os.path.join(rootpath,"data","context.yaml")
data=yaml_to_json(os.path.join(rootpath,"data","context.yaml"))
print(data)
@pytest.mark.parametrize('testinput,exp',data)
def test_context(testinput,exp):
r=way(**testinput)
print(r)
assert r.json().get('code')==exp.get('code')
然后执行用例即可
放个目录图