[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 脚本。
脚本的处理步骤如下:
① 运行 JMeter
② 将 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
加载中...
0票,平均分:0.00/10
1,806
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

姬松茸

  证书:
    - TOEIC 835
    - LPIC304
    - AWS 解决方案架构师助理
    - AWS 解决方案架构师专业
    - GCP 专业云架构师
    - IPA SC(未注册)

戈薇,戈薇,
我们身后的那个人是谁?

我年纪大了。(2018)