zoukankan      html  css  js  c++  java
  • 二十二、JMeter实战-跨线程组传递cookie

    JMeter Cookie的使用场景


    工作中的场景,比如某个系统,需要先登录,然后进行添加门店、添加会员、添加会员等操作,这些操作可执行的前提是要先登录。用户在登录的时通常会生成cookie,接下来的操作中都要带上cookie。还会遇到一些场景,只需要登录一次,接着进行其他操作,还有跨线程怎么传输cookie。



    整体的思路:

    1. setUp线程组中登录,登录后使用正则把cookie取出来
    2. 通过BeanShell把变量设置为全局变量,供跨线程使用
    3. 在一个普通线程组中添加HTTP Cookie管理器,把登录生成的cookie值引用到cookie管理器中



    HTTP Cookie管理器定义

    Cookie Manager元素具有两个功能:

    1. 首先,它像Web浏览器一样存储和发送cookie。如果您有HTTP请求,并且响应包含cookie,则cookie管理器会自动存储该cookie,并将其用于将来对该特定网站的所有请求。每个JMeter线程都有其自己的“ cookie存储区”。因此,如果您正在测试使用cookie来存储会话信息的网站,则每个JMeter线程将拥有自己的会话。请注意,此类cookie不会出现在Cookie Manager上,但可以使用“查看结果树监听器”看到它们。

    2. JMeter会检查收到的Cookie是否对该URL有效。这意味着不会存储跨域Cookie。如果您有错误的行为或希望使用跨域cookie,请定义JMeter属性“ CookieManager.check.cookies = false ”。
      收到的Cookies可以存储为JMeter线程变量。要将cookie保存为变量,请定义属性“ CookieManager.save.cookies = true ”。另外,在存储cookie名称之前,它们以“ COOKIE_ ”为前缀(这避免了局部变量的意外损坏)。若要恢复原始行为,请定义属性“ CookieManager.name.prefix = ”(一个或多个空格)。如果启用,则名为TEST的cookie的值可以称为$ {COOKIE_TEST}。

    3. 其次,您可以手动向Cookie管理器添加cookie。但是,如果执行此操作,则cookie将被所有JMeter线程共享。
      请注意,此类Cookie的创建时间是将来的很远
      默认情况下, 具有空值的Cookies被忽略。这可以通过设置JMeter属性来更改:CookieManager.delete_null_cookies = false。请注意,这也适用于手动定义的Cookie-更新后,所有此类Cookie都会从显示中删除。还要注意,cookie名称必须唯一-如果用相同的名称定义了另一个cookie,它将替换第一个。



    总结一下:

    1. HTTP Cookie管理器可以自动管理cookie,前面有讲解过,就把cookie管理器加上去就行了
    2. 也可以对cookie进行跨域使用,跨域使用就是前面所说的思路。



    还是拿部署好的教育系统进行实战讲解:


    一、实操


    1.新增setUp线程组

    setUp线程组下一节在做具体讲解,setUp线程组执行一个初始化的操作,在普通线程组之前直接,而且只执行一次。比如现在我们就只需要登录一次,然后接着操作学校列表接口、禁用、启用学校等。



    2.在setUp线程组中进行登录

    登录后抓取cookie的值,通过抓包或者直接在查看结果树中看,cookie的值在响应头中。





    3.通过正则提取cookie的值

    通过正则提取cookie的值,关联和正则的相应的说明在前面的文档有详细说明。






    4.通过beanshell设置存放cookie的变量为全局变量

    添加一个beanshell取样器,在脚本中编写:

    ${__setProperty(new,${c},)};
    

    c是上面正则提取处理的变量值;new是新定义的全局变量;


    要设置为全局变量才能跨线程使用





    5.在另外的一个线程组中添加cookie管理器

    在另外线程组中添加cookie管理器,把cookie的值引用过来

    ${__P(new)
    

    域和值一定要填写正确,域填写错不起作用的。

    “ domain ”(域)是服务器的主机名(不带http://);该端口当前被忽略。域直接写主机名就可以了。





    6.在线程组中添加请求

    在线程组中添加一个学校列表页,接口都可以写在这个线程组中,这些接口的共同特点就是都需要先登录,才有权限访问。
    新增一个学校列表页接口,请求成功。

  • 相关阅读:
    【python】学习笔记10-ddt数据驱动
    【python】学习笔记10-装饰器
    【Python】学习笔记8-多线程多进程
    【Python】学习笔记7-异常处理try。。except .. as e ....else
    【Python】学习笔记6-补充Flask模块:登录接口,mysql数据库、存redis-sesson、存浏览器cookie
    【Python】学习笔记6-创建Excel:xlwt,读取Excel:xlrd ,修改Excel:xlutils
    【Python】学习笔记6-网络编程urllib,request,请求rul
    【Python】学习笔记5-利用flask来mock接口
    【Python】学习笔记5-操作redis数据库redis
    【Python】学习笔记5-模块pymysql操作mysql数据库
  • 原文地址:https://www.cnblogs.com/wwho/p/14303860.html
Copyright © 2011-2022 走看看