我有一个情况,只需要调用一次特定的API来初始化。此后线程可以调用其他方法。 在vuser_init.c,我有这样的:我可以将Loadrunner Vuser初始化为单例吗?
static volatile int initOnlyOnce = 0;
static volatile int initComplete = 0;
int iStatus;
if (1!=initOnlyOnce) {
initOnlyOnce =1;
lr_output_message("Before, initComplete = %d", initComplete);
iStatus = Initialize(); // product API call
initComplete = 1;
lr_output_message("After, initComplete = %d", initComplete);
if (1 != iStatus) {
lr_error_message("Initialize returns %d on %s.",iStatus,szLoadGenerator);
srand(time(NULL));
}
}
当我运行的情况下,第一个线程打印两种,即随后
After, initComplete = 1
,其余的
Before, initComplete = 0
测试在该线程中正确完成。然而,下一个线程失败,“错误 - 存储器违反:异常ACCESS_VIOLATION接收到的”,因为它已被执行,而不完成初始化随后的方法或initComplete为0 其他每个线程的登录有“之前,initComplete = 0“作为最后一行。既然我已经定义了这些变量作为静态挥发,我预计第一线程中调用它,之后
initOnlyOnce = 1
右随后的代码块不会再次进入。但是,似乎Vugen不是一个线程。每个vuser_init.c独立于正在运行的其他Vugens,所以尽管变量被声明为静态易失性,但状态并不共享。
是否有解决方法?我基本上想要一个vuser_init的单身前兆。
感谢您的提示。我确实创建了2个组,并将它们添加到控制器上的场景中。对于初始化,我分配了1%的用户(100个中的1个),其余的用于实际运行。当我以这种方式运行时,第二组中出现了一些关于某些功能缺失的错误,令人费解。但是,智能LR能够先运行我的init组,然后运行下一个? – Jai 2013-03-19 22:36:31
您可以在vuser init之前添加自己的init。此外,您可以添加逻辑,仅基于虚拟用户号码为一个用户运行此操作。 – 2013-03-20 13:03:54