测试计划定义变量,线程组中设置用户定义变量
在测试计划中添加的变量可以所有的线程组中使用。
也就是说,变量名只能存在一个。 类似与Postman中 Global 变量。
线程组设置变量
在线程组中添加 【用户定义的变量】,在用户定义的变量中设置的变量,只能在当前线程组中使用,类似Postman中定义 环境变量。
企业微信的接口中, 前缀 都一样
运行之后,可以看到执行的结果中,使用的变量是 线程组中定义的用户变量,没有用 测试计划 中设置的变量。
常问面试题
- jmeter 中设置变量的方式有哪些?
- 在【测试计划】中设置变量,可以所有的线程组中使用;
- 在【线程组】—【用户定义的变量】设置的变量,可以在所有的线程组中使用。
- 如果在两个线程组中分别创建同样的变量,使用的时候不确定用的哪个线程组中变量。
- 建议使用 【测试计划】中创建的变量。
- 在进行上下游传参的时候,使用JSON提取器,动态获取服务器返回的结果,提取对应值 设置为变量。
- 与上面方式不同的是:取到的值是动态的。
- 上面两种方式设置的值是固定。
- 正则表达式也可以设置变量。变量也是动态的。
- 函数助手中也可以使用JMeter内置的函数设置变量。
正则表达式提取器
正则表达式提取器与JSON提取器的 最终目的是一样的: 都是为进行上下游传参设置。
正则表达式更强大,json提取器能提取到的数据,正则也能!
正则提取器能提取到的数据,JSON提取器不一定能。
下面看个例子:
标记单个消息为已读,前提条件是:必须要有未读的消息。
未读消息的接口:
这两个接口就有上下游传参
创建上游接口
使用Json提取器提取
在查看结果树中,使用json Path Tester 进行查看
先使用json提取器 提取出来
对应的json提取器表达式
$.data.hasnot_read_messages[0].id
- [0] 表示的是 第一个未读消息。
使用json提取器, 提起data的值{
"data":{
"hasnot_read_messages":[
{"id":"1111111222"},
{"id":"22222333344"}
]
}
}
data 对应的值是$.data
再次提取 hasnot_read_messages 对应值{
"hasnot_read_messages":[
{"id":"1111111222"},
{"id":"22222333344"}
]
}
取到的值为 对应的数组,数组表示多个数据。$.data.hasnot_read_messages
从数组中提取第一个。 索引为0[
{"id":"1111111222"},
{"id":"22222333344"}
]
取到对应的结果$.data.hasnot_read_messages[0]
最后取对应的id值{"id":"1111111222"}
设置json路径表达式$.data.hasnot_read_messages[0].id
创建下游接口标记单个消息为已读,通过引用变量的方式。
使用正则表达式提取
https://jmeter.apache.org/usermanual/regular_expressions.html
先在查看结果树中测试一下 正则表达式能否找到对应的数据
比如上面例子中,要提取的是 发布话题返回的topicid。
1、 先找到对应的特征
2、根据特征,将要提取的部分使用 (.+?)
来表示。
创建正则表达式
在新建话题上添加 正则表达式 提取器
引用名称: 就是设置变量名
正则表达式: 上面写好的正则表达式
模板: 固定写法 $1$
下游接口中引用变量
现在一个接口返回的数据比较多,如何通过正则表达式来提取自己想要的结果。
发现要提取字段特征:"hasnot_read_messages":[{"id":"6118ba5348d7e392e2fc4f3a"
要从这段字符串中提取结果
因为 [``{
也是正则表达式中的语法。
不能直接使用 "hasnot_read_messages":[{"id":"(.+?)"
这种方式来做正则匹配。
要 [ { 当成为具体的字符来使用。所以 这个正则表达式应该为
"hasnot_read_messages":\[\{"id":"(.+?)"
\ 可以将正则表达式中的字符变为正常的字符来使用。
设置正则表达式提取器
引用变量
运行
常见面试问题
- 你是怎么处理接口中上下游关系的?
参考回答:
在我们的公司内部接口中,因为要测试整个流程,不同的接口之间存在关联,比如我之前做的移动办公项目,里面有会议室管理功能,添加会议室与删除会议室两个接口之间存在上下游关联。
a. 先根据业务确定上下游位置,上游 添加会议室
b. 上游接口中使用 JSON提取器 或者 正则表达式提取器 提取其中的数据,设置变量。
c. 下游接口中 通过引用变量的方式进行参数传递。
- json提取器和正则表达式提取器的区别?
参考回答:
正则表达式提取器可以在任意的返回结果中 都可以进行数据提取、
JSON提取器适用于服务器返回结果中为JSON格式的数据。
正则表达式语法复杂,
JSON提取器相对比较简单。
两种方式都是为了解决具体的参数传递问题。我在公司中因为服务器返回结果都是json格式,我一般使用json提取器。