2014-05-23 86 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