groovy Jmeter写入CSV未按预期工作,数据在高并发和多线程下写入同一行(同一秒)

vqlkdk9b  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(162)

我想写自定义动态值捕获使用后处理器从API响应到一个csv文件。我使用下面的JSR223 groovy脚本相同。

def result = props.get("result_file");
result << new Date().format('yyyy/MM/dd HH:mm:ss.SSS')
result << ","
result << vars.get("c_TransactionID")
result << ","
result << vars.get("c_TransactionName")
result << ","
result << System.getProperty('line.separator')

我在高并发和多线程的情况下遇到了一个问题。两个或多个线程试图同时写入一个文件。当这种情况发生时,事务记录如下:

2023/01/21 00:21:33.677,d60e4b6e-222e-42c6-bab0-12a821727ccb,Trans_Demo1,
2023/01/21 00:21:34.0702023/01/21 00:21:34.070,,9473f9b1-238c-42e4-a529-179e591e2e408c6d331c-ee2d-4488-b13e-b8e27b3927ae,,Trans_Demo1Trans_Demo1,,

2023/01/21 00:21:34.288,6a9c9987-f64d-43aa-a01f-769691b8ab5e,Trans_Demo1,

有时候它也会这样写:

2023/01/21 00:22:17.305,2e870fcf-fa2c-4d55-aee9-ad3a8c6cc802,Trans_Demo12023/01/21 00:22:17.305,,
8e11d235-2f8d-4065-9afe-4b8812101c06,Trans_Demo1,
2023/01/21 00:22:17.353,6d8a9e36-aa2c-417a-806b-79798fb75702,Trans_Demo1,

我们怎样才能防止这种情况发生呢?我们可以在向CSV写入数据时对脚本做些什么吗?还有其他的想法吗?非常感谢这方面的帮助。谢谢

2ekbmq32

2ekbmq321#

这是典型的race condition,假设后处理器如何工作,它不能很容易地解决。
我建议将c_TransactionIDc_TransactionName和时间戳声明为示例变量,并切换到Flexible File Writer侦听器。

相关问题