0
点赞
收藏
分享

微信扫一扫

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

一. jmeter录制脚本优化

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

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

 

1. 不需要的脚本

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

jmeter脚本开发:控制器和参数化(三)_线程组_02

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

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

录制时,添加过滤

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

2. 条件头文件

cookie管理器

消息头管理器

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

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

jmeter脚本开发:控制器和参数化(三)_线程组_05

3. 添加监视器

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

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

4. 添加断言

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

二. jmeter手写脚本

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

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

accept:

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

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的接口:

jmeter脚本开发:控制器和参数化(三)_线程组_07

一般加两个,Content-Type和Accept

jmeter脚本开发:控制器和参数化(三)_线程组_08

jmeter脚本开发:控制器和参数化(三)_线程组_09

jmeter脚本开发:控制器和参数化(三)_自定义_10

三. 控制器

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

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

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

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

jmeter脚本开发:控制器和参数化(三)_自定义_12

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

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

jmeter脚本开发:控制器和参数化(三)_自定义_14

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

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

 

 

 jmeter脚本开发:控制器和参数化(三)_线程组_17

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

3. If控制器:条件判断

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

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

jmeter脚本开发:控制器和参数化(三)_线程组_18

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

jmeter脚本开发:控制器和参数化(三)_线程组_19

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

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

jmeter脚本开发:控制器和参数化(三)_线程组_21

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

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

jmeter脚本开发:控制器和参数化(三)_自定义_22

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

jmeter脚本开发:控制器和参数化(三)_线程组_23

6. 仅一次控制器

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

7. 吞吐量控制器

Total Executions  运行总次数

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

jmeter脚本开发:控制器和参数化(三)_线程组_24

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

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

Percent Executions  运行比例(1-100)

jmeter脚本开发:控制器和参数化(三)_自定义_27

 jmeter脚本开发:控制器和参数化(三)_线程组_28

三. 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

运行中值不变

jmeter脚本开发:控制器和参数化(三)_自定义_29

 jmeter脚本开发:控制器和参数化(三)_线程组_30

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

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

jmeter脚本开发:控制器和参数化(三)_线程组_33

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

4. 用户参数 User Parameters

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

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

jmeter脚本开发:控制器和参数化(三)_自定义_34

 jmeter脚本开发:控制器和参数化(三)_线程组_35

 jmeter脚本开发:控制器和参数化(三)_线程组_36

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

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

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

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

 jmeter脚本开发:控制器和参数化(三)_自定义_40

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,)}

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

 jmeter脚本开发:控制器和参数化(三)_线程组_42

 jmeter脚本开发:控制器和参数化(三)_自定义_43

 jmeter脚本开发:控制器和参数化(三)_自定义_44

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

 jmeter脚本开发:控制器和参数化(三)_自定义_46

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

 jmeter脚本开发:控制器和参数化(三)_自定义_47

 rd与上次运行的randomnum相同

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

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

时间函数

jmeter脚本开发:控制器和参数化(三)_线程组_50

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

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

  线程共享模式

jmeter脚本开发:控制器和参数化(三)_线程组_52

jmeter脚本开发:控制器和参数化(三)_自定义_53

 jmeter脚本开发:控制器和参数化(三)_自定义_54

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

jmeter脚本开发:控制器和参数化(三)_自定义_55

这样会跑7次

jmeter脚本开发:控制器和参数化(三)_线程组_56

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

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]

  节点层级用 . 号

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

 jmeter脚本开发:控制器和参数化(三)_线程组_59

 jmeter脚本开发:控制器和参数化(三)_自定义_60

apply to 下的区别

jmeter脚本开发:控制器和参数化(三)_线程组_61

Jmeter Variable Name to Use的使用

方法一:json提取

jmeter脚本开发:控制器和参数化(三)_线程组_62

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

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

方法二:正则提取

jmeter脚本开发:控制器和参数化(三)_自定义_65

 jmeter脚本开发:控制器和参数化(三)_自定义_66

10. 正则表达式

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

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

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

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

? 匹配0次或者1次

. *  .+

\d  \d+   [0-9]+

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

jmeter脚本开发:控制器和参数化(三)_线程组_67

 

 jmeter脚本开发:控制器和参数化(三)_线程组_68

11. 断言

右键 添加 断言Assertion

响应断言 Response Assertion

jmeter脚本开发:控制器和参数化(三)_自定义_69

 jmeter脚本开发:控制器和参数化(三)_线程组_70

 jmeter脚本开发:控制器和参数化(三)_线程组_71

jmeter脚本开发:控制器和参数化(三)_线程组_72

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

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

jmeter脚本开发:控制器和参数化(三)_自定义_74

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

jmeter脚本开发:控制器和参数化(三)_自定义_75

 


举报

相关推荐

0 条评论