Jmeter常用获取数据的几种方式

  • Post author:
  • Post category:其他


1、手动写入

所有可以固定的参数,我们都可以通过手动写入的方式。例如:HTTP信息头管理器中的Content-Type的值是application/json,通过手动写入的方式来获得数据。

2、添加用户自定义变量

3、读取文件

CSV Data Set Config可以从指定文件中读取数据,filename即文件路径,Variable Names即做为变量名。如果有多列就写多个,逗号隔开。



4、从数据库中读取

连接数据库:

执行sql,获取数据:

5、正则表达式提取器 【括号里面的表示要提取的内容】

正则表达式:用于将需要的数据提取出来。模板: 表示要提取第几个值,$1$,1表示第一个,$2$,2表示第二个。匹配数据: 0表示随机,1表示全部。缺省值:匹配不到的默认值。



“sn”:”(.*?)”   #非贪婪模式(含有?),贪婪模式(不含?)

贪婪与非贪婪模式是两种不同的表达式匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。

eg:

{“error”:0,”sn”:”F11215456251923190″,”redirect”:”\/index.php?r=hot%2Forder%2Fpayment&sn=F11215456251923190″}

“sn”:”(.*)” ,贪婪模式得到的结果:F11215456251923190″,”redirect”:”\/index.php?r=hot%2Forder%2Fpayment&sn=F11215456251923190″

“sn”:”(.*?)” ,非贪婪模式得到的结果:F11215456251923190

进阶匹配问题

1)如何获取数组结果?

如果有多个匹配的结果,则获取到的是个数组,此时若要提取其中的内容,调用方式为${ bizSeqNo _1},$…,如果想要得到匹配出的结果的个数,用$,如果想随机选取一个,只需要将匹配数字设为0,使用$调用即可。

2)如何获取唯一的匹配结果?

如果想要避免上面获取多种结果的情况,则需要注意把正则表达式写成非贪婪模式,或者增加正则表达式的前后边界,使结果唯一匹配既可。

6、json提取器

Names of created variables,写入变量名,多个变量名用英文分号分隔。JSON Path中写入json的格式,多个格式用英文分号分隔,例如:$.data.id,

返回信息是json格式

7、Xpath提取器

使用场景:仅适用于返回数据为html格式的数据

Xpath语法:

//a[@class=”postTitle2″]/text()

另外表达式://a[@class=”postTitle2″],去掉/text()也是可以的,大家可以自己试试

//*[@class=’postTitle2′]/@href 从根目录下定位所有class=postTitle2的href值

//*[@class=’postTitle2′] 从根目录下定位所有class=postTitle2标签内的文本

//a[contains(@class,’postTitle2′)] 从根目录下a标签的class值中包含postTitle2的节点

substring-before(.//*[@class=’postTitle2′]/text(),’基础’) 返回根目录下[@class=’postTitle2′]/text()中第一个’基础’前面的部分,如果不存在’基础’,则返回空值


XML Parsing Options

:要解析的XML参数

Use Tidy:当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式(例如RSS返回),则取消选中;

Quiet表示只显示需要的HTML页面,Report errors表示显示响应报错,Show warnings表示显示警告;

Use Namespaces:如果启用该选项,后续的XML解析器将使用命名空间来分辨;

Validate XML:根据页面元素模式进行检查解析;

Ignore Whitespace:忽略空白内容;

Fetch external DTDs:如果选中该项,外部将使用DTD规则来获取页面内容;

8、使用随机数和计数器

在配置元件中的随机变量和计数器,非常好用。随机变量控件中,输入最大和最小值,变量名称和输出格式。计数器空间中,输入最大和最小值,递增频率和引用名称

9、用时间戳做为变量

有时候随机数可能不能满足我们对于参数的要求,我们可以采用时间戳+随机数的方式,大大减低数据重复的可能性。

${__time(,)} : 默认该公式精确到毫秒级别, 13位数

10、返回值存入文件再使用

前面我们说了采用正则表达式提取器和json提取器来传递参数,能满足我们大部分场景,当使用场景如下时就会显得不那么好用了:在压力测试时,我们需要每个用户都是登录情况下操作。如果我们在前面调用登录接口,势必大大影响整个系统的处理能力,这样不能能客观得到接口的性能。

我们可以采用如下处理方式,在setUp线程组中批量注册或者登陆一批用户(当然总数是够跑一次测试的),把他们的登录信息存入一个文档。在主线程组中再把他们从文件中读取处理,放入headers中,执行下单请求测试。



版权声明:本文为Lily55_Li原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。