「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战」。
前言
还是说回allure报告的问题吧,不能只是自己看,也需要分享,那么对于报告而言,可能不太好实现让大家都能友好访问,所以才有了一堆关于allure报告的处理方式,但是其中的细节有些没有补充。
allure服务器
这个接单了,docker方式部署allure容器,提供了强大的api以供自动化测试工程师驱使。
问题:是上传results结果压缩包呢,还是先生成html报告再压缩上传?
这个问题取决于生成html报告,需要的allure环境指令,假设构建服务器迁移不一定有allure命令,那么在python执行allure generate时会不会报错找不到命令?既然allure服务器启动了上传results和生成报告的api,那么直接拿来用不好?省去了环境迁移带来的影响。
代码实现:zip压缩包
python有内置zipFile库,可以直接用,再有它可以与with...as结合省去文件关闭操作
# 压缩文件打包zip
with zipfile.ZipFile(open("results.zip","w",zipfile.DEFAULT_VERSION)) as pf:
for root,_,files in os.walk("allure-results"):# 遍历目标文件夹下的所有file
for file in files:
pf.write(os.path.join(root,file),file) # 依次写入
代码实现:zip附件上传
今天我很生气,有个同学跑来问我:入参有个参数的数据类型是[]列表,为甚去掉请求时会报错?我立马回:你做接口测试不看接口文档的吗?再说请求入参错误导致请求错误,你不应该去原作者却来问我?我。。。
- 上传结果zip压缩包
url = "http://192.168.2.213:8080/api/result"
# allureResults=@allure-results.zip;type=application/x-zip-compressed
# files ={'allureResults':("allure-results.zip",open('allure-results.zip','rb'),"application/x-zip-compressed")}
# 简化后效果一致
files ={'allureResults': open('allure-results.zip','rb')}
res = requests.post(url,files=files).json()
print(res)
# 得到uuid,用于生成html报告
uuid = res.get("uuid")
代码实现:生成allure报告
生成allure报告的前提是有results结果文件,所以是从上一个接口results获取uuid用于生成报告。
- 生成html报告
url = "http://192.168.2.213:8080/api/report"
PATHID = random.randint(1000,9999)
data = {
"reportSpec": {
"path": [PATHID],
"executorInfo": {
"buildUrl": "Pytest测试报告",
}
},
"results": [uuid],
"deleteResults": True # 上传后是否删除
}
res = requests.post(url,json=data).json()
# 提取访问报告的地址
url = res.get("url")
latest = res.get("latest")
问题:上面的所有代码都是碎片
需要同学们拿了代码自己去尝试封装,让它变成通用的功能代码。