[Python3]输出JMeter执行结果到google电子表格[gspread]
你好。
这是 SS 队的 Shimeji。
我有时会参与负载测试项目,但我懒得记录每次JMeter执行结果,所以我创建了一个脚本,将执行结果输出到Google Spreadsheet。
让我们自动化吧! !
提前准备
您需要提前准备以下三项内容。
・启用 Google Drive API / Google Sheets API
・下载私钥(JSON 数据)
・电子表格共享设置
查看下面的所有内容!
https://console.developers.google.com/
另外,请务必提前安装必要的软件包。
*如果你使用的是CentOS7,下面的命令就可以了!
yum 安装 python3 python-devel jq pip3 安装 gspread pip3 安装 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 = ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' ################################################ #### ########################## ## Function # 数字和字符转换器 def num2alpha(num): if num<=26 : return chr(64 +num) elif num%26==0: 返回 num2alpha(num//26-1)+chr(90) else: 返回 num2alpha(num//26)+chr(64+num%26) ##### ################################################## #################### ## 身份验证 # Promise from oauth2client.service_account import ServiceAccountCredentials range = ['https://spreadsheets.google .com/feeds','https ://www.googleapis.com/auth/drive'] # 定义下载的json文件credentials = ServiceAccountCredentials.from_json_keyfile_name(SECRETJSON, range) # 登录Google API gc = gspread.authorize(credentials) # 打开sheet 1电子表格工作表 = 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 in cell_list 为 i,cell 分配数组in enumerate(cell_list): cell.value = results_list[i] # 保存结果 worksheet.update_cells(cell_list)
以下两点需要根据环境进行适当调整。
- 在“SECRETJSON”中指定Google API私钥文件。
- 请在“SPREADSHEET_KEY”中指定输出结果的工作表的键。
该Python脚本将在下面描述的shell脚本中使用。
脚本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 ".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 启动远程引擎开始测试 @ Thu Jun 25 04:59:38 JST 2020 ( 1593028778488) 远程引擎已启动 正在等待端口 4445 上可能的 Shutdown/StopTestNow/HeapDump/ThreadDump 消息 摘要 = 2 in 00:00:02 = 1.2/s 平均值:215 最小值:139 最大值:291 错误:0 (0.00%)正在整理远程 @ Thu Jun 25 04:59:41 JST 2020 (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 文件的
那么好吧。