自动化压测
Jar包下载地址
Apache POI-OOXML 4.1.2
https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml/4.1.2
Apache POI 4.1.2
https://mvnrepository.com/artifact/org.apache.poi/poi/4.1.2
Apache Commons Collections 4.4
https://mvnrepository.com/artifact/org.apache.commons/commons-collections4/4.4
Apache Commons IO
https://mvnrepository.com/artifact/commons-io/commons-io
OOXML Schemas
https://mvnrepository.com/artifact/org.apache.poi/ooxml-schemas
XmlBeans 3.1.0
https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans/3.1.0
commons-compress 1.20
https://mvnrepository.com/artifact/org.apache.commons/commons-compress/1.20
自动化脚本
在前述测试REST API的Test Plan的基础上,将Thread Group的线程数替换为变量。

保存此Test Plan,例如,把它另存为Automation1.jmx
。
然后编写下面的.sh
脚本。
> vi test.sh
#!/usr/bin/bash
echo "自动化压测开始"
export jmx_template="Automation1"
export suffix=".jmx"
export jmx_template_filename="${jmx_template}${suffix}"
export os_type=`uname`
# JMeter安装目录的位置
# export JMETER_HOME="/Users.../apache-jmeter-5.2.1"
# 清空nohup.out
cat /dev/null > nohup.out
# 强制杀掉JMeter进程
killJMeter()
{
pid=`ps -ef|grep jmeter|grep java|grep ${jmx_filename}|awk '{print $2}'`
echo "jmeter Id list :$pid"
if [[ "$pid" = "" ]]
then
echo "no jmeter pid alive"
else
kill -9 $pid
fi
}
# 压测并发数
thread_number_array=(100 1000 3000)
for num in "${thread_number_array[@]}"
do
# 生成压测线程文件
export jmx_filename="${jmx_template}_${num}${suffix}"
export jtl_filename="test_${num}.jtl"
rm -f ${jmx_filename} ${jtl_filename}
cp ${jmx_template_filename} ${jmx_filename}
echo "生成压测脚本 ${jmx_filename}"
if [[ "${os_type}" == "Darwin" ]]; then
sed -i "" "s/thread_nums/${num}/g" ${jmx_filename}
else
sed -i "s/thread_nums/${num}/g" ${jmx_filename}
fi
# JMeter静默压测并生成报告
nohup ${JMETER_HOME}/bin/jmeter -n -t ${jmx_filename} -l ${jtl_filename} -e -f -o ./reports_${num} &
sleep 20
killJMeter
rm -f ${jmx_filename}
done
echo "自动化压测结束"
将此test.sh
和Automation1.jmx
放在同一个目录中,然后执行test.sh
即可。
自动化框架
- 在JMeter中安装
Dummy Sampler
插件,它主要用来模拟输入的请求和返回的响应数据。

- 新建Test Plan,然后分别给它添加Thread Group、User Defined Variables、JSR223 Sampler、While Controller、Counter、
Dummy Sampler
、BeanShell Assertion和View Results Tree。添加完毕后,框架整体结构如下图所示。

- 将需要的
jar
包添加到Test Plan的classpath
中。

它的整体执行流程如下图所示。

用户自定义变量
在User Defined Variables中添加一个自定义变量。

创建Worksheet
在第一个JSR223 Sampler采样器中输入如下内容。

循环读取单元格
在While Controller中的各个计数器、采样器和断言的内容分别如下。





写入Excel文件
在最后一个JSR223 Sampler采样器中输入如下内容。

执行测试后,View Results Tree中显示的,以及写入到Excel中的结果如下。


可以看到,除了背景为蓝色的字段内容都是预先设置的以外,其他的列Request
、ActualResult
和ExpectedResult
都是由JMeter填充的。
替换Dummy Sampler
因为之前的请求与响应都是通过Dummy Sampler
模拟出来的,现在需要将它替换为真实的接口请求与响应。
而且输出的Excel内容也有不同。

首先,禁用
Dummy Sampler
,用Web Tours来代替它,同样,先录制
一个登录脚本。然后将
录制
的前三个脚本拷贝到While Controller中。在第二个脚本个第三个脚本中分别增加Regular Expression Extractor和BeanShell Assertion。
修改完后整体结构如下图所示。

整个修改的部分如下。
- 新增一个自定义变量
ip
,并用它来替换所有录制脚本中的ip
地址,也要记得修改不同的Excel文件名。

- 由于Excel新增了一列,所以代码也要跟着改。


- 修改
录制
的第三个脚本中的内容如下。

- 修改拷贝的BeanShell Assertion中的内容如下。

修改完毕后测试成功,结果如前所示。
感谢支持
更多内容,请移步《超级个体》。