[Python3] 将 JMeter 执行结果输出到 Google 表格 [gspread]

大家好,
我是SS团队的Shimeji。
我偶尔会参与一些负载测试项目,但我一直懒得记录每次JMeter运行的结果,所以就写了一个脚本把结果输出到Google表格里。
让我们把它自动化吧!
提前准备
您需要提前准备以下三项:
・启用 Google 云端硬盘 API / Google 表格 API
・下载密钥(JSON 数据)
・电子表格的共享设置
更多信息,请访问以下链接:
https://console.developers.google.com/
另外,请务必事先安装必要的软件包。
*如果您使用的是 CentOS 7,只需使用以下命令即可!
yum install python3 python-devel jq pip3 install gspread pip3 install oauth2client
脚本 1(Python)
这是一个 Python 脚本,它将命令行参数指定的 CSV 文件输出到电子表格中。Python
有一个名为“gspread”的便捷电子表格库,我很庆幸能使用它。
#!/usr/bin/python3 import gspread import json import csv import sys import itertools # 使用绝对路径指定密钥 SECRETJSON = "/usr/local/jmeter/bin/sacred-drive.json" # 定义电子表格密钥 SPREADSHEET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' ################################################################################# ## 函数 # 数字和字符转换器 def num2alpha(num): if num<=26: return chr(64+num) elif num%26==0: return num2alpha(num//26-1)+chr(90) else: return num2alpha(num//26)+chr(64+num%26) ########################################################################## ## 身份验证 # Promises from oauth2client.service_account import ServiceAccountCredentials scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] # 定义下载的 JSON 文件 credentials = ServiceAccountCredentials.from_json_keyfile_name(SECRETJSON, scope) # 登录 Google API gc = gspread.authorize(credentials) # 打开电子表格的第一个工作表 worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1 ##################################################################################### ## 处理 # 获取命令行参数 args = sys.argv csvfile = args[1] # 将 CSV 文件的内容赋值给一个数组 with open(csvfile) as fp: results_list_ex = list(csv.reader(fp)) # 将二维数组转换为一维数组 results_list = list(itertools.chain.from_iterable(results_list_ex)) # 初始化计数变量 COUNT_NUM = 1 # 查找空白行 while str(len(worksheet.cell(COUNT_NUM, 1).value)) != "0": COUNT_NUM += 1 # 指定要编辑的范围 cell_list = worksheet.range('A'+str(COUNT_NUM)+':'+num2alpha(len(results_list))+str(COUNT_NUM)) # 将 results_list 数组赋值给 cell_list for i,cell in enumerate(cell_list): cell.value = results_list[i] # 保存结果 worksheet.update_cells(cell_list)
以下两点必须根据您的环境进行适当调整。
・在“SECRETJSON”中指定 Google API 密钥文件。
・在“SPREADSHEET_KEY”中指定用于输出结果的工作表密钥。
下面描述的 shell 脚本将使用此 Python 脚本。
脚本 2(shell 脚本)
#!/bin/sh DATE=$(date +"%Y%m%d") OPTIME=$(date +"%Y%m%d-%H%M%S") # 指定输出结果的目录 LOGDIR=/var/www/html/${DATE} # 指定 JMX 文件 FILE_JMX=/usr/local/jmeter/bin/templates/build-web-test-plan.jmx # 创建日期目录 mkdir -p ${LOGDIR} # 运行 JMeter /usr/local/jmeter/bin/jmeter -Dsun.net.inetaddr.ttl=0 -n -t ${FILE_JMX} -j ${LOGDIR}/${OPTIME}.log -l ${LOGDIR}/${OPTIME}.jtl -e -o ${LOGDIR}/${OPTIME}/ -r # 创建 CSV 文件 cat ${LOGDIR}/${OPTIME}/statistics.json | jq -r ". [] | [.transaction,.sampleCount,.errorCount,.errorPct,.meanResTime,.minResTime,.maxResTime,.pct1ResTime,.pct2ResTime,.pct3ResTime,.throughput,.receivedKBytesPerSec,.sentKBytesPerSec] | @csv" | grep "Total" > ${LOGDIR}/${OPTIME}/statistics.csv # 将结果输出到电子表格 /usr/local/bin/main.py ${LOGDIR}/${OPTIME}/statistics.csv
JSON 输出被转换为 CSV 格式并传递给 Python 脚本。
该脚本执行以下操作:
1. 运行 JMeter;
2. 将 JSON 结果转换为 CSV 格式;
其追加到电子表格中
使用示例
我们来试一试!
[root@test-server2-1 bin]# ./start-controller_cui.sh 创建摘要器<summary>使用 /usr/local/jmeter/bin/templates/build-web-test-plan.jmx 成功创建了树。正在配置远程引擎:192.168.33.11。正在启动远程引擎进行测试 @ 2020年6月25日星期四 04:59:38 JST (1593028778488)。远程引擎已启动。正在等待端口 4445 上可能出现的 Shutdown/StopTestNow/HeapDump/ThreadDump 消息。摘要 = 2,耗时 00:00:02 = 1.2/秒。平均值:215,最小值:139,最大值:291,错误率:0 (0.00%)。正在清理远程 @ 2020年6月25日星期四 04:59:41 JST (1593028781684) ... 运行结束。[root@test-server2-1 bin]# ls /var/www/html/20200625/20200625-033715_th/statistics.csv /var/www/html/20200625/20200625-033715_th/statistics.csv
是的,运行成功了!看起来也生成了一个 CSV 文件。
我们来检查一下这个重要的电子表格。

完成了!
我们再运行一次!

输出结果正确显示在下一行。好的!
结论
你觉得怎么样?
利用Python丰富的库,实现起来相当容易。
未来,我希望改进其功能,以便能够同时输出以下项目。
1. 执行时间(YYYY/MM/DD hh:mm:ss)
2. JMeter 执行参数
:控制器数量、从节点数量
、
线程数、
循环数
、启动时间
3. JMeter 输出的 HTML 文件链接
好吧。
0