这是之前搞的接口自动化方案,已经在业务测试中实现了使用postman编写接口脚本,通过GitHub+Jenkins+email +html report实现了接口自动化,现在分块整理一下。
Jenkins创建job
1、Job命名
例如,xxxAPI_auto
2、设置账号权限(即,启用项目安全)
可以给不同的账号设置不同的账号,例如,给测试组的其他成员设置:
Build:构建权限
Cancel:取消任务权限
Configure:配置job的权限
Workspace:工作空间的使用权限
3、添加构建任务时的构建选项,例如,大区选择,可以选择中国区、北美地区、欧洲区等
4、添加时间参数,这里主要是用在邮件标题上,标识此次接口测试是什么时候跑的,runDateAsTitle是参数名,后面会引用到,
Date Format是时间格式,
LocalDateTime.now()是Jenkins提供的取当前时间的方法,
5、设置远程的代码仓库,例如,GitHub的远程仓库地址,之后选择对应的认证
6、设置触发器,例如,构建时触发
7、设置构建环境
8、 构建的时候在控制台打印时间戳、设置build name为: #${BUILD_NUMBER}_${BUILD_USER_ID}
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
10、设置Groovy script,选择:Groovy command,Groovy Script:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
11、设置./jenkins.properties路径
12、邮箱设置:
因为测试报告是html格式的,但是邮箱对html的支持不好,导致一些内容不能完全展示,所以在测试报告中展示测试报告在s3上的链接,这样如果在电脑上打开,会调用浏览器,会很好的展现测试报告,在手机上也可以打开测试报告
<!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的配置完成,构建时的页面如下:
这是邮件发出来的效果:
这是打开的测试报告:
展开后的效果: