我有两个http调用如下:
第一个是POST
调用,它返回一个id并将其写入文件。在第二个GET
调用中,从文件中读取写入的ID并进行处理。
但是当我运行以下内容时,它表示该文件应该存在且可读。所以我猜测文件读取是在写文件之前或与写文件一起发生的。
有没有办法让读取文件在尝试读取之前等待?或者如何在它们之间添加计时器?
这是我得到的例外:
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]
答案 0 :(得分:1)
根据JMeter Documentation CSV数据集配置正在执行之前,您将任何内容写入文件:
配置元素
预处理器
计时器
取样
后处理器(除非SampleResult为空)
断言(除非SampleResult为空)
- 醇>
监听器(除非SampleResult为空)
因此,您将无法使用CSV数据集配置实现您尝试实现的目标,请考虑使用CSVRead() function。函数可以放在脚本中的任何位置,并且它们会在找到它们的位置/时确切地处理,希望文件将在那时存在。请参阅Apache JMeter Functions - An Introduction以了解有关JMeter Functions概念的更多信息。
另请注意,将临时数据存储在文件中效率极低,导致磁盘IO过高且可能race conditions,因此我建议避免使用此步骤并使用内存中的JMeter变量。