我已经在SoapUI Open Source中准备了一个测试用例,它循环遍历csv文件中的值,并为每组值发送请求(由groovy脚本处理)。我想修改它,以便每个新迭代的每个线程使用来自csv文件的下一行的值。
import com.eviware.soapui.impl.wsdl.teststeps.*
def testDataSet = []
def fileName = "C:\\sSHhrTqA5OH55qy.csv"
new File(fileName).eachLine { line -> testDataSet.add( line.split(",") ) }
def myProps = new java.util.Properties();
myProps = testRunner.testCase.getTestStepByName("Properties");
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context );
def testCase = testRunner.testCase;
def testStep = testCase.getTestStepByName("TestRequest");
testRunner = new com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner(testCase, null);
testStepContext = new com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext(testStep);
while (true) {
for ( i in testDataSet ) {
myProps.setPropertyValue("parameter0",i[0]);
myProps.setPropertyValue("username",i[1]);
myProps.setPropertyValue("parameter1",i[2]);
myProps.setPropertyValue("password",i[3]);
testStep.getTestRequest().setUsername(myProps.getPropertyValue("username"))
testStep.getTestRequest().setPassword(myProps.getPropertyValue("password"))
testStep.run(testRunner, testStepContext);
}
}
我想修改此脚本,以便池中的每个线程从数据源中获取唯一(下一个)未使用的值
我尝试使用java.util.concurrent中的newFixedThreadPool,如此处所建议的那样(Concurrency with Groovy),但是我无法让它工作 - 请求是重复的还是SoapUI崩溃(我是并发的新手)。
你能帮我帮忙吗?
答案 0 :(得分:1)
我认为这对你有用:
while (true) {
for ( i in testDataSet ) {
def th = Thread.start(){
myProps.setPropertyValue("parameter0",i[0]);
myProps.setPropertyValue("username",i[1]);
myProps.setPropertyValue("parameter1",i[2]);
myProps.setPropertyValue("password",i[3]);
testStep.getTestRequest().setUsername(myProps.getPropertyValue("username"))
testStep.getTestRequest().setPassword(myProps.getPropertyValue("password"))
testStep.run(testRunner, testStepContext);
}
th.join()
}
因此,将在每个循环上创建新线程。
如果您想测试它是否正常工作,您可以将loginfo(s)放在代码中......
log.info("Thread Id: " + Thread.currentThread().getId() as String)
答案 1 :(得分:0)
我不明白你的意思。 SoapUi已经为您提供了一个数据源测试步骤,它接受一个csv文件作为输入。
因此,一旦拥有了所有这些值,就可以传输属性并运行测试。