二十二、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.在线程组中添加请求

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

原文地址:https://www.cnblogs.com/wwho/p/14303860.html