JMeter在CICD中的小案例
写在前面
① 通过JMeter命令行,不改动脚本,实现switch host以压测不同的环境
② 以工程目录的形式管理JMeter脚本及其附属文件,以便移动脚本时能自动适应不同的路径
项目状况
- 经常要在两套环境(DEV, QA)间切换测试,两套环境的数据差异不大(比如用户)
- 按照工程目录的样式创建了许多文件夹(比如config, script, data, testcases)在jmx脚本目录中,用于分类管理
-
config中的代表文件:不同环境的配置文件
dev.csv
API, KEY https://z417.top/dev/api/, gAN0HPmkFBtIkfpI
qa.csv
API, KEY https://z417.top/qa/api/, 0jaVJtN55ErdZyrP
-
data中存放脚本运行时的产出文件
-
script中存放jmx运行时依赖的一些自定义脚本,比如.py
-
testcases存放csv参数化相关的文件
-
实现switch host
-
测试计划 → 添加 → 配置元件 → CSV数据文件设置
这样就可以在其他地方以
${API}, ${KEY}
引用变量; 但问题是一旦要切换环境就得修改【文件名】, 所以还得继续增强, 请往下看 -
“Ctrl + Shift + F1” 打开函数助手对话框, 选择
__property
, 填入【函数参数】后点击【生成】env 属性名, 可以在JMeter命令行中对其赋值
config/dev.csv env的默认值, 这里设置的是dev.csv, 也就是说在不指定环境时, 默认读dev环境的配置
-
复制函数助手生成的字符串
${__property(env,,config/dev.csv)}
到【文件名】 -
通过命令行切换压测环境
jmeter -n -t demo.jmx -J env=config\qa.csv
参数
-J
可同时给多个property赋值, 这里只给env
赋值注意执行命令时所处的目录(与demo.jmx同级)
(按需)我本地把jmeter\bin设到环境变量里了,所以cmd窗口可以识别jmeter命令
目录结构化
-
在bean shell中可通过如下内容获取jmx脚本所处的绝对路径、路径分隔符
import org.apache.jmeter.services.FileServer; var path = FileServer.getFileServer().getBaseDir(); // "C:\Users\z417\Desktop\load" var sep = File.separator; // "\"
-
鉴于此,可以借助函数助手表达出来
给大伙复制用
import org.apache.jmeter.services.FileServer;FileServer.getFileServer().getBaseDir();
-
鉴于2,可将各文件的绝对路径赋值给用户变量
以data文件夹为例
${__BeanShell(import org.apache.jmeter.services.FileServer;FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}data