JmeterRequest1输出作为Request2输入-后置处理器

Posted maerpao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JmeterRequest1输出作为Request2输入-后置处理器相关的知识,希望对你有一定的参考价值。

【Jmeter】基础介绍-详细

接上文,继续介绍Jmeter,本文关注点为如何解决上文中提到的第一个问题,即:

  1. 需要实现Request1的返回作为Request2的RequestBody或Header

Jmeter支持后置处理器,即对http请求(或其他取样器)的返回值进行提取并赋值给变量。

本例中从Request1的ResponseBody中提取token,并作为Request2的header输入。

创建后置处理器,此处使用Json提取器用于解析Json返回值:

 Http请求的返回值:

 Json提取器参数:

 参数没什么需要特别说明的,注意如果提取多个值的化,用;隔开,并且Match No. 和 Default Values不能省略,且必须与提取var数量一致

创建request2,并添加http头管理器:

 header管理器配置:

 这里应该很好理解,$xToken就是之前通过Json提取器解析的xToken变量值,有疑问?比如在Query Params中或者Request Body中如何使用变量呢?跟header一样,大胆的试试。

顺便说下,Jmeter对于每个线程来说都是顺序执行的,即当配置压测文件时, Request1在Request2上面,则对于单个线程来说,会先执行Request1,所以不用担心顺序问题。

另外常用的还有正则表达式提取器,网上资料很多,可自行搜索,如果还满足不了你的需求,就用BeanShell直接写代码,后面将单独介绍。

看下效果:

 至此,问题1解决。

 

request的细节--学习笔记

  • )转发是通过RequestDispatcher对象的forward(request,response)方法完成的
  • )forward()方法之前的输出,如果是输出到缓冲区,再转发到其他Servlet,那么原缓冲区的数据忽略不计
  • )forward()方法之前的输出,如果真正输出到浏览器,再转发到其他Servlet,再转发到其他Servlet代码忽略不计
  • )forward()方法之前的输出,如果是对响应头的设置,会保留到转发的其他Servlet中
  • import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Demo91 extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
            //response.setContentType("text/html;charset=UTF-8");
            //PrintWriter pw = response.getWriter();
            //pw.write("Demo91");
            //pw.flush();
            //pw.close();
            //转发
            //request.getRequestDispatcher("/Demo92").forward(request,response);
            //重定向
            response.sendRedirect("/day06/success.html");
        }
    }
    

    转发java

    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Demo92 extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
    
             //输出
            response.getWriter().write("Demo92");
        }
    }

    以上是关于JmeterRequest1输出作为Request2输入-后置处理器的主要内容,如果未能解决你的问题,请参考以下文章

    PhpStorm:运行 php artisan serve 未定义索引:REQUEST_URI [重复]

    request的细节--学习笔记

    将对象作为参数传递给 GraphQL Mutation (graphql-request)

    python爬虫使用request发送get和post请求

    request&response笔记

    Symfony2:onKernelResponse 调用两次作为 MASTER_REQUEST