jmeter 我需要在一个线程组中运行两个不同的会话

fv2wmkja  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(146)

我正在测试一个场景,其中一个用户向数据库添加了一个新用户,并且该新用户尝试登录。我需要能够运行的整个过程中,但登录尝试需要发生后,添加用户。
问题是由于某种原因,Cookie管理器无法从设置线程提供正确的会话ID,我不得不使用头管理器来插入Cookie。这意味着当新用户登录时,它将“中断”原始用户的登录会话,并且在一个新的运行中,它将导致它无法添加新用户,因为系统认为这是新用户登录,没有授权做以前用户应该做的事情。
我在想两个解决的办法。

  • 将新用户的登录名放在不同的线程组中,该线程组将获得新的会话ID,但是:
  • 我如何确保它将被绑定到运行的原始线程?简而言之:我需要确保一个线程创建另一个线程,并让它并行工作。
  • 找到某种方法从头管理器中清除sessionID,在新用户登录之前调用它,这样它将请求一个新的sessionID。
import org.apache.jmeter.protocol.http.control.Header;
import org.apache.jmeter.protocol.http.control.HeaderManager;

HeaderManager headerManager = sampler.getHeaderManager();

if (headerManager != null) {
    headerManager.add(new Header("HeaderName", ""));
}

我试过这样做,但它并没有清除HeaderName头的值,而是插入了一个新的Header,名为HeaderName,值为空。

import org.apache.jmeter.protocol.http.control.Header;
import org.apache.jmeter.protocol.http.control.HeaderManager;

HeaderManager headerManager = sampler.getHeaderManager();

if (headerManager != null) {
    headerManager.add(new Header("HeaderName", ""));
}
qnakjoqk

qnakjoqk1#

  1. HTTP Cookie管理器不会在线程组之间共享Cookie。
  2. HTTP Cookie管理器为不同的用户保留单独的Cookie,它们不会在线程之间共享。请参阅Thread-local storage文章,了解如何为单独的进程使用单独的内存。
    如果Cookie管理器没有从响应中捕获Cookie,则可能是无效的。您可以尝试使用限制较少的实现,如netscape和/或将CookieManager.check.cookies属性设置为false
    1.如果您想将cookie复制到另一个线程组或在其他地方使用它,您可以通过将CookieManager.save.cookies属性设置为true,然后设置为convert JMeter Variable holding the cookie value into a JMeter Property,将cookie存储到JMeter变量中
    1.根据standard,允许重复的头,所以如果你想改变一个头的值,你需要先删除一个现有的头,如下所示:
headerManager.removeHeaderNamed("HeaderName");

相关问题