Java SoapuUI.setSoapUICore导致Junit线程结束
我有一个Maven/Junit测试项目,我正在并发模式下运行。每个测试用例使用SoapUI API调用一个web服务:Java SoapuUI.setSoapUICore导致Junit线程结束,java,multithreading,soapui,junit5,junit-jupiter,Java,Multithreading,Soapui,Junit5,Junit Jupiter,我有一个Maven/Junit测试项目,我正在并发模式下运行。每个测试用例使用SoapUI API调用一个web服务: public void makeWebServiceCall(字符串testCaseName){ SoapUI.setSoapUICore(新标准soapuicore(真实)); WsdlProject=newwsdlproject(“mySoapUiProject.xml”); WsdlTestSuite testSuite=project.getTestSuiteByNam
public void makeWebServiceCall(字符串testCaseName){
SoapUI.setSoapUICore(新标准soapuicore(真实));
WsdlProject=newwsdlproject(“mySoapUiProject.xml”);
WsdlTestSuite testSuite=project.getTestSuiteByName(“myTestSuite”);
WsdlTestCase testCase=testSuite.getTestCaseByName(testCaseName);
WsdlTestCaseRunner testCaseRunner=testCase.run(新属性映射(),false);
...
}
经过多次调试,我发现
SoapUI.setSoapUICore( new StandaloneSoapUICore(true) );
通常会导致Junit线程结束调用,测试用例的其余部分由后面的线程完成。当这种情况发生时,原始线程的资源不会被正确释放,而完成代码的后一个线程会对每个中断的线程按顺序释放,因此并发执行的好处就失去了
我还没有找到关于这个SoapUI.setSoapUICore方法的功能以及它可能导致Junit线程退出的原因的任何文档。我猜这可能是一个资源锁定问题,因为setSoapUICore是一个静态方法。但是我尝试了同步soapUI代码,这样一次只有一个线程可以执行它,而问题仍然存在
因此,我将调用放在类的静态初始值设定项块中,以便只调用一次:
静态{
SoapUI.setSoapUICore(新标准soapuicore(真实));
}
这似乎解决了这个问题,但我想知道这个方法在做什么,可能导致Junit线程终止,因此,如果上面的“修复”确实是一个可行的解决方案
我正在使用以下资源:
- Maven 3.6.1
- Maven Surefire 3.0.0-M4
- Junit Jupiter 5.7.0-M1
- Java 13.0.1
- SOAPUI5.5.0