这是之前搞的接口自动化方案,已经在业务测试中实现了使用postman编写接口脚本,通过GitHub+Jenkins+email +html report实现了接口自动化,现在分块整理一下。

Jenkins创建job

1、Job命名

例如,xxxAPI_auto

jenkins piple 多个工程 jenkins批量创建job_自动化

2、设置账号权限(即,启用项目安全)

可以给不同的账号设置不同的账号,例如,给测试组的其他成员设置:

Build:构建权限

Cancel:取消任务权限

Configure:配置job的权限

Workspace:工作空间的使用权限

jenkins piple 多个工程 jenkins批量创建job_html_02

3、添加构建任务时的构建选项,例如,大区选择,可以选择中国区、北美地区、欧洲区等 

jenkins piple 多个工程 jenkins批量创建job_自动化_03

4、添加时间参数,这里主要是用在邮件标题上,标识此次接口测试是什么时候跑的,runDateAsTitle是参数名,后面会引用到,

Date Format是时间格式,

LocalDateTime.now()是Jenkins提供的取当前时间的方法,

jenkins piple 多个工程 jenkins批量创建job_自动化_04

 5、设置远程的代码仓库,例如,GitHub的远程仓库地址,之后选择对应的认证

jenkins piple 多个工程 jenkins批量创建job_postman_05

 6、设置触发器,例如,构建时触发

jenkins piple 多个工程 jenkins批量创建job_jenkins piple 多个工程_06

 7、设置构建环境

jenkins piple 多个工程 jenkins批量创建job_html_07

8、 构建的时候在控制台打印时间戳、设置build name为: #${BUILD_NUMBER}_${BUILD_USER_ID}

jenkins piple 多个工程 jenkins批量创建job_自动化_08

9、构建脚本,例如,执行postman接口脚本的命令,以及其他需要实现的功能,例如,将运行完成的接口测试报告放到s3上,具体如下:

#!/bin/bash
# 执行api脚本
 newman run ./xxxZeroAPI.postman_collection.json -e ./${region}.postman_environment.json -n 1 -r htmlextra --reporter-htmlextra-export ./results/${region}_${runDateAsTitle}.html --reporter-htmlextra-title "xx-api-auto" --reporter-htmlextra-browserTitle "xx-api-auto"set -x
pwd
 whoamiecho "BUILD_USER_ID           : ${BUILD_USER_ID}"
 echo "BUILD_NUMBER            : ${BUILD_NUMBER}"TIMESTAMP_NS=`date +%s%N`
 TIMESTAMP=${TIMESTAMP_NS:0:13}# 生成&清空 jenkins 环境变量
 echo "" > ./jenkins.properties# 上传到S3
 OSS_BUCKET="xxxxlife-qa"
 OSS_PATH="report/xx-api-auto"
 OSS_REGION="cn-northwest-1"
 OSS_HOST="https://${OSS_BUCKET}.s3.${OSS_REGION}.amazonaws.com.cn"FILE_LOCAL="./results/${region}_${runDateAsTitle}.html"
 FILE_OSS_NAME="${region}_${runDateAsTitle}.html"
 FILE_OSS_KEY="s3://${OSS_BUCKET}/${OSS_PATH}/${FILE_OSS_NAME}"
 FILE_OSS_URL="${OSS_HOST}/${OSS_PATH}/${FILE_OSS_NAME}"aws s3 cp ${FILE_LOCAL} ${FILE_OSS_KEY} --region ${OSS_REGION}
if [ $? != 0 ]; then
     exit 1
 fiNOTIFY_TITLE="${region}大区 xx-api-auto report ${runDateAsTitle}"
 BUILD_OUTPUT_FILE="${FILE_OSS_URL}"# email一下
 echo "" > ./jenkins.properties
 echo "NOTIFY_TITLE = ${NOTIFY_TITLE}" >> ./jenkins.properties
 echo "BUILD_BRANCH = " >> ./jenkins.properties
 echo "BUILD_ENV = " >> ./jenkins.properties
 echo "BUILD_OUTPUT_FILE = ${FILE_OSS_URL}" >> ./jenkins.properties
 echo "BUILD_OUTPUT_SYMBOL = " >> ./jenkins.properties
 echo "BUILD_OUTPUT_QRCODE = " >> ./jenkins.properties

jenkins piple 多个工程 jenkins批量创建job_postman_09


10、设置Groovy script,选择:Groovy command,Groovy Script:

System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
 System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

 

jenkins piple 多个工程 jenkins批量创建job_html_10

 11、设置./jenkins.properties路径

jenkins piple 多个工程 jenkins批量创建job_jenkins piple 多个工程_11

12、邮箱设置:

因为测试报告是html格式的,但是邮箱对html的支持不好,导致一些内容不能完全展示,所以在测试报告中展示测试报告在s3上的链接,这样如果在电脑上打开,会调用浏览器,会很好的展现测试报告,在手机上也可以打开测试报告

jenkins piple 多个工程 jenkins批量创建job_自动化_12

jenkins piple 多个工程 jenkins批量创建job_postman_13

<!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/><br/>
         </tr>        <tr>    
             <td>  
                 <br />
                 <b><font color="#21A65A">构建产物</font></b>    
                 <hr size="2" width="100%" align="center" />
             </td>
         </tr>
         <tr>
             <td>
                 <ul>
                     <li>测试报告: <a href="${BUILD_OUTPUT_FILE}">${BUILD_OUTPUT_FILE}</a></li> 
                 </ul>
             </td>
         </tr>        <tr>    
             <td>  
                 <br />
                 <b><font color="#21A65A">构建信息</font></b>    
                 <hr size="2" width="100%" align="center" />
             </td>
         </tr>
         <tr>
             <td>
                 <ul>
                     <li>项目名称: ${PROJECT_NAME}</li>    
                     <li>构建状态: ${BUILD_STATUS}</li> 
                     <li>触发原因: ${CAUSE}</li>    
                     <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                     <li>项目地址: <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>    
                 </ul>
             </td>
         </tr>    </table>    
 </body></html>

到此Jenkins 上job的配置完成,构建时的页面如下:

jenkins piple 多个工程 jenkins批量创建job_自动化_14

这是邮件发出来的效果: 

jenkins piple 多个工程 jenkins批量创建job_jenkins piple 多个工程_15

这是打开的测试报告:

jenkins piple 多个工程 jenkins批量创建job_jenkins_16

jenkins piple 多个工程 jenkins批量创建job_自动化_17

jenkins piple 多个工程 jenkins批量创建job_postman_18

 展开后的效果:

jenkins piple 多个工程 jenkins批量创建job_html_19

jenkins piple 多个工程 jenkins批量创建job_jenkins piple 多个工程_20

 

jenkins piple 多个工程 jenkins批量创建job_postman_21