声明
本文讨论的使用场景主要为使用已有的 jmx 脚本,并配合 json 对 jmx 脚本进行部分参数的动态修改。
只补充一些官方文档上没有提到的使用注意事项,所以官网上阐述得比较清楚的点,文章里就不再赘述。
什么是 bzt
bzt,全名是Blazemeter taurus
,是Blazemeter旗下的一款开源组件,官方宣称此组件的底层依赖于JMeter
、Gatling
、Locust.io
和Selenium WebDriver
,并且经过了自动化程度高、可操作性好的封装,使得性能测试与功能测试的过程变得更加简单。
使用 bzt 压测的基本流程
jmeter引擎压测,有两种方式:
直接运行已有的 jmx 文件
利用
yaml
或者json
生成一个 jmx 脚本并运行bzt example.yaml / bzt example.json
bzt example.jmx
可以发现,其实jmeter
里运行的始终是 jmx 文件,只不过 bzt 对 jmx 文件做了一层包装,使得没有接触过 jmeter 的用户也可以根据官方文档的指引用yaml/json
生成较为简单的 jmx 脚本。
编写脚本的注意事项
1. 如何修改已有脚本的某项参数值
通过 bzt 所提供的set-prop
参数,可以动态修改已有脚本的某些参数值,如图:
但是官方文档中没有提到的事情有:
只能通过节点的 testname 识别到该节点。
当有多个节点的 testname 相同时,会修改所有拥有相同 testname 的节点的值
没有办法识别 jmx 的层级,如果需要区分两个不同层级的节点,建议修改 testname
2. 如何选择性地执行已有脚本的线程组?
语法格式很好明白,但是有那么几点注意事项:
enable的线程组数组时,如果脚本里有多个 testname 相同的线程组,有以下几种情况:
(1)这几个线程组节点的 enable 值都为false
;bzt 不会运行任何一个线程组false,有些为
true
;bzt 只会运行enable
值为true
的线程组true;bzt 会运行全部线程组
disable的线程组数组时,不管线程组原本的
enable
值为true
或者false
,都会被设置为false
enable值设置为true
或者 false
,如图:
3. 如何查看具体的测试结果?
xml格式和csv
格式。
查看xml
结果
xml格式的结果,具体的脚本设置如下:
{
"execution": [
{
"write-xml-jtl": "error",
"scenario": "example"
}
],
"scenarios": {
"example": {
"script": "example.jmx"
}
},
"modules": {
"jmeter": {
"xml-jtl-flags": {
"xml":`true`,
"fieldNames":`true`,
"time":`true`,
"timestamp":`true`,
"latency":`true`,
"connectTime":`true`,
"success":`true`,
"label":`true`,
"code":`true`,
"message":`true`,
"threadName":`true`,
"dataType":`true`,
"encoding":`true`,
"assertions":`true`,
"subresults":`true`,
"responseData":`false`,
"samplerData":`false`,
"responseHeaders":`true`,
"requestHeaders":`true`,
"responseDataOnError":`true`,
"saveAssertionResultsFailureMessage":`true`,
"bytes":`true`,
"threadCounts":`true`,
"url":`true`
}
}
}
}
其中write-xml-jtl
的值有error
(默认值) 、full
、 none
三种,以下依次介绍三种情况。
write-xml-jtl的值为
full
时
运行后,会从项目文件夹里得到trace.jtl
和kpi.jtl
两个结果文件,如图write-xml-jtl的值设置为
full
,那么 bzt 就把所有的日志都以xml
格式打印在了trace.jtl
这个文件里了。write-xml-jtl的值为
none
时
运行后,项目文件夹里只有kpi.jtl
这个结果文件,如图write-xml-jtl的值设置为
none
,它不会打印任何值,项目里只有默认生成的结果文件。
write-xml-jtl的值为error
时
设置完成并运行后,会从项目文件夹里得到error.jtl
和kpi.jtl
两个结果文件,如图
查看这两个文件,里面的内容分别是这是因为我测试的两个接口都返回了404,而write-xml-jtl
的值为error
则表示把错误日志以xml
格式输出。
查看csv
结果
csv格式的结果,脚本设置如下:
{
"modules": {
"jmeter": {
"csv-jtl-flags": {
"xml": false,
"fieldNames": true,
"time": true,
"timestamp": true,
"latency": true,
"connectTime": true,
"success": true,
"label": true,
"code": true,
"message": true,
"threadName": true,
"dataType": false,
"encoding": false,
"assertions": false,
"subresults": false,
"responseData": false,
"samplerData": false,
"responseHeaders": false,
"requestHeaders": false,
"responseDataOnError": false,
"saveAssertionResultsFailureMessage": false,
"bytes": true,
"hostname": true,
"threadCounts": true,
"url": false
}
}
}
}
用同样的接口测试后,会得到一个kpi.jtl
文件,如图
true,那么会得到下面这个文件
注意事项
xml还是csv
,有两点需要注意
xml-jtl-flags的时候,如果
xml
属性为false
,bzt 不会报错,但是生成的所有结果文件都会是csv
格式,如图
csv-jtl-flags的时候,xml
属性必须为false
,不然会得到Error: Could not determine delimiter
报错,如图