【jenkins】创建一个project基础配置

  • 一、 源码管理:以git仓库添加为例
  • 二、Build Steps:以python为例
  • 问题一:jenkins构件python脚本后,报告无法在jenkins中正常使用浏览器访问
  • 三、构建后操作:报告输出Publish HTML reports
  • 四、邮件发送--配置
  • 步骤1:进入Jenkins管理--系统管理(Dashboard--》Manage Jenkins--》Configure System)找到 Jenkins Location 项
  • 步骤2:进入Jenkins管理--系统管理(Dashboard--》Manage Jenkins--》Configure System)找到【邮件通知】项
  • 步骤3:在步骤2后,测试配置邮箱是否能够正常发送邮件
  • 步骤4:在Jenkins的使用中邮件提醒是一个常用功能,Extended E-mail Notification是一个功能更为齐全,使用也更为复杂的插件,下载安装jenkins插件:Email Extension Plugin、Environment Injector
  • 步骤5:配置Extended E-mail Notification
  • 步骤6:配置要发邮件的项目--添加构件步骤
  • 步骤7:配置要发邮件的项目--添加构件后步骤
  • 五、收集pytest运行结果pytest_terminal_summary函数代码
  • 结果展示


一、 源码管理:以git仓库添加为例

前提:jenkins安装在的计算机需要安装好git环境,且该计算机的git与即将填入jenkins的git远端仓库是存在公钥私钥关联的;以windows为例
在gitbash中输入:

git.exe ls-remote -h -- https://xxx.x6.x.xxx/auto_test/ui/cgjg_ui.git HEAD

会弹窗输入git登录账号、密码;之后无报错如下;

MeterSphere pytest集成_运维


源码管理中,需要填写认证方式:Credentials;参考:https://www.likecs.com/show-305313406.html

MeterSphere pytest集成_Jenkins_02

二、Build Steps:以python为例

jenkins构件时,获取到git仓库的代码后,会存入workspace目录;直接就可以访问到代码项目-根目录

MeterSphere pytest集成_自动化_03

问题一:jenkins构件python脚本后,报告无法在jenkins中正常使用浏览器访问

解决方式
安装 Groovy 插件,然后

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")

MeterSphere pytest集成_运维_04

三、构建后操作:报告输出Publish HTML reports

安装插件:Publish HTML reports

MeterSphere pytest集成_git_05

四、邮件发送–配置
步骤1:进入Jenkins管理–系统管理(Dashboard–》Manage Jenkins–》Configure System)找到 Jenkins Location 项

MeterSphere pytest集成_自动化_06

步骤2:进入Jenkins管理–系统管理(Dashboard–》Manage Jenkins–》Configure System)找到【邮件通知】项

MeterSphere pytest集成_jenkins_07


smtp服务器 :填写用于发送邮件的邮箱的smtp服务器;

点击高级;如下填写:

MeterSphere pytest集成_自动化_08


MeterSphere pytest集成_jenkins_09

步骤3:在步骤2后,测试配置邮箱是否能够正常发送邮件

MeterSphere pytest集成_git_10

步骤4:在Jenkins的使用中邮件提醒是一个常用功能,Extended E-mail Notification是一个功能更为齐全,使用也更为复杂的插件,下载安装jenkins插件:Email Extension Plugin、Environment Injector

MeterSphere pytest集成_自动化_11


MeterSphere pytest集成_运维_12

步骤5:配置Extended E-mail Notification

MeterSphere pytest集成_自动化_13


MeterSphere pytest集成_运维_14


MeterSphere pytest集成_自动化_15


content_default

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>${ENV,var="JOB_NAME"}</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}项目UI自动化执行信息<br/>
            <td><font color="#CC0000">自动化执行结果-${BUILD_STATUS}</font></td>
        </tr>
        <tr>
            测试结果:<br/>
            <td>
                <p>用例总数:${TOTAL} ; 成功:${PASSED} ;失败:${FAILED};异常:${ERROR};跳过:${SKIPPED};未选择:${DESELECTED}</p>
                <p>运行成功率:${SUCCESSFUL}; 运行时长:${TOTAL_TIMES}</p>
                <p>执行详细报告(局域网内可访问):${PROJECT_URL}${BUILD_NUMBER}/allure</p>
            </td>
        </tr>
    </table>
</body>
</html>

注意:这里的模板内容,需要与下面代码中:pytest Hooks函数pytest_terminal_summary 获取的内容一致;

配置邮件发送情况:点击 default Triggers,勾选情况

MeterSphere pytest集成_自动化_16

步骤6:配置要发邮件的项目–添加构件步骤

MeterSphere pytest集成_git_17

步骤7:配置要发邮件的项目–添加构件后步骤

MeterSphere pytest集成_git_18

五、收集pytest运行结果pytest_terminal_summary函数代码

1.在项目最外层conftest.py

MeterSphere pytest集成_jenkins_19

import time
from _pytest import terminal

def pytest_terminal_summary(terminalreporter, exitstatus, config):
    '''收集测试结果'''
    # print(terminalreporter.stats)
    total = terminalreporter._numcollected
    if int(total) !=0:
        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'])
        deselected = total - passed -failed - error - skipped
        successful = len(terminalreporter.stats.get('passed', []))/terminalreporter._numcollected*100
        # terminalreporter._sessionstarttime 会话开始时间
        duration = time.time() - terminalreporter._sessionstarttime
        print('total times: %.2f' % duration, 'seconds')
        with open("result.txt", "w") 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("DESELECTED=%s" % deselected+"\n" )
            fp.write("SUCCESSFUL=%.2f%%" % successful+"\n")
            fp.write("TOTAL_TIMES=%.2fs" % duration)
    else:
        with open("result.txt", "w") as fp:
            fp.write("TOTAL=%s" % total+"\n")
            fp.write("PASSED=%s" % 0+"\n")
            fp.write("FAILED=%s" % 0+"\n")
            fp.write("ERROR=%s" % 0+"\n")
            fp.write("SKIPPED=%s" % 0+"\n")
            fp.write("DESELECTED=%s" % 0 + "\n")
            fp.write("SUCCESSFUL=%.2f%%" % 0+"\n")
            fp.write("TOTAL_TIMES=%.2fs" % 0)
结果展示

MeterSphere pytest集成_自动化_20


jenkins-构建控制台输出

MeterSphere pytest集成_Jenkins_21


MeterSphere pytest集成_jenkins_22


邮件

![在这里插入图片描述](

MeterSphere pytest集成_git_23

参考:,感谢!
pytest Hooks函数pytest_terminal_summary
jenkins 添加环境变量 Environment Injector
jenkins 配置邮件发送 Email Extension Plugin