当前位置: 首页 > 知识库问答 >
问题:

使用testRunner运行SoapUI测试用例

唐焕
2023-03-14

我正在做一个SoapUI项目,我需要使用测试运行器运行我的测试套件。我正在为环境变量使用外部groovy脚本。我在这里面临的问题是,每当我从测试运行程序运行测试用例时,它的返回工作空间为空,这在Externalgroovy中使用。所以在外部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);
   }

在上面的代码中,我尝试从测试用例传递Workspace对象,因为我传递了TestCase名称,但我仍然得到工作区的null。请告诉我如何处理这个问题。

共有3个答案

沈英勋
2023-03-14

我不确定这是否会帮助任何人,但这是我为解决我在工作区中遇到的问题所做的工作,因为 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....' !")

}

上面的代码将运行所选项目中的所有内容。

汪泓
2023-03-14

如果您想在外部代码中使用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:如果您只需要在sob用户界面之外运行测试用例和/或自动化这个过程,为什么不使用testrunner.sh/.bat来做同样的事情呢?(这里是这种方式的描述:http://www.soapui.org/Test-Automation/functional-tests.html)

姚韬
2023-03-14

这是https://github.com/stokito/soapui-junit一个有用例子

您应该将sample-soapui-project.xml放在/src/test/资源文件夹中,该文件夹将向类路径公开它

 类似资料:
  • 它在Jenkins slave上工作得很好,但我想为SOAPUI测试用例添加另一个Jenkins slave。但是相同的windows批处理命令在新机器上不起作用。 我在机器上的Jenkins控制台输出中得到以下消息: 我需要在那台机器上设置什么才能使它工作吗? 最后一次编辑:在我们公司,我们有有限的用户帐户。所以我不得不把这个任务交给管理员。他在奴隶身上设置了一些东西,现在对两个奴隶都起同样的作

  • 当我使用“Launch TestRunner”在我的项目中运行所有测试时,我在SoapUI中更新项目属性时遇到了一些问题。 我有两个带有测试的测试套件。所有测试用例都有第一步-Groovy脚本。这个脚本在所有测试用例中都是一样的: 我有一个项目属性:“IdAndKey”和“bool”。当我运行单个测试用例时 - 这个项目属性正在更新,但是当我运行所有测试时,它们没有更新(我只在日志中看到更新,而不

  • 我正在使用SoapUI Pro。SoapUI网站表示,我应该能够在测试执行期间的任何时候设置上下文变量并获取这些值。在帮助中,它说: 常见的使用方案是通过将相应的计数器和集合保存到上下文并使用它们根据需要控制流来循环或跟踪进度。 如果我使用现成的“运行测试用例”测试步骤,我无法让它工作。被调用的测试似乎没有传递上下文信息。 这是一个非常基本的例子。在我最初的测试中,我放了一些Groovy脚本,上面

  • Groovy测试步骤,用于设置WS特定属性并从testwsscript-soapui-project.xml调用通用脚本 请求测试步骤调用webservice并执行断言 正在结束Groovy测试步骤。 这可以在SoapUI中运行,但我希望从Windows命令行(用于自动化目的的批处理文件)运行测试。这里我遇到了一个问题:当从命令行调用testrunner时 它不会用所有的SoapUi项目加载整个工

  • 使用 Windows 7 和 Soap 5.2.0 免费软件。 我也在Smart Bear社区询问过这一点,他们只给了我推荐阅读的帖子。这些帖子与这个问题无关。 我有一个 REST 项目,它有一个测试套件和一个包含两个测试步骤的测试用例。第一步是一个时髦的步骤,带有一个时髦的脚本,它调用第二个测试步骤。第二个测试步骤是 REST GET 请求,该请求将字符串发送到我们的 API 服务器,并以 JS

  • 我正在尝试使用SoapUI(5.0.0 beta)来测试RESTful Web服务,该服务会对提供的回调URL发出异步响应。 到目前为止,我能够调用该服务并确认收到的初始同步响应。我还创建了一个“REST MockService”,它对从服务器收到的回调发出适当的响应,并在初始请求中为此提供endpoint作为回调 URL。 我现在正在努力创建一个测试用例,将两者联系在一起,这样我就可以在继续我的