按顺序在`ThreadGroup`中运行HTTP调用

时间:2018-04-23 10:08:16

标签: jmeter

我有两个http调用如下:

第一个是POST调用,它返回一个id并将其写入文件。在第二个GET调用中,从文件中读取写入的ID并进行处理。

但是当我运行以下内容时,它表示该文件应该存在且可读。所以我猜测文件读取是在写文件之前或与写文件一起发生的。

有没有办法让读取文件在尝试读取之前等待?或者如何在它们之间添加计时器?

enter image description here

这是我得到的例外:

2018-04-23 15:37:00,028 ERROR o.a.j.t.JMeterThread: Test failed!
java.lang.IllegalArgumentException: File scenario1_accountreq.csv must exist and be readable
    at org.apache.jmeter.services.FileServer.createBufferedReader(FileServer.java:430) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.services.FileServer.readLine(FileServer.java:346) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.config.CSVDataSet.iterationStart(CSVDataSet.java:203) ~[ApacheJMeter_components.jar:3.2 r1790748]
    at org.apache.jmeter.control.GenericController.fireIterationStart(GenericController.java:393) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.control.GenericController.fireIterEvents(GenericController.java:385) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.control.GenericController.next(GenericController.java:158) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.control.LoopController.next(LoopController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.threads.AbstractThreadGroup.next(AbstractThreadGroup.java:87) ~[ApacheJMeter_core.jar:3.2 r1790748]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:252) [ApacheJMeter_core.jar:3.2 r1790748]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]

1 个答案:

答案 0 :(得分:1)

根据JMeter Documentation CSV数据集配置正在执行之前,您将任何内容写入文件:

  
      
  1. 配置元素

  2.   
  3. 预处理器

  4.   
  5. 计时器

  6.   
  7. 取样

  8.   
  9. 后处理器(除非SampleResult为空)

  10.   
  11. 断言(除非SampleResult为空)

  12.   
  13. 监听器(除非SampleResult为空)

  14.   

因此,您将无法使用CSV数据集配置实现您尝试实现的目标,请考虑使用CSVRead() function。函数可以放在脚本中的任何位置,并且它们会在找到它们的位置/时确切地处理,希望文件将在那时存在。请参阅Apache JMeter Functions - An Introduction以了解有关JMeter Functions概念的更多信息。

另请注意,将临时数据存储在文件中效率极低,导致磁盘IO过高且可能race conditions,因此我建议避免使用此步骤并使用内存中的JMeter变量。