测试环境:jenkins 部署在 linux 系统,appium 和 jmeter 部署在 windows。所以需要启用节点服务器。测试结果通过钉钉机器人发布到钉钉群中
1、新增节点
2、将下载后的文件放到 windows 的 C:\jenkins 下,双击运行
3、此时在 linux 下可看见 windows 节点连接正常
1、钉钉群创建钉钉机器人
2、系统管理 -- 系统配置,配置钉钉通知消息
1、工程配置
备注:需要将 windows 的报告先删除,否则不能生成新的报告。
通过命令窗口生成 jmeter 报告命令
cd/
C:
del /s /Q C:\jenkins\workspace\jmeter_ZnbApp\result.txt
del /s /Q C:\jenkins\workspace\jmeter_ZnbApp\表格查看结果-协保通.csv
del /s /Q C:\jenkins\workspace\jmeter_ZnbApp\表格查看结果-智农保.csv
rd /s /Q C:\jenkins\workspace\jmeter_ZnbApp\webreport
cd C:\apache-jmeter-5.3\bin
jmeter -n -t C:\apache-jmeter-5.3\智农保\智农保APP.jmx -l C:\jenkins\workspace\jmeter_ZnbApp\result.txt -e -o
构建完成后自动发送钉钉消息,命令如下
python C:\jenkins\workspace\jmeter_ZnbApp\Ding_send.py
备注:要成果发送钉钉消息,首先需要通过钉钉群创建钉钉机器人
备注:publish 的工程是将 windows 下生成的测试报告文件推送到 jenkins 所在服务器上。因为:jmeter 所在的服务器是 windows 的,在 windows 节点服务器上操作 xshell 命令总报错。所以才启用下一个 linux 工程上操作 xshell 的 scp 命令。
1、工程配置
#!/bin/bash
scp -r zxl@192.168.1.61:c:/jenkins/workspace/jmeter_ZnbApp/webreport /usr/local/apache-tomcat-7.0.108/webapps/jobs/jmeter_ZnbApp/builds/${BUILD_NUMBER}/webreport
备注:192.168.1.61 是 windows 服务器,windows 要与 linux 通讯,需要在 windows 安装 winSSHD 配置 ssh 虚拟用户
备注:需要在源码中添加如下部分,否则通过命令行窗口运行时会报找不到各种包的错误,但在 PyCharm 中运行是没问题的,因为在 PyCharm 中环境配置是集成好的,但在命令行窗口却找不到包
import os
import sys
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
链接:https://pan.baidu.com/s/1d8izC-qJb2H22rgsUuXbfg 提取码:7jwl,来源于他人网页上的配置方式https://www.cnblogs.com/sixfiv/p/9771770.html
1、打开软件,界面如下
2、选择 personnel edition 后点击安装等待安装结束
3、安装结束后开始配置
4、选择使用本地账户进行登录
5、保存上面配置,开启服务准备测试
6、创建虚拟账号进行连接
注意:publick keys:需要将 linux 服务器上的公钥上传添加到此处
jmeter 对应的 python 脚本
#!\usr\bin\python3.7
# coding=utf-8
import json
import os
import datetime
import time
import linecache
from time import strftime
from requests import session
def nail_inform(statis):
# 钉钉接口与机器人token
url = "https://oapi.dingtalk.com/robot/send?" \
"access_token=af53ebed900ca961cac007983ff1a39d3812e9181ca8d........."
# 头部信息(Content-Type必填)
header = {
"Content-Type": "application/json",
"Charset": "UTF-8"
}
now = strftime("%Y-%m-%d %H:%M:%S") # 获取测试时间
msg = "报告名称 : 智农宝app接口测试\n" \
"报告地址 : http://.............../jobs/jmeter_ZnbApp/builds/%s/webreport\n" \
"测试时间 : %s\n" \
"总的接口数: %s\n" \
"失败接口数: %s\n" \
"平均响应时间ms: %s\n\n" % (statis["number"], now, statis["sum"], statis["fail"], statis["ratio"])
payload = {
"msgtype": "text",
"text": {
"content": "自动化测试\n" + msg # 抓取数据发送的内容放到msg
},
"at": {
"isAtAll": False, # @全体成员(在此可设置@特定某人)
}
}
r = session().post(url=url, json=payload, headers=header)
print(r.json()) # 打印接口请求返回结果
if __name__ == "__main__":
dataJson = json.load(open('webreport\statistics.json', encoding='gbk'))
at = dataJson["Total"]
# transaction = at["transaction"]
sampleCount = at["sampleCount"]
errorCount = at["errorCount"]
errorPct = at["meanResTime"]
number = os.getenv("BUILD_NUMBER")
statis = {"number": number, "sum": sampleCount, "fail": errorCount, "ratio": errorPct}
nail_inform(statis=statis)
备注:jmeter 的消息体的变量来源于 jmeter 自动生成的报告 json 文件中提取的。报告地址是自动将 windows 下生成的报告文件上传到 jenkins 所在的 linux 服务器 tomcat 的 webapps 目录下,这样通过 http 就可以访问了(疑问:要 publish html reporter 插件报错,是因为 windows 与 linux 通过 cp 命令报错原因)
注意:jmeter 需要用高版本的,比如我用的是 5.3 版本,自动生成的报告中有 json 文件
钉钉群消息样式如下:
appiun 对应的 python 脚本
import os
import openpyxl
from requests import session
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 读取xlsx文件中数据
def open_xlsx(path, sheet):
# 打开excel文件,获取工作簿对象
wb = openpyxl.load_workbook(BASE_DIR + '\\' + path)
# 通过文件名获得工作表,获取工作表
table = wb.get_sheet_by_name(sheet)
return table
def nail_inform(statis):
"""
:param statis: 测试用例统计 字典 key-sum: 总用例数 key-fail: 失败用例数 key-ratio: 测试通过率
"""
# 钉钉接口与机器人token
url = "https://oapi.dingtalk.com/robot/send?" \
"access_token=af53ebed900ca961cac007983ff1a39d3812e9181ca8d7d84"
# 头部信息(Content-Type必填)
header = {
"Content-Type": "application/json",
"Charset": "UTF-8"
}
msg = "所属项目: %s\n" \
"报告地址: http://....................../jobs/jmeter_ZnbApp/builds/%s/webreport\n" \
"开始时间: %s\n" \
"通 过: %s\n" \
"失 败: %s\n" \
"错 误: %s\n" % (
statis["item"], statis["number"], statis["time"], statis["correct"], statis["error"], statis["fault"])
payload = {
"msgtype": "text",
"text": {
"content": "自动化测试\n" + msg # 抓取数据发送的内容放到msg
},
"at": {
"isAtAll": False, # @全体成员(在此可设置@特定某人)
}
}
r = session().post(url=url, json=payload, headers=header)
print(r.json()) # 打印接口请求返回结果
def data():
table = open_xlsx('report.xlsx', 'Sheet1')
time = table['B2'].value # 时间
correct = table['A4'].value # 通过
error = table['B4'].value # 失败
fault = table['C4'].value # 错误
number = os.getenv("BUILD_NUMBER")
statis = {"item": '智农宝app', "number": str(number), "time": str(time), "correct": str(correct), "error": str(error), "fault": str(fault)}
print(statis)
nail_inform(statis=statis)
if __name__ == "__main__":
data()
备注:appium 的消息体的变量来源于 appium 自动生成的报告 html 文件中提取的。