通过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
复制代码
-
手动上传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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?