ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Jmter前/后置处理器

2022-05-16 01:33:46  阅读:261  来源: 互联网

标签:提取 请求 后置 Jmter json 取样器 处理器 线程


所谓的前/后置处理器,就是处理请求发送之前和响应之后要做的事情,常用的有:

  • 前置处理器
    • beanshell处理程序
  • 后置处理器
    • json提取器
    • 正则表达式提取器
    • beanshell处理程序

我们先来说后置处理器,而beanshell我们将单独拿出来说。

后置处理器

后置处理器常用来从响应中提取数据用作它用,主要包括:

  • json提取器:当响应体的数据类型是json时,用json提取器相当方便。
  • 正则表达式提取器:正则表达式提取器比json提取器更加的灵活、强大,适用于各种复杂的场景中。
  • beanshell处理程序:暂时理解为我们可以他通过编写脚本来完成更加复杂的操作。

json提取器

http://www.neeo.cc:6001/get?user=admin&pwd=1234

# response body
{
  "args": {
    "pwd": "1234", 
    "user": "admin"
  }, 
  "headers": {
    "Connection": "keep-alive", 
    "Host": "www.neeo.cc:6001", 
    "User-Agent": "Apache-HttpClient/4.5.10 (Java/1.8.0_201)"
  }, 
  "origin": "222.35.243.75", 
  "url": "http://www.neeo.cc:6001/get?user=admin&pwd=1234"
}

我们使用json提取器提取向响应体中的的args的user值。

在线程组内,新建一个HTTP请求取样器,然后配置如下:

如何提取响应体的中的指定字段呢?

这里就要用到了json提取器了:

image-20200602101718780

各参数:

  • 名称/注释:略!
  • Apply to:
    • Main sample and sub-samples:作用于父节点的取样器及对应子节点的取样器。
    • Main sample only:默认,仅作用于父节点的取样器。
    • Sub-samples only:仅作用于子节点的取样器。
    • JMeter Variables Name to use:作用于jmeter变量(输入框内可输入jmeter的变量名称)。
  • Names of create variables:提取的json数据存储的变量名字。
  • JSON Path expressions:提取JSON数据的JSON Path表达式路径,json path参考:https://github.com/json-path/JsonPath
  • Match No. (0 for Random):匹配第几个值,不填写默认获取符合条件的第一个, 0为随机、N为获取第N个、-1获取所有(匹配项是-1且匹配结果有多个值时,会通过逗号将多个值拼接,可以通过 参数名_ALL 的方式进行调用)。
  • Compute concatenation var (suffix _ALL):勾选此项后,匹配到多个结果时,插件将使用“ , ”分隔符将它们连接起来,并将其存储在名为_ALL的var中(需配合Match Numbers:-1 使用)。
  • Default Value:缺省值,如果json提取器没有提取到值,则使用此缺省值

然后,我们在察看结果树中的调试取样器中看到提取的值:

此时,提取出来的user值是全局的,可以在别处直接使用。当然,具体的使用方式,后续结合实际的应用场景来讲解。

正则提取器

json提取器有一定的限制,它做不到正则匹配那么灵活,所以我们还需要学习在jmeter中如何使用正则表达式提取器。

正则表达式提取器三步走,轻松提取数据:

  • 拷贝目标数据和左右边界
  • 把目标数据用括号括起来
  • 把目标数据用.+?代替

OK啦,这里正则提取非常的简单。

http://www.neeo.cc:6002/pinter/bank/api/login
# post
# 参数
userName=admin
password=1234

如上示例,我们提取该请求的返回的cookies值。

在线程组内,新建一个HTTP请求取样器,然后配置如下:

该请求的返回的cookies值在响应头中:

那如何使用正则表达式提取器来响应头中提取呢?

说实话,jmeter汉化的是在不太好,有些情况下倒不如英文那么原汁原味,所以,下图语言是英语。

常用的参数:

  • Field to check:

    • Body:响应体
  • Body as a Document:文本类型的响应体

    • Response Headers:响应头中提取。
  • Request Headers:请求头中提取。

    • URL:URL中提取。
  • Names of create variables:提取的数据存储的变量名字。

  • Reguler Experession:正则表达式规则,参考上面的三部走套路。

  • Template (ii where i is capturing group number, starts at 1):模板使用$n$表示,此处,上面只有一个(),所以这里使用$1$,如果上图中有两对(),那么模板为$1$$2$,以此类推。

  • Match No. (0 for Random):0 表示随机取值,1 表示取第一个,2表示提取第二个........

  • Default Value:缺省值,如果没有提取到值,则使用此缺省值。

然后,我们在察看结果树中的调试取样器中看到提取的值:

 

前置处理器

前置处理器(Pre Processors)常用来在请求之前提前作一些处理,常见的前置处理器有:

  • 在请求中,携带一些参数。
  • HTML链接解析器
  • HTTP URL重写修饰符
  • JDBC预处理程序,用于jmeter链接数据库用。
  • BeanShell预处理程序,可以通过编写脚本来说处理更为复杂的操作。

在前置处理器中,最常用的是JDBC和BeanShell两个处理器,其他的用的较少。

用户参数

提前准备一些参数用于在请求中携带一些参数,但是它只作用于当前的线程组中,不像在测试计划中的参数作用于全局。

http://www.neeo.cc:6001/get
# get

我们在测试计划中,新建两个线程组,并且都将线程数设置为2;新建一个查看一个察看结果树,移动到测试计划下,用来监听两个线程组的执行情况。

在第一个线程组tes1内添加一个用户变量前置处理器:

配置如下:

在两个线程组内分别新建一个HTTP取样器,设置如下:

上面两个取样器的设置基本一致;其中参数用户名和密码都是从"用户变量"前置处理器中提取的。

来运行一波,察看结果树中:

可以看到,由于线程组的线程数设置的是2,那么每个线程组内的HTTP取样器应该执行两次;

并且线程组test1的请求成功的从"用户变量"中提取出了值,而且是分别取的;由于线程组test2内没有"用户变量",所以请求中没有提取到值,这也证明了,开头说的,"用户变量"只作用于当前线程组,而无法作用于全局。

标签:提取,请求,后置,Jmter,json,取样器,处理器,线程
来源: https://www.cnblogs.com/TodayWind/p/16275453.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有