python压缩文件及上传zip附件

494 阅读2分钟

「这是我参与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")

问题:上面的所有代码都是碎片

需要同学们拿了代码自己去尝试封装,让它变成通用的功能代码。