更新jmeter数据集配置以使用另一个线程更新其中的令牌



错误图像Jmeter错误图像JTL

我的API调用获取有效期为4分钟的令牌。在CSV数据集配置文件中,我们有记录,每个用户的每一行中都放置了令牌。我运行这个测试20分钟。我在CLI模式下运行JMeter,并运行另一个线程每2分钟更新一次。线程使用自定义库来创建令牌。

现在的问题是:在某些情况下,Jmeter在由单独的线程更新文件时读取文件,这会导致错误。

我怎么知道这是由线程引起的:

  1. 线程更新文件后会出现此错误。在此之前,一切都很好。

  2. 我的CSV有参数服务器,端口号,用户ID,用户名,密码,团队空间ID,令牌

并且在JMeter脚本中使用类似"Http://${server}:${portNumber}"的URL但在.jtl文件中,很少有记录具有"Http://令牌字符串的某个部分:8082">

有没有其他有效的方法来解决这个

这是一个经典的竞争条件,JMeter的CSV数据集配置不希望文件在运行时发生更改,在没有看到测试计划的情况下很难找到确切的解决方案,但您可以考虑以下替代方案:

  1. 使用JSR223 PreProcessor在请求之前生成令牌,默认情况下,PreProcessor所花费的时间不包括在Sampler的运行时间中,因此您将在结果文件中只获得HTTP请求执行时间
  2. 将非线程安全的逻辑置于关键段控制器下
  3. 使用线程间通信插件而不是临时CSV文件来保存/传递令牌

我的团队负责人已经通过使用数据库解决了这个问题。现在,我们在数据库中而不是在线程中的csv文件中编写头参数,并在jmeter中使用预处理器从数据库中获取值以更新头属性。

此外,我们正在编写三组数据。线程正在更新最旧的数据,jmeter正在使用预处理器中的order by查询来使用最新的数据。

最新更新