SoapUI:将属性值传递给调用的测试用例

时间:2014-09-02 22:14:33

标签: groovy soapui

我是soapui测试的初学者。希望你能帮助我解决这个问题。

在我的测试项目中,我有一个包含多个测试用例的测试套件。多个测试用例将启动相同的测试用例。要运行此测试用例,我需要将一些属性值传输到此测试用例。

我试图以两种方式实现这一目标。但我两次失败了。

  1. 我试图调用测试用例并在测试用例中设置所需的属性。我从Groovy脚本开始测试用例。但我找不到一个很好的例子如何在被调用的测试用例中设置属性。

  2. 我试图在被调用的测试用例中获取调用父测试用例的属性值。看起来调用测试用例的父测试用例在运行测试用例的上下文中不可用。

  3. 将调用相同测试用例的测试用例将并行运行。因此,我认为首先设置属性值然后启动测试用例不是解决方案,因为它们将被同时运行的其他测试用例覆盖。由于并行运行测试用例,因此对这些值使用测试套件属性也不起作用。

    我的测试项目看起来像这样。

    MyProject
        TestSuite_APLtests
          TestCase_user_01
          Properties test step
          Run_test <groovy script>
          Step_01
          …..
        TestCase_user_02
          Properties test step
          Run_test <groovy script>
          Step_01
          …..
        TestCase_General
          Properties test step
          POST sessions
          Step_01
          …..
    

    每个'TestCase_user_'的'属性测试步骤'包含测试用例'TestCase_General'中所需的用户和密码,并且对于每个测试用例都是不同的。 在每个'TestCase_user_'的'Run_test'groovy脚本中,使用以下命令启动测试用例'TestCase_General':

    def myTestSuite = testRunner.testCase.testSuite.project.getTestSuiteByName("TestSuite_APLtests")
    def myTestCase = myTestSuite.getTestCaseByName("TestCase_General")
    myTestCase.run(null, false)
    

    如何将属性用户和密码添加到启动测试用例的运行注释中?

    如果我尝试在测试用例'TestCase_General'中使用groovy脚本获取属性值,我不知道如何确定哪个测试用例称为'TestCase_General'。我在互联网上发现了一些帖子,建议使用:context.getProperty("#CallingRunTestCaseStep#")来确定调用测试用例。但是这个值是null。当我尝试通过使用:context.hasProperty("#CallingRunTestCaseStep#")检查调用测试用例是否在上下文中可用时,这是错误的,因此这不能用于查找调用测试用例。

    有人能告诉我解决这个问题的方法是什么。

    谢谢,

1 个答案:

答案 0 :(得分:3)

您可以使用setPropertyValue(name,value)方法从groovy脚本设置测试用例属性,但是如果您并行运行测试用例,则会为每个调用TestCase_General的测试用例覆盖您所说的属性。因此,您可以通过WsdlTestCase.java类中的setPropertyValue方法传递context属性,而不是使用run(StringToObjectMap properties, boolean async)。您调用TestCase_General的常规代码可能是:

import com.eviware.soapui.support.types.StringToObjectMap

// get test suite
def myTestSuite = testRunner.testCase.testSuite.project.getTestSuiteByName("TestSuite_APLtests")
// get your test case
def myTestCase = myTestSuite.getTestCaseByName("TestCase_General")
// set the user and password properties in the context
context.setProperty("user","userTestCaseN")
context.setProperty("password","passwordTestCaseN")
// run the testCase passing the context
def contextMap = new StringToObjectMap( context )
myTestCase.run(contextMap,false);

要访问context的groovy脚本中的TestCase_General属性,请使用此代码:

context.getProperty("userPassword")

或者如果您更喜欢使用context.expand

context.expand('${#user}')

请注意,使用#取决于您访问属性的方式。

如果您还需要在context的SOAP测试请求中使用TestCase_General属性,请使用${#propetryName},即:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
   <Header/>
   <Body>
    <request>
        <user>${#user}</user>
    </request>
   </Body>
</Envelope>

希望这有帮助,