jmeter脚本开发:控制器和参数化(三)

网友投稿 1042 2022-09-09

jmeter脚本开发:控制器和参数化(三)

jmeter脚本开发:控制器和参数化(三)

一. jmeter录制脚本优化

录制的脚本有很多“杂质”,如js、css等

1. 不需要的脚本

删除:右键,直接删除或禁用

左键选中第一个,按住shift键,同时选择最后一个,这样可以同时删除或者禁用多个

录制时,添加过滤

2. 条件头文件

cookie管理器

消息头管理器

HTTP缓存管理器做性能测试暂时不要加,因为做性能目的是得到每一次请求真实数据,如果使用缓存,就取得的是缓存,与用户第一次访问是有差别的

HTTP请求默认值用于域名、端口的配置,一般用的也比较少

3. 添加监视器

建议加上调试取样器(在取样器里)

4. 添加断言

做功能测试需要加,做性能测试不需要加

二. jmeter手写脚本

1. 选协议——取样器(HTTP Request)

2. 接口报文组装:接口文档\api文档\swagger(restful)  F12  fiddler

accept:

application/x-浏览器表单提交格式

application/json;charset=utf-8   加编码是因为有的接口请求数据里含有中文,防止乱码

text/hml;  文本格式

multipart/form-data  表单

3. 监视器——查看结果树(View Results Tree)

4. 配置元件——请求头(HTTP Header Manager)\cookie管理器(HTTP Cookie Manager)

举例:一个Content-Type为application/json的接口:

一般加两个,Content-Type和Accept

三. 控制器

1. 循环控制器:当前线程组内循环n次

循环控制器下面挂着注册接口

会循环四次,但从调试取样器看,只有一个线程组

将循环次数改为2,表示有2个线程组,循环4次,总共应该循环8次

2. ForEach控制器:循环变量名称相近

3. If控制器:条件判断

“变量” == “值” (javascript语法)

Interpret Condition as Variable Expression?当做一个变量判断真/假 (上面输入框用的是变量,不是表达式)

Evaluate for all children 执行子节点前先计算表达式真/假 (上面输入的表达式)

4. switch控制器:跳转到某个子取样器执行,输入子取样器名称

5. 随机控制,随机顺序控制器

随机控制:多个中随机选执行一个(只执行一个)

随机顺序控制器:随机打乱多个取样器的执行顺序(多个都执行)

6. 仅一次控制器

每个线程,只执行一次,登录场景常用,和setUp线程组相近

7. 吞吐量控制器

Total Executions  运行总次数

虽然有10个线程,吞吐量应该是10,但这里限制了总的吞吐量是5,因此只会执行5次

Percent Executions  运行比例(1-100)

三. jmete参数化

1. jmeter参数化与关联

用户自定义变量  User Defined Variables

用户参数 User Parameters

函数 function

csv读取文件 CSV Data Set Config

json提取  JSON Extractor

正则  Regular Expression Extractor

2. 变量命名规则

字母、下划线开头,可含数字,大小写敏感(java规则)

3. 用户自定义变量 User Defined Variables

配置元件Config Element > 用户自定义变量 User Defined Variables

运行中值不变

可以看到,用户自定义的变量userdefined的值没有变,而用户参数userparams每次都会发生变化

4. 用户参数 User Parameters

前置处理器 Pre processors > 用户参数 User Parameters

动态读取,值可能因读取而变化

如果把线程数设置为5,循环次数设置为1,同样也会变化

5. 函数function

Tools > 函数助手对话框Function Helper Dialog (ctrl + shift + f1)

选择函数Choose a function,帮助help 生成(自动复制)

随机函数 __Random  eg:${__Random(1000, 9999, )}

设置属性 __setProperty  eg:${__setProperty(randproperty, ${randomnum}, )}

读取属性 __P  eg:${__P(randproperty, )}

关联函数 __V  eg:${__V(A${N})}

时间函数 __time  eg:${__time(.)}   ${__time(YMD H:mm:ss,)}

这样可以实现变量跨线程组的调用

rd与上次运行的randomnum相同

时间函数

6. csv读取文件

配置元件Config Element > CSV 数据文件设置 CSV Data Set Config

支持csv格式、文本格式(txt/log/json/无后缀文本)  --推荐,因为国内都习惯使用中文,如果csv文件用excel打开,它的编码不是utf-8,可能出现中文乱码,因此不推荐使用csv格式

变量名称:java变量命名规则,多个变量间用英文逗号

忽略首行:有表头是用(True/False)

分隔符;

遇到文件结束符再次循环?True/False

遇到文件结束符停止线程?True/False

线程共享模式

10个线程,总共6个数据,从第7个开始从头循环,因为设置的遇到文件结束符再次循环为True

这样会跑7次

7.  正则

后置处理器post processors > 正则表达式提取器 Regular Expression Extractor

模糊提取信息,作为后续操作的参数

apply to   filed to check

name 变量名称

Regular Expression  正则表达式

template  模板,$1$代表第1个,$2$代表第2个

match No.   0代表随机,1代表第1个,-1代表全部

8. json提取

后置处理器 post processors > Json提取器JSON Extarctor

apply to

name  变量名称

json path expression json路径

规则:

$.开头

后面跟节点名称、列表时用中括号[0]

节点层级用 . 号

apply to 下的区别

Jmeter Variable Name to Use的使用

方法一:json提取

方法二:正则提取

10. 正则表达式

左右边界值,中间匹配内容用 () 代表用户括号内正则匹配

. 匹配除换行符以外的所有字符

* 匹配0的次或者多次——贪婪

+ 匹配1次或者多次——懒惰

? 匹配0次或者1次

. *  .+

\d  \d+   [0-9]+

\w  \w+  英文字母或数字的字符串

11. 断言

右键 添加 断言Assertion

响应断言 Response Assertion

或者:两个有一个成功即为成功

否是非的意思,不包含成功,包含失败

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序docker开发难度大吗?要注意什么?
下一篇:python实现智能语音天气预报(python实现天气预报查询)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~