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

SoapUI API - 设置 TestCase 属性

龙珂
2023-03-14

我正在尝试在jython中使用SoapUIAPI(为Robot Framework修改SoapUILibrary),但不知为何,我无法找到任何方法来设置property TestStep的属性。

设置项目、全局和系统属性很容易使用

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

共有1个答案

秦昊穹
2023-03-14

在SOAPUI中,您可以为项目、测试案例和测试套件定义属性,也可以生成特殊类型的测试步骤(属性测试步骤),但您不能在特定的测试步骤(即SOAP测试步骤)上定义属性。您可以在此处查看更多信息

但是,您可以在testSteps中使用项目,testCase或testSuite中的属性,以便您可以在项目级别定义属性,然后在testStep中使用它。我无法提供更具体的信息,因为我不知道您要实现的目标。

编辑:

我不知道具体的jython语法,但如果您有项目文件(正如我在您的示例中看到的),您可以通过< code > com . EVI ware . soap ui . impl . wsdl . wsdl project 访问特定的testStep,我给你一个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 并为我工作:

硬件. 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硬件.py

执行结果:

2014-05-27 12:43:09,058[main]WARNcom.eviware.soapui.SoapUI-找不到jfxrt.jar.内部浏览器将被禁用。12:43:09,589 WARN[SoapUI]缺少用于外部库的文件夹[C:\temp\ext] 12:43:09,964 INFO[默认SoapUICore]从[C:\文档和设置\aciffone\soapui-settings.xml] 12:43:09,995 INFO[HttpClient支持$Helper]初始化KeyStore 12:43:11,682 INFO[WsdlProject]从[file:/C:/soapui_project.xml]加载的项目正常

希望这有帮助,

 类似资料:
  • 主要内容:Jsoup 设置属性 语法,Jsoup 设置属性 说明,Jsoup 设置属性 示例以下示例将展示在将 HTML 字符串解析为 Document 对象后使用方法设置 dom 元素的属性、批量更新和添加/删除类方法。 Jsoup 设置属性 语法 document : 文档对象代表 HTML DOM。 Jsoup : 解析给定 HTML 字符串的主类。 html : HTML 字符串。 link : 元素对象表示表示锚标记的 html 节点元素。 link.attr() : attr

  • 可查看或修改模型属性,例如,设置自定义 ID,修改模型名称、尺寸、位置等。 不同类型模型的属性设置不同,如建筑、门窗、墙等。另外,在人物/动物/植物模型属性中,设有播放动画属性。 传送点设置 编辑场景时,可以通过模型的自定义属性设置传送点。在预览场景时,第一人称行走模式下,当行走到传送点的位置时,会传送到配置的地点。 在自定义属性中添加传送属性 _Portal_,参数配置为要传送目标物体的自定义

  • 当我使用提供的Apache SOLR启动脚本(版本6.6.0)时,该脚本会创建并执行一个java命令行,该命令行具有两组SSL属性,它们的相关元素设置为相同的值。一组具有等名称,而另一组具有等名称。例如: 我们的安全团队不允许在命令行或环境变量中传递密码,但允许将它们放置在文件中,前提是该文件具有受限访问权限。我注意到在目录中有一个文件,可用于为所有属性提供默认值,包括。当我从java命令行中删除

  • 问题内容: 我有一个具有许多可设置/可获取的属性的类。我想使用 反射 来设置这些属性,但是我对实现有两个问题 这是我班上的一些简化代码 然后,我像这样设置各个字段: 这有效(即,当我调用set_attribute时设置实例变量。 但是,它们仅在实例变量被声明为public时起作用。当它们被声明为私有时,我得到一个 NoSuchFieldException 问题1: 当字段为私有时,为什么会出现该错

  • 问题 在你解析一个Document之后可能想修改其中的某些属性值,然后再保存到磁盘或都输出到前台页面。 方法 可以使用属性设置方法Element.attr(String key, String value), 和Elements.attr(String key, String value). 假如你需要修改一个元素的class 属性,可以使用Element.addClass(String clas

  • 下面的示例将展示使用方法设置dom元素的属性,批量更新以及在将HTML String解析为Document对象后添加/删除类方法。 语法 (Syntax) Document document = Jsoup.parse(html); Element link = document.select("a").first(); link.attr("href","www.yahoo.c