• 5
  • 7
分享
  • JMeter前后置处理器的另类玩法——软件测试圈
  • 曼倩诙谐 2020-11-18 10:37:36 字数 2670 阅读 1465 收藏 7

  在JMeter中有两种类型的处理器,即“前置处理器”和“后置处理器”,主要用来对其覆盖范围内采样器请求和响应的内容进行修改或截获。

  【前置处理器】

  “前置处理器”,又称预处理器,可以在我们发出“请求”之前执行一些相关操作。例如,假设我们需要通过JMeter爬取被测站点的所有链接并随意点击任意链接,检查其有效性,这就可以通过JMeter前置处理器中的“HTML Link Parser”来实现,该前置处理器会对指定主机/域名上所有链接进行解析和验证。

1.png


  【前置处理器DEMO】

  在针对服务端做压测时,我们往往需要有这样的工作场景,多个虚拟用户并发访问服务端,但每个用户请求的URL各不相同,以百度服务端为例,其主机域名为“www.bai.com”,下属子各链接分别定位到不同的信息站点(如:百度新闻URL“http://news.baidu.com/”,百度学术URL“https://xueshu.baidu.com/”,百度文库URL“https://wenku.baidu.com/”等),我们希望不同虚拟用户并发访问基于主机的任意URL,从而更好地模拟多用户对服务端主机发起的任意URL请求。

  下面我们通过JMeter前置处理器中的“HTML Link Parser”来实现这项测试任务。

  ·测试步骤如下:

  1.创建多用户并发请求场景

  2.通过JMeter将HTTP请求发送至被测web主机服务端www.baidu.com, 请求的URL为基于主机的任意URL

  3.查看结果

  ·JMeter实现步骤

  1.添加线程组

  右键单击“测试计划”,添加一个新的线程组:添加——>线程(用户)——>线程组;

2.png


  在“线程组”面板中,输入对应的线程属性,即虚拟用户数及其入场设置,这里仅创建10个虚拟用户,每个虚拟用户对服务端发出10次请求,即总请求数为10*10 = 100次请求。

3.png


  2.添加WHILE逻辑控制器

  由于需要模拟大量用户持续发送随机URL请求,我们通过WHILE逻辑控制器来循环这个场景,大家可根据实际情况设定WHILE循环的次数。

  右键单击线程组:添加——>逻辑控制器——>While控制器;

4.png

5.png



  3.添加HTTP请求

  在WHILE逻辑控制器中添加HTTP请求采样器,右键单击While Controller:添加——>采样器——>HTTP请求;

6.png


  在HTTP请求面板中,指定path为“/.*”,这样JMeter将直接向baidu服务端发起基于域名为www.baidu.com的任意请求。

7.png


  4.添加前置处理器“HTML Link Parser”

  为上述的HTTP请求采样器添加前置处理器,目的是为了解析主机中的所有链接;

  右键单击上述HTTP请求:添加——>前置处理器——>HTML Link Parser;

8.png


  5.添加视图结果树

  右键单击线程组:添加——>监听器——>查看结果树;

9.png


  6.运行测试

  选择菜单栏上的运行按钮,执行测试后,选择查看结果树,会看到任意基于baidu主机请求的URL (可以手动点击STOP,即,停止循环),可以点开任何一个HTTP Request查看其请求的URL及响应的结果。

10.png


  【后置处理器】

  “后置处理器”顾名思义是指在“请求采样器”发出后执行的一些操作。例如我们有这样一个测试需求场景, 通过JMeter将HTTP请求发送到被测web服务端(如:www.google.com)并获得响应,我们希望JMeter在服务器响应出错的情况下能有效停止测试,这项任务可以通过后置处理器的协助来完成。

11.png


  【后置处理器DEMO】

  根据上述的后置处理器测试需求分析,下面我们通过JMeter具体实现这项测试任务。

  ·测试步骤如下:

  1.通过JMeter将HTTP请求发送至被测web服务器www.google.com

  2.JMeter收到来自google服务器的响应

  3.如果服务器响应出错,JMeter停止当前测试

  4.如果服务器响应正常(无错误),那么JMeter将继续执行后续测试任务

  ·JMeter实现步骤

  1.添加线程组

  参见上述“前置处理器DEMO中的STEP1”

  2.添加JMeter元素

  在当前测试任务中,需要添加的JMeter元素有:配置元件中的“HTTP默认请求”和采样器中的“HTTP请求”;

12.png


  在线程组上右键单击选择:添加——>配置元件——>HTTP默认请求;

  在“HTTP默认请求”面板中,输入被测服务端域名(如:http://www.google.com);

13.png


  右键单击线程组:添加——>采样器——>HTTP请求;

14.png



  在HTTP请求面板中,先不指定path,这样JMeter将直接向Google服务端www.google.com发起请求。

15.png


  3.添加后置处理器

  右键单击线程组:添加—>后置处理器—>结果状态操作处理;

16.png


  结果状态操作处理允许在用户请求失败时停止线程或整个测试;

  在结果状态操作处理面板中,选择“立即停止测试”,这样一来,当JMeter收到来自服务器响应错误时,将停止测试。

17.png


  4.配置HTTP请求

  在HTTP请求面板中,设置path为“xyz”;

18.png


  从上面得知,当我们在path中输入“xyz”时,JMeter将向Google服务器创建一个URL请求为:http://www.google.com/xyz,很明显这个URL是不存在的,是一个错误的请求地址,因此Google服务器会返回错误相应。

  5.添加视图结果树

  右键单击线程组:添加——>监听器——>查看结果树;

19.png


  6.运行测试

  选择菜单栏上的运行按钮,执行测试后,选择查看结果树,会看到来自Google服务器的错误响应,并且测试在未完成100次请求时就停止了;

20.png

  现在我们返回第4步,在HTTP请求面板中,指定path为“calendar”,即需要请求的URL地址为“http://www.google.com/calendar”,这是正确的URL请求地址;

21.png

  重新运行后,打开查看结果树,可以发现Google服务端响应正常,并且测试将持续执行,直到完成所有100个请求为止。

22.png

  【总结】

  以上基于JMeter前置处理器及后置处理器,介绍了其在典型测试场景中的应用,希望能够帮大家进一步拓展这两类处理器的使用场景,在今后的工作学习中能够结合实际情况有效应用。



作者:罗狮小钉   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   据日经亚洲今日报道,比亚迪新加坡和菲律宾市场总经理 James Ng 透露,公司计划今年在这两个市场新增数十家销售网点。  具体来看,比亚迪在菲律宾已拥有超过 10 家经销商,公司计划年内在当地再增加 20 多家经销商,为当地消费者提供更方便的购车、售后服务。比亚迪在新加坡则拥有 7 家销售网点,今年计划在当地再增加 2-3 家。  比亚迪在去年 8 月进军菲律宾市场,菲律宾企业 Ayala 旗下汽车部门 AC Motors 通过其销售网络负责多款比亚迪电动车型在菲律宾的销售、维保。引入当地的车型包括汉 EV、唐 EV、海豚,对应国内元 PLUS 的车型 ATTO 3 于同年晚些时候引入。...
            0 0 893
            分享
          • 摘要:许多敏捷软件开发中的自动化测试的工作都失败了,或者并没有发挥它们最大的潜力。本文研究分析了自动化测试也许不能满足测试人员和其他利益相关者期望的两个主要原因,然后列举了六个能够避免陷入这些陷阱的步骤。以下是在敏捷环境中成功实现测试自动化的方法。为了能够跟上因敏捷软件开发而不断缩短的发布周期,很多开发团队都采用了自动化测试的方法,从而不断保证每个软件版本都符合所需的质量水平。这是传统软件开发实践的一个重要转变:测试经常被卡在开发过程的最后,被视为了测试过程的负担,而并不是好处。因此,一个在采用敏捷软件开发,转变为DevOps文化并采用持续集成和持续交付的组织中工作的测试人员,必须对于如何有效...
            0 2 3202
            分享
          • 在接口自动化测试过程中,存在部分公共配置、以及登录等信息需要存储,方便其他接口直接读取使用。这个时候可以用到yaml的写和读的功能。yaml基础语法等参考:https://mp-new.csdn.net/mp_blog/creation/editor/82011288yaml写-将公共配置和登录信息写入到yaml文件内#1-写入yaml文件 with open('config.yaml','w',encoding='utf-8') as f:     yaml.dump(bas...
            0 0 1959
            分享
          • 1. 什么是接口?API:ApplicationProgrammingInterface,即应用程序编程接口一个API中通常包含:Method:请求方法URL:唯一资源定位符Params:参数Authorization:认证方式Headers:消息头Body:消息体2. 接口类型httpapi接口走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。API接口一般又分为两种:程序内部的接口和系统对外的接口json是一种通用的数据类型,所有的语言都认识它。(json的本质是字符串,他与其他...
            0 0 1334
            分享
      • 51testing软件测试圈微信