Groovy 使用testRunner运行SoapUI测试用例
我正在从事一个SoapUI项目,需要使用TestRunner运行我的测试套件。我正在为环境变量使用外部groovy脚本。我在这里面临的问题是,每当我从测试运行程序运行测试用例时,它的返回工作区都是null,这在外部groovy中使用。因此,在外部groovy中,我将工作区设置为null,从而导致错误[getProjectByname()不能在null上调用]。以下是 使用工作区的全局脚本的构造函数Groovy 使用testRunner运行SoapUI测试用例,groovy,soapui,Groovy,Soapui,我正在从事一个SoapUI项目,需要使用TestRunner运行我的测试套件。我正在为环境变量使用外部groovy脚本。我在这里面临的问题是,每当我从测试运行程序运行测试用例时,它的返回工作区都是null,这在外部groovy中使用。因此,在外部groovy中,我将工作区设置为null,从而导致错误[getProjectByname()不能在null上调用]。以下是 使用工作区的全局脚本的构造函数 AvengerAPITestManager(String TestProject, Str
AvengerAPITestManager(String TestProject, String TestSuite, String TestCase,String TestStep)
{
TestName = "AvengerAPITests";
testProject = SoapUI.getWorkspace().getProjectByName(TestProject);
tSuite = testProject.getTestSuiteByName(TestSuite);
tCase = testProject.getTestSuiteByName(TestSuite).getTestCaseByName(TestCase);
tStepName = TestStep.toString();
tStep=testProject.getTestSuiteByName(TestSuite).getTestCaseByName(TestCase).getTestStepByName (TestStep);
}
上面我们有用户SoapUI.getWorkspace(),它在尝试从SoapUI运行时工作正常,但当我尝试从testrunner运行时,SoapUI.getWorkspace结果为空。我甚至试着传递工作区,就像传递testproject名称一样,但它仍然不起作用
我也尝试过类似的方法
AvengerAPITestManager(Object workspace,String TestProject, String TestSuite, String TestCase, String TestStep)
{
TestName = "AvengerAPITests";
testProject = workspace.getProjectByName(TestProject);
tSuite = testProject.getTestSuiteByName(TestSuite);
tCase = testProject.getTestSuiteByName(TestSuite).getTestCaseByName(TestCase);
tStepName = TestStep.toString();
tStep = testProject.getTestSuiteByName(TestSuite).getTestCaseByName(TestCase).getTestStepByName(TestStep);
}
在上面的代码中,当我传递Testcase名称时,我尝试从测试用例中传递Workspace对象,但工作空间仍然为null。请告诉我如何处理此问题。如果您希望在外部代码中使用soap ui,请尝试直接使用特定的项目文件创建新的测试运行程序:
SoapUITestCaseRunner runner = new SoapUITestCaseRunner();
runner.setProjectFile( "src/dist/sample-soapui-project.xml" );
runner.run();
或者,如果您想更精确地定义测试执行,可以使用如下内容:
WsdlProject project = new WsdlProject( "src/dist/sample-soapui-project.xml" );
TestSuite testSuite = project.getTestSuiteByName( "Test Suite" );
TestCase testCase = testSuite.getTestCaseByName( "Test Conversions" );
// create empty properties and run synchronously
TestRunner runner = testCase.run( new PropertiesMap(), false );
PS:别忘了导入soap ui类,这些类在代码中使用,并将它们放在类路径中
PPS:如果您只需要在soap ui之外运行测试用例和/或自动化这个过程,为什么不使用testrunner.sh/.bat来完成同样的任务呢?(以下是这种方式的描述:)如果您想在外部代码中使用soap ui,请尝试直接使用特定的项目文件创建新的测试运行程序:
SoapUITestCaseRunner runner = new SoapUITestCaseRunner();
runner.setProjectFile( "src/dist/sample-soapui-project.xml" );
runner.run();
或者,如果您想更精确地定义测试执行,可以使用如下内容:
WsdlProject project = new WsdlProject( "src/dist/sample-soapui-project.xml" );
TestSuite testSuite = project.getTestSuiteByName( "Test Suite" );
TestCase testCase = testSuite.getTestCaseByName( "Test Conversions" );
// create empty properties and run synchronously
TestRunner runner = testCase.run( new PropertiesMap(), false );
PS:别忘了导入soap ui类,这些类在代码中使用,并将它们放在类路径中
PPS:如果您只需要在soap ui之外运行测试用例和/或自动化这个过程,为什么不使用testrunner.sh/.bat来完成同样的任务呢?(这里是对这种方式的描述:)这里是一个有用的工作示例
您应该将您的
示例soapui project.xml
放在/src/test/resources
文件夹中,该文件夹将向类路径公开它
您应该将您的
示例soapui project.xml
放在/src/test/resources
文件夹中,该文件夹将向类路径公开它我不确定这是否有助于任何人,但以下是我所做的工作,以修复我在工作区中遇到的问题,该问题为null导致错误[getProjectByname()无法在null上调用]当我从cmd运行时
试试这个:
import com.eviware.soapui.model.project.ProjectFactoryRegistry
import com.eviware.soapui.impl.wsdl.WsdlProjectFactory
import com.eviware.soapui.impl.wsdl.WsdlProject
//get the Util project
def project = null
def workspace = testRunner.testCase.testSuite.project.getWorkspace();
//if running Soapui
if (workspace != null) {
project = workspace.getProjectByName("Your Project")
}
//if running in Jenkins/Hudson
else{
project = new WsdlProject("C:\\...\\....\\....\\-soapui-project.xml");
}
if (project.open && project.name == "Your Project") {
def properties = new com.eviware.soapui.support.types.StringToObjectMap()
def testCase = project.getTestSuiteByName("TestSuite 1").getTestCaseByName("TestCase");
if(testCase == null)
{
throw new RuntimeException("Could not locate testcase 'TestCase'! ");
} else {
// This will run everything in the selected project
runner = testCase.run(new com.eviware.soapui.support.types.StringToObjectMap(), false)
}
}
else {
throw new RuntimeException("Could not find project ' Order Id....' !")
}
上面的代码将运行所选项目中的所有内容。我不确定这是否有助于其他人,但以下是我所做的工作,以解决我在从cmd运行时工作区为null时出现的问题,该问题导致错误[getProjectByname()无法在null上调用] 试试这个:
import com.eviware.soapui.model.project.ProjectFactoryRegistry
import com.eviware.soapui.impl.wsdl.WsdlProjectFactory
import com.eviware.soapui.impl.wsdl.WsdlProject
//get the Util project
def project = null
def workspace = testRunner.testCase.testSuite.project.getWorkspace();
//if running Soapui
if (workspace != null) {
project = workspace.getProjectByName("Your Project")
}
//if running in Jenkins/Hudson
else{
project = new WsdlProject("C:\\...\\....\\....\\-soapui-project.xml");
}
if (project.open && project.name == "Your Project") {
def properties = new com.eviware.soapui.support.types.StringToObjectMap()
def testCase = project.getTestSuiteByName("TestSuite 1").getTestCaseByName("TestCase");
if(testCase == null)
{
throw new RuntimeException("Could not locate testcase 'TestCase'! ");
} else {
// This will run everything in the selected project
runner = testCase.run(new com.eviware.soapui.support.types.StringToObjectMap(), false)
}
}
else {
throw new RuntimeException("Could not find project ' Order Id....' !")
}
上面的代码将运行所选项目中的所有内容。请有人给我这个问题的解决方案,它的imp…。您的全局脚本在哪里?当您说它不是从TestRunner运行时,您如何使用它?我对SoapUI测试运行程序和您所指的测试运行程序有点困惑。你能把重点放在清除我的灰色地带吗?请有人给我这个问题的解决方案它的重要性…你在哪里有全局脚本?当您说它不是从TestRunner运行时,您如何使用它?我对SoapUI测试运行程序和您所指的测试运行程序有点困惑。你能把重点放在清除我的灰色地带吗?请通读以下内容:请通读以下内容: