2014-05-23 59 views
0

我想在jython中使用SoapUI API(修改Robot框架的SoapUILibrary),并以某种方式我无法找到设置属性TestStep的任何方法。SoapUI API - 设置TestCase属性

设置项目,全球性和系统性能是很容易使用

SoapUITestCaseRunner.setProjectProperties()

from com.eviware.soapui.tools import (SoapUITestCaseRunner) 
from com.eviware.soapui.tools import (SoapUIMockServiceRunner) 

from robot.api import logger 

class SoapUILibrary2: 
    """ The main class of the library """ 

    ROBOT_LIBRARY_SCOPE = 'TEST CASE' 
    ROBOT_LIBRARY_VERSION = '0.2' 

    def __init__(self): 
     self.__runner = None 
     self.__mockrunner = None 
     self._project_properties = [] 

    def soapui_project(self, prj): 
     """ Initialize the runner and set the project string """ 
     self.__runner = SoapUITestCaseRunner() 
     self.__runner.setProjectFile(prj) 

    def soapui_suite(self, s): 
     """ Set the suite string """ 
     self.__runner.setTestSuite(s) 

    def soapui_case(self, c): 
     """ Set the test case string """ 
     self.__runner.setTestCase(c) 

    def soapui_set_project_property(self, *properties): 
     """ Sets project properties for the current test run. (...) 
     """ 
     for prop in properties: 
      if len(prop.split('=')) == 2: 
       self._project_properties.append(prop) 
      else: 
       logger.warn("Skipping property: '%s'. Properties must be specified as: key=value" % prop) 
     try: 
      self.__runner.setProjectProperties(self._project_properties) 
     except AttributeError: 
      logger.warn('No project set. Cannot set project properties.') 

SoapUITestCaseRunner类不包含任何方式来访问testSteps ...

我发现了一些示例如何在groovy中解决这个问题,然而是否可以使用SoapUI API设置这些属性?

编辑:

添加库的整个代码。它是在机器人框架中导入并用作其关键字。

http://tny.cz/34882261

回答

0

在SOAPUI,您可以定义项目,测试用例和测试包中的属性,它也可能产生一种特殊类型的一步步测试(性能一步步测试),但你不能定义在一个特定的一步步测试的属性(即上SOAP TestStep)。你可以看到更多关于here的信息

但是,你可以在你的testSteps中使用project,testCase或testSuite中的属性,也就是说你可以在项目级别定义一个属性,然后在你的testStep中使用它。我不能给出更具体的信息,因为我不知道你想要达到的目标。

编辑:

我不知道具体的Jython语法,但如果你有项目文件(如我看到你的样品中),您可以通过com.eviware.soapui.impl.wsdl.WsdlProject访问特定的一步步测试,我给你一个Groovy脚本例如:

import com.eviware.soapui.impl.wsdl.WsdlProject; 
import com.eviware.soapui.impl.wsdl.WsdlTestSuite; 
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase; 
import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep 

def prj = new WsdlProject(path_prj_file,null); 
def tsuite = prj.getTestSuiteByName("TestSuiteName"); 
def tcase = tsuite.getTestCaseByName("TestCaseName"); 
def tstep = tcase.getTestStepByName("TestStep"); 

编辑2:

我下载的Jython独立版本2.5.3,并使用soapUI的5.0.0和工作对我来说:

hw.py

from com.eviware.soapui.tools import (SoapUITestCaseRunner) 
from com.eviware.soapui.tools import (SoapUILoadTestRunner) 
from com.eviware.soapui.tools import (SoapUIMockServiceRunner) 

from com.eviware.soapui.impl.wsdl import (WsdlProject) 
from com.eviware.soapui.impl.wsdl import (WsdlTestSuite) 
from com.eviware.soapui.impl.wsdl.testcase import (WsdlTestCase) 
from com.eviware.soapui.impl.wsdl.teststeps import (WsdlTestRequestStep) 

import thread 

class SoapUI2: 
    """ The main class of the library """ 

    ROBOT_LIBRARY_SCOPE = 'TEST CASE' 
    ROBOT_LIBRARY_VERSION = '0.2' 

    def __init__(self): 
     self.__runner = None 
     self.__mockrunner = None 
     self._project_properties = [] 
     self.__prj = WsdlProject('C:\soapui_project.xml', None) 
     self.__tsuite = self.__prj.getTestSuiteByName("myTestSuite") 
     self.__tcase = self.__tsuite.getTestCaseByName("myTestCase") 
     self.__tstep = self.__tcase.getTestStepByName("myTestStep") 
     t = self.__tstep.getPropertyValue("Value") 
     print "Works ok" 


    def soapui_project(self, prj): 
     """ Initialize the runner and set the project string """ 
     self.__runner = SoapUITestCaseRunner() 
     self.__runner.setProjectFile(prj) 

    def soapui_multiproject(self, prj): 
     """ Initialize the runner and set the project string """ 
     self.__runner = SoapUILoadTestRunner()   
     self.__runner.setProjectFile(prj) 

    def soapui_suite(self, s): 
     """ Set the suite string """ 
     self.__runner.setTestSuite(s) 

    def soapui_case(self, c): 
     """ Set the test case string """ 
     self.__runner.setTestCase(c) 

    def soapui_set_project_property(self, *properties): 
     """ Sets project properties for the current test run. 
     This assumes that you have already initialized the project via 
     the `SoapUI Project` keyword. 

     `properies` may contain multiple statements, and each must be specified as: key=value. 

     This is useful to data drive your existing SoapUI tests via property expansion. 
     For more information see: http://www.soapui.org/Scripting-Properties/property-expansion.html 

     Example: 
     | SoapUI Project | My Project | 
     | SoapUI Set Project Property | ServiceEndpoint=https://staging.company.com | # set a single property | 
     | SoapUI Set Project Property | CustomProperty=foo | AnotherProperty=bar | # or set multiple properties | 
     """ 
     for prop in properties: 
      if len(prop.split('=')) == 2: 
       self._project_properties.append(prop) 
      else: 
       logger.warn("Skipping property: '%s'. Properties must be specified as: key=value" % prop) 
     try: 
      self.__runner.setProjectProperties(self._project_properties) 
     except AttributeError: 
      logger.warn('No project set. Cannot set project properties.') 



    def soapui_set_multiproject_threads(self, t): 
     """ Sets number of threads to run in load test """ 
     self.__runner.setThreadCount(long(t)) 
     logger.info("Running with %s threads at once." % t) 

    def soapui_run(self): 
     """ Run the runner and report to Robot """ 
     logger.info("Running with the following project properties set: %s" % self._project_properties) 
     if not self.__runner.run(): 
      raise AssertionError('FAIL: failed to run') 

     if self.__runner == SoapUITestCaseRunner(): 
      n = self.__runner.getFailedTests().size() 
      if n != 0: 
       raise AssertionError('FAIL: ' + str(n) + ' tests failed') 

    def soapui_start_mock_service(self, p, m): 
     """ Runs a mock service """ 
     try: 
      self.__mockrunner = SoapUIMockServiceRunner() 
      self.__mockrunner.setProjectFile(p) 
      self.__mockrunner.setMockService(m) 
      self.__mockrunner.setBlock(False) 
      self.__mockrunner.run() 
     except Exception, e: 
      raise AssertionError('FAIL: Error running the mock service ' + m + '. Reason: ' + str(e)) 

    def soapui_stop_mock_service(self): 
     """ Stops the mock service """ 
     self.__mockrunner.stopAll() 

    def soapui_set_step_property(self, s, p,v): 
     testStep = self.__runner.testCase.getTestStepByName(s) 
     testStep.setPropertyValue(p,v) 


if __name__ == "__main__": 
    SoapUI2().__init__() 

CMD行执行:

java -classpath "jython-standalone-2.5.3.jar;C:\Programari\SoapUI-5.0.0\lib\*;C:\Programari\SoapUI-5.0.0\bin\*" org.python.util.jython hw.py

执行结果:

2014-05-27 12:43:09,058 [main] WARN com.eviware.soapui.SoapUI - Could not find jfxrt.jar. Internal browser will be disabled. 12:43:09,589 WARN [SoapUI] Missing folder [C:\temp\ext] for external libraries 12:43:09,964 INFO [DefaultSoapUICore] initialized soapui-settings from [C:\Documents and Settings\aciffone\soapui-settings.xml] 12:43:09,995 INFO [HttpClientSupport$Helper] Initializing KeyStore 12:43:11,682 INFO [WsdlProject] Loaded project from [file:/C:/soapui_project.xml] Works ok

希望这会他lps,

+0

我需要的是修改属性TestStep中的属性,抱歉有混淆。编辑。 – kebabownik

+0

我更新了我的答案,对不起,但我不知道jython特定的语法,但我给你一个groovy样本,我希望这会帮助你:) – albciff

+0

不幸的是得到了异常。而作为java /编程新手(或不知道SoapUI API足够好)不明白的事情: 'java.lang.ClassCastException:com.eviware.soapui.config.impl.InterfaceConfigImpl不能转换为com.eviware。 soapui.config.WsdlInterfaceConfig' – kebabownik