目录
前言:
基于JMeter和Shell的接口性能自动化是一种有效的方法,可以帮助测试团队提高测试效率和准确性。JMeter作为性能测试工具,可以模拟并发用户对接口进行请求,并收集关键的性能指标。Shell脚本可以用于自动化执行JMeter测试,并进行结果分析和报告生成。
1. 总体需求
由于性能测试中涉及的查询接口多,版本迭代频繁,版本更新后自动跑一轮查询业务的性能,可以及时发现一些开发修复 bug 触发的非预期的 bug,利用晚上时间快速重测性能接口可以解放人工测试的时间,让测试人员可以把精力集中在测试复杂接口,调优分析性能瓶颈上。
2. 实现流程
自动化的场景模拟真实手工测试,操作步骤和手工测试一样。
3.准备工作
准备软件:
系统环境:CentOS release 6.7 (Final)
内核版本:Linux localhost 2.6.32-573.7.1.el6.x86_64
测试工具:apache-jmeter-2.13 Apache JMeter - Download Apache JMeter
运行 JDK 环境:Java Downloads | Oracle
python 环境:Python 2.6.6
服务器监控 nmon:nmon for Linux | Site / Download
4.具体实现
4.1 用例执行
Jmeter 的执行支持命令行的方式执行,并且会有一个粗略报告,我们取这个报告里面的执行结果并保存下来
Jmeter 的执行结果:
root@localhost bin]# ./jmeter -n -t singin.jmx
Creating summariser <summary>
Created the tree successfully using singin.jmx
Starting the test @ Mon Dec 14 16:42:33 CST 2015 (1450082553651)
Waiting for possible shutdown message on port 4445
summary + 1 in 1s = 1.3/s Avg: 268 Min: 268 Max: 268 Err: 0 (0.00%) Active: 1 Started: 1 Finished: 0
summary + 2 in 0s = 50.0/s Avg: 17 Min: 14 Max: 20 Err: 0 (0.00%) Active: 0 Started: 1 Finished: 1
summary = 3 in 1s = 3.7/s Avg: 100 Min: 14 Max: 268 Err: 0 (0.00%)
Tidying up ... @ Mon Dec 14 16:42:34 CST 2015 (1450082554551)
... end of run
由 sumary 统计行可以得到我们需要收集的测试结果:
主流程脚本
#/bin/bash
source /etc/profile
Jmeter_Home='/usr/local/apache-jmeter-2.13'
TestReport='/data/loadtest/report'
LogDIR='/data/loadtest/log'
Date=`date +"%F"`
cd /data/loadtest/
>summary.txt
#清理上次执行结果
run_test()
{
#获取测试用例
for i in `find ./testcase/ -name *.jmx|awk -F '.' '{print $2}'`
do
casename=`echo "$i"|awk -F '/' '{print $4}'`
>log/${casename}.txt
echo -n "$i ">>summary.txt
#发起监控
./monitor.sh >/dev/null 2>&1 &
#开始执行测试
$Jmeter_Home/bin/jmeter -n -t /data/loadtest${i}.jmx >>log/${casename}.txt &
sleep 310
#如果执行310s还未结束,强制终止执行
ps -ef | grep java |grep -v grep | awk '{print $2}' |xargs kill -9
sleep 3
#提取结果
grep 's