zoukankan      html  css  js  c++  java
  • jmeter之多线程共享cookie

    jmeter中在测试计划下添加一个cookie管理器就能实现多个接口对于cookie的验证,但是只能作用于一个线程,如果把登录和其余接口用多个线程分开,非登录接口的request headers中显示no cookie,从而导致脚本报错!

    一、JMeter多线程之间共享cookiedemo截图:


    二、说明:
    1.修改bin目录下的jmeter.properties文件,CookieManager.save.cookies为true,需要重启,如下图:


    2.setUp Thread Group线程组下需要添加HTTP Cookie 管理器这个组件,如下图:


    3.利用Bean Shell后置处理程序和函数${__setProperty(COOKIE_JSESSIONID_GLOBAL, ${COOKIE_JSESSIONID},)};将登录获取的COOKIE_JSESSIONID值设置为全局变量,全局变量名称为COOKIE_JSESSIONID_GLOBAL,如下图:(使用COOKIE_para(para代表cookie中参数名,如cookie中写JSESSIONID=sju1d3e3ad322,则用COOKIE_JSESSIONID来取JSESSIONID的值)来取出cookie信息。)

    或者通过正则表达式取出登录后的cookie值,再使用Bean Shell后置处理程序和函数${__setProperty(COOKIE_JSESSIONID_GLOBAL, ${cookie},)}(有多个cookie值的情况)


    4.在线程组下添加HTTP Cookie 管理器,利用函数${__P(COOKIE_JSESSIONID_GLOBAL)}从全局变量COOKIE_JSESSIONID_GLOBAL中获取cookie值存放到当前cookie管理器中,如下图:

    备注:域、路径需要填上,尤其是域;因为Jmeter现版本默认不支持跨域的请求,不填的话设置的Cookie不会被带上。

    方法二:

    1. 创建一个登录的http请求,然后执行,看返回的cookie是在response的哪里!我这边数据返回在response headers里,有些会用token,会在response body里
     
     
     
     
    1. 在登录的http请求下创建后置处理器--正则表达式提取器或者后置处理器--边界值提取器都可以,提取headers中的cookie信息
      正则表达式提取器和边界值提取器的使用方法百度搜索一大把!
     
     
    1. 在登录http请求下创建一个后置处理器--BeanShell PostProcessor,把提起到的cookie值改成全局变量
      格式:${__setProperty(转换成全局变量后的引用名,${正则表达式定义的变量名},)};
     
     
    ${__setProperty(APHPSESSID,${PHPSESSID},)};
    ${__setProperty(Alanguage,${language},)};
    ${__setProperty(A1_product,${1_product},)};
    ${__setProperty(ApageSize,${pageSize},)};
    
    log.info("----------------------APHPSESSID="+${__P(APHPSESSID,)}+"--------------------");
    
    1. 再添加一个cookie管理器,这个cookie管理器和上面的是不同的,这个里面是要放装换成全局变量后的cookie引用名

    注意:请看清楚层级结构,第二个cookie管理器所在的位子,请不要放在线程组内了!!!

    关于第一个cookie的解释:我的登录中有重定向请求,第一个子请求就产生了cookie,后面两个子请求依赖于第一个子请求的cookie,所以我创建了两个cookie管理器!
    登录线程下面又创建的一个cookie管理器,按照jmeter中的执行顺序,下面的线程只会用第二个cookie管理器中的数据

     
     
    1. 第二个cookie管理器中的写法
      名称:cookie的key
      值: 引用 ·{__setProperty(,,)}; 中定义的全局变量名
      格式:${__P(全局变量名,)}
      域:我的理解,要测试的接口的域名或者ip(填写当前线程中的域,而不是登录请求的域
      路径: 就用 / 就好了
       
       
    1. 结果展现

    下个线程也请求成功了

  • 相关阅读:
    NOIP201208同余方程
    NOIP模拟赛 最佳组合
    NOIP模拟赛 拓展
    CF1253E Antenna Coverage(DP)
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)
    CF582E Boolean Function(DP,状态压缩,FMT)
    CF750G New Year and Binary Tree Paths(DP)
    Codeforces Round 596 题解
    AGC008E Next or Nextnext(组合计数,神奇思路)
    ARC082E ConvexScore(神奇思路)
  • 原文地址:https://www.cnblogs.com/wsy0202/p/13083756.html
Copyright © 2011-2022 走看看