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. 结果展现

    下个线程也请求成功了

  • 相关阅读:
    C# 实现简单打印(二)打印一个文本文档,打印的内容是多行的
    用户管理:登录窗体通过ShowDialog()方法实现切换
    SQL 定义与使用数据库及表 实例_(学生,课程表,选修表)
    temp0305
    计算机硬件通用功能类:硬件信息控制器(主机名,cpu编号,网卡地址,MAC地址,主硬盘编号,ip地址,获取最大线程数,验证服务IP)
    socket编程:简单的TCP服务器
    从输入的邮箱地址中提取用户名
    C#基础:helloWord book 实例小集合
    怎么样datatable表中增加一行合计行?
    C#基础:多态:基类可以定义并实现虚(virtual)方法,派生类可以重写(override)这些方法
  • 原文地址:https://www.cnblogs.com/wsy0202/p/13083756.html
Copyright © 2011-2022 走看看