我发现每过一段时间,就会有群友在交流群里面提问:
所以从解决实际问题出发, 我想分享下我是如何展示allure测试报告的~
import pytest
class TestLogin:
def test_1(self):
print("用例1")
assert True
def test_2(self):
print("用例2")
assert False
def test_3(self):
print("用例3")
assert False
if __name__ == '__main__':
# 调试用
# pytest.main(["-q", "demo.py"])
# 同步生成allure的数据文件
pytest.main(["-q", "demo.py", "--alluredir", "./report/allure_result",
"--junitxml=./report/xml/result.xml"])
上面就是最简单的pytest示例, 共有3个用例,其中1个success, 2个fail.
后续基于这个demo来演示操作~
前提条件是: 本地已经配置好pytest, jdk, allure等相关环境了
# 在本地生成allure报告的相关资源文件
pytest 测试脚本.py --alluredir=./my_allure_results
# 本地启动一个allure服务,访问这个资源文件
allure serve ./my_allure_results
实际展示如下, 可以通过 本地实际ip + 随机一个端口号 来访问这个allure测试报告
# 在本地生成allure报告的相关资源文件
pytest 测试脚本.py --alluredir=./my_allure_results
# 生成html格式的测试报告
allure generate ./my_allure_results
执行完allure generate命令后, 会在本地生成文件夹allure-report, 里面有个index.html.
然后这个html不能直接打开(数据不会显示出来),目前已知的是可以通过pycharm来打开
目前比较推荐的方式是将pytest体系和Jenkins进行集成, 因为Jenkins是有一些完善的插件和钩子函数, 很容易进行集成, 展示也特别友好!
首先一共生成2个测试报告, 1个是allure的报告, 另1个是通过邮件发送的测试报告(基于自定义的html模板)
allure的测试报告时通过Jenkins的插件进行展示和运行的, 收到邮件的人员可以点击邮件中的报告链接, 即可跳转到指定的测试报告界面
优点:
比如:
「邮件中的测试报告报告截图」
「allure的测试报告截图(Jenkins中)」
1.将项目代码上传到linux上, 并配好python, allure相关环境, 确保可正常运行
配置相关环境可参考链接:
http://t.zoukankan.com/chenxiaomeng-p-14109943.html
预期结果如下
allure相关插件
邮件相关插件
主要就是建立一个自由风格的job, 添加一些构建后操作就行 这里是将运行的py文件放入jenkins的根目录去执行的, 因为Jenkins的很多路径操作都是相对于自己工作空间的相对路径, 后续操作比较方便!
这里指定了个html_template.html文件, 代码如下
<table width="950px" border="2px" style="border-collapse: collapse;text-align: center;">
<caption style="font-size: 27px;font-weight:bold; margin-bottom: 26px;margin-top: 5px">接口自动化测试报告</caption>
<tr>
<td style="font-weight:bold">测试人员</td>
<td>Administrator</td>
<td style="color: #1c94c4;font-weight:bold;font-size: 20px">用例总数</td>
<td style="width: 30px">${TEST_COUNTS,var="TOTAL"}</td>
</tr>
<tr>
<td style="color: #d58512;font-weight:bold">构建序号</td>
<td>${BUILD_NUMBER}</td>
<td style="color: #00A000;font-weight:bold;font-size: 20px">成功用例</td>
<td>${TEST_COUNTS,var="PASS"}</td>
</tr>
<tr>
<td style="color: #BB6688;font-weight:bold">构建结果</td>
<td>${BUILD_STATUS}</td>
<td style="color: indianred;font-weight:bold;font-size: 20px">失败用例</td>
<td>${TEST_COUNTS,var="FAIL"}</td>
</tr>
<tr>
<td style="color: #9d9d9d;font-weight:bold">本次构建地址</td>
<td>${BUILD_URL}</td>
<td style="color: #8a6d3b;font-weight:bold;font-size: 20px">跳过用例</td>
<td>${TEST_COUNTS,var="SKIP"}</td>
</tr>
<tr>
<td style="color: #795da3;font-weight:bold">allure报告查看地址</td>
<td colspan="3">${BUILD_URL}allure</td>
<!-- <td>23</td>-->
</tr>
<!-- <tr>-->
<!-- <td>jenkins url</td>-->
<!-- <td>${JENKINS_URL}</td>-->
<!-- </tr>-->
</table>
这个模板的大致原理是:
Jenkins提供了一些钩子函数, 比如说: 通过${BUILD_URL}可以打印本次job的构建地址 等。然后我们可以根据这些钩子函数进行「二次拼接」, 生成我们想要的地址信息, 如allure报告地址!