我有一个从CSV数据集中提取的URL列表,其中变量定义为url,并使用每个${url}作为while循环的计数器。while循环中的条件仅为${url}。我在CSV数据集中设置了以下选项:
文件结束时回收:假在EOF上停止线程:正确
我在while控制器下有一个HTTP请求采样器,它按预期工作,我的20个URL列表将被成功请求,如果我添加另一个线程,它将并行请求相同的URL,没有问题。
但是,将线程组中的循环迭代设置为2,或者将作为while循环父级的循环控制器设置为2,将不会使用户再次请求URL列表。
我希望能理解这里的逻辑,我的目标是能够设置次数/循环,我希望完整的URL列表被请求,还了解如何设置每次相同的时间之间的延迟(或不同的用户/线程)将请求URL。我知道有常量计时器可以添加到循环控制器....但截至目前,它没有“我不控制while控制器运行的次数,我确信这与“在EOF上停止线程”有关,但我需要这样做,这样EOF就不会被设置为所有未来的URL请求,这是我所看到的,也是Apache文档所说的
如果recycle选项为false,并且stopThread为false,则在到达文件结尾时,所有变量都将设置为。可通过设置JMeter属性csvdataset. eofstring来更改此值。
我想我不明白为什么“在EOF时停止线程”会阻止线程组循环迭代再次运行。我假设一个新的循环迭代=创建了一个新线程,但我想它认为这是同一个线程,当那个线程为1时,它完全停止了。
Screenshot of my thread group in the JMeter GUI
- 编辑 *
我能够通过以下代码得到我所期望的行为,尽管我不确定哪种代码对于负载测试来说性能更好。我想确保每隔x秒请求一次每个URL,其中x是1到5秒(取决于我能得到的吞吐量)。
如果这是实现我所希望的目标的最佳方法,那么对于性能来说,什么是最好的呢?
1.使用循环控制器代替while控制器。
1.使用了20个线程,这些线程将从CSV文件中的列表中依次请求20个URL中的每一个
- CSV数据集已在EOF上回收:True并在EOF上停止线程:假共享模式:所有线程
1条答案
按热度按时间btxsgosb1#
如果设置
Stop thread on EOF: True
,则意味着在读取最后一个条目时,线程(虚拟用户)将关闭,不会再进行迭代或执行更多请求。如果您希望运行CSV文件中的所有请求,然后继续,您可以查看在JMeter中使用While控制器文章的阅读all Values from the CSV and Continue一章。
如果您需要在CSV文件到达末尾后再次开始阅读CSV文件,则需要设置
Recycle on EOF: True
和Stop thread on EOF: False
或切换到__CSVRead()函数