Jenkins流水线脚本

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账号的用户名

http://test-group@git.crer.com/crer/com.crer.android.git

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值