Groovy 使用testRunner运行SoapUI测试用例

Groovy 使用testRunner运行SoapUI测试用例,groovy,soapui,Groovy,Soapui,我正在从事一个SoapUI项目,需要使用TestRunner运行我的测试套件。我正在为环境变量使用外部groovy脚本。我在这里面临的问题是,每当我从测试运行程序运行测试用例时,它的返回工作区都是null,这在外部groovy中使用。因此,在外部groovy中,我将工作区设置为null,从而导致错误[getProjectByname()不能在null上调用]。以下是 使用工作区的全局脚本的构造函数 AvengerAPITestManager(String TestProject, Str

我正在从事一个SoapUI项目,需要使用TestRunner运行我的测试套件。我正在为环境变量使用外部groovy脚本。我在这里面临的问题是,每当我从测试运行程序运行测试用例时,它的返回工作区都是null,这在外部groovy中使用。因此,在外部groovy中,我将工作区设置为null,从而导致错误[getProjectByname()不能在null上调用]。以下是

使用工作区的全局脚本的构造函数

    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测试运行程序和您所指的测试运行程序有点困惑。你能把重点放在清除我的灰色地带吗?请通读以下内容:请通读以下内容: