通过docker镜像方式起一个allure测试报告在线查看的服务

 

前言

之前在其他文章已经给过allure报告在其他服务器能访问的解决方案,无论是本地局域网还是其他网络,都能正常访问且不再一直loading,一个是基于npm的anywhere,另一个是nginx代理服务器,无论是哪个方案,可能都存在一个问题:会覆盖原来的报告文件;anywhere是本地解决方案,不太好实现,nginx还可以通过代理不同的目录来实现before或者after。

问题来了

怎样才能解决allure报告显示不同阶段结果的问题,即每次生成allure报告都不会覆盖原来的报告?

引入:Allure Report Server

简单点说,就是有一个allure服务器,是docker容器部署的,它有ui模式,用户可以手动上传allure-report报告或者上传allure-results结果文件再点击生成报告,注意上传的附件都是zip的压缩包;当然也支持api的形式上传附件,allure服务有提供swagger接口文档参考。

  • 部署allure服务;前提linux服务器已经支持docker服务了
[root@localhost /]# docker pull kochetkovma/allure-server:latest
[root@localhost /]# docker run -p 8080:8080 kochetkovma/allure-server:latest
复制代码
  • 访问本地:http://localhost:8080/ui/ 在这里插入图片描述

  • 手动上传allure-result.zip结果文件,点击generate生成报告,再去report点击查看html报告 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

  • 手动上传allure-report报告附件就没啥好说的,就是本地generate生成report压缩上传到allure服务器即可,在report点击查看。

重点:allure服务器提供了api

allure服务文档介绍了如何部署allure服务器,打开UI界面操作上传results生成report,也有介绍通过api的形式去生成报告,并且在UI入口进行点击查看。API可以解决自动化问题,你总不能每次需要通过ui手动上传result生成report报告吧,在集成jenkins/gitlab CI/CD这个非常有用。

  • 以python为例,执行测试用例生成allure-results目录之后,不再generate报告,而是将整个results目录压缩成zip包,通过调用api进行上传:
curl --location --request POST 'http://localhost:8080/api/result' \
--form 'allureResults=@/allure-results.zip;type=application/zip'
复制代码
  • 响应结果,需要提取uuid,因为在下一步generate生成报告有用到
{
"fileName":"allure-results.zip",
"uuid":"80267d11-0903-4cec-bb91-29142745b252"
}
复制代码
  • 调用生成报告api
curl --location --request POST 'http://localhost:8080/api/report' \
--header 'Content-Type: application/json' \
-d '{
  "reportSpec": {
    "path": [
      "master",
      "666"
    ],
    "executorInfo": {
      "buildName": "#666"
    }
  },
  "results": [
    "80267d11-0903-4cec-bb91-29142745b252"
  ],
  "deleteResults": false
}'
复制代码
  • 响应结果:提取url或者latest地址就可以访问了
{
	"uuid": "594c187d-94ff-44e3-a77a-acf6214ddd9d",
	"path": "master/666",
	"url": "http://localhost:8080/allure/reports/594c187d-94ff-44e3-a77a-acf6214ddd9d/",
	"latest": "http://localhost:8080/reports/master/666"
}
复制代码

API扩展

allure服务器还提供了查看/删除result或report的api

  • 可能会收到所有报告
curl --location --request GET 'http://localhost:8080/api/report'
复制代码
  • 或通过路径作为分支名称master
curl --location --request GET 'http://localhost:8080/api/report?path=master'
复制代码
  • 您可能会得到所有上传的结果:
curl --location --request GET 'http://localhost:8080/api/result'
复制代码
  • 清除结果或报告:
curl --location --request DELETE 'http://localhost:8080/api/result'
curl --location --request DELETE 'http://localhost:8080/api/report'
复制代码

总结

是不是又刷新了你的技能点,是不是觉得比anywhere或者nginx代理更省心!更实用!条条大路通罗马,如果你解决不了问题,就解决提出问题的人?哈哈,当然这是一句玩笑,既然前面的道路不通,咱就换条路走!我一直强调的一点,开发也好测试也罢,对于实现某个方案/解决某个问题,不是别人说了怎么做就要这样做,而是要自己会思考,这样能做出来,还能不能有别的方法去实现,还有没有更优的选择?


引用链接:https://juejin.cn/post/7062739785328099358
posted @   看你微笑  阅读(954)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示