1、流水线脚本
pipeline {
agent any
stages {
stage('拉取自动化项目代码') {
steps {
git credentialsId: '244054e0-571b-4089-a20f-fad20843b1e7', url: 'http://pcgit.comen.com/sujinfa/comen_apitest_aims.git' //可自动生成
}
}
stage('执行自动化测试') {
steps {
sh ' python3 main.py'
}
}
stage('生成测试报告') {
steps {
allure includeProperties: false, jdk: '', report:'allure-report',results: [[path: 'allure-result']]
}
}
stage('读取用例执行结果文件, 设置环境变量') {
steps {
script {
def data = readFile(file: 'result.txt')
// 按行读取
def lines = data.readLines()
def result_list = []
for (line in lines) {
String[] str;
str = line.split('=');
result_list.add(str)
}
// 设置环境变量
env.TOTAL = result_list[0][1]
env.PASSED = result_list[1][1]
env.FAILED = result_list[2][1]
env.ERROR = result_list[3][1]
env.SKIPPED = result_list[4][1]
env.SUCCESS_RATE = result_list[5][1]
env.TOTAL_TIMES = result_list[6][1]
}
}
}
stage('发送邮件') {
steps {
emailext body: '''<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
本邮件由系统自动发出,无需回复!<br/>
各位同事,大家好,以下为${PROJECT_NAME}项目构建信息</br>
<td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称: ${PROJECT_NAME}</li>
<li>构建编号: 第${BUILD_NUMBER}次构建</li>
<li>触发原因: ${CAUSE}</li>
<li>任务地址: <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>测试报告: <a href="${BUILD_URL}allure">${BUILD_URL}allure</a></li>
<li>构建状态: ${BUILD_STATUS}</li>
<li>用例总数为: <span style="font-weight: bold;">${ENV, var="TOTAL"}</span></li>
<li>通过用例数: <span style="color: green;font-weight: bold;">${ENV, var="PASSED"}</span></li>
<li>失败用例数: <span style="color: red;font-weight: bold;">${ENV, var="FAILED"}</span></li>
<li>错误用例数: ${ENV, var="ERROR"}</li>
<li>跳过用例数: ${ENV, var="SKIPPED"}</li>
<li>通过率为: <span style="font-weight: bold;">${ENV, var="SUCCESS_RATE"}</span></li>
<li>用例执行时长: ${ENV, var="TOTAL_TIMES"}</li>
</ul>
</td>
</tr>
</table>
</body>
</html>''', subject: '$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!', to: 'sujinfa@comen.com,zhangyue2@comen.com,lijing2@comen.com'
}
}
}
}
2、result.text文件
conftest.py文件
def pytest_terminal_summary(terminalreporter, exitstatus, config):
"""
收集测试结果
"""
result = {
'total': terminalreporter._numcollected,
'passed': len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown']),
'failed': len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown']),
'error': len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown']),
'skipped': len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown']),
'success_rate': len(terminalreporter.stats.get('passed', [])) / terminalreporter._numcollected * 100,
'total_times': round(time.time() - terminalreporter._sessionstarttime, 2)
}
#将结果保存到本地
write_result_to_txt(**result)
def write_result_to_txt(total,passed,failed,error,skipped,success_rate,total_times,):
"""
将测试结果写入本地文件
"""
try:
with codecs.open('result.txt', 'w',encoding='utf-8') as fp:
fp.write("TOTAL=%s" % total + "\n")
fp.write("PASSED=%s" % passed + "\n")
fp.write("FAILED=%s" % failed + "\n")
fp.write("ERROR=%s" % error + "\n")
fp.write("SKIPPED=%s" % skipped + "\n")
fp.write("SUCCESS_RATE=%.2f%%" % success_rate + "\n")
fp.write("TOTAL_TIMES=%.2fs" % total_times)
except (FileNotFoundError) as e:
log.error(e)
3、Failed to connect to repository : Command "/usr/bin/git ls-remote -h http://git.c5game.com/c5game/com.c5game.android.git HEAD" returned status code 128:报错解决
前面加上你用的git账号的用户名