【问题标题】:Transfer Property ids (Array) to other TestCases in SoapUI/Groovy将属性 ID(数组)传输到 SoapUI/Groovy 中的其他测试用例
【发布时间】:2018-02-28 02:52:25
【问题描述】:

我有一个 API 来获取 ID、名称、数据等列表(TestCase 名称 GET-APIs_OrderdByID_ASC

我想将这些 ID 转移到同一 TestSuite 或其他 TestSuite 中的其他以下 TestCases。

在 SOAPUI 中,Property Transfer 在同一 TestCase 中的 TestSteps 中工作。 (使用开源版本)。我需要在不同的 TestCases / TestSuites 之间转移属性值。

下面是我可以从一个 testCase 中提取 ids 的代码,以及我想要转移的 testCases/testSteps 的名称。

import com.eviware.soapui.impl.wsdl.teststeps.*
import com.eviware.soapui.support.types.StringToStringMap 
import groovy.json.*

def project = context.testCase.testSuite.project
def TestSuite = project.getTestSuiteByName("APIs")
def TestCase =  TestSuite.getTestCaseList() 
def TestStep = TestCase.testStepList
def request =  testRunner.testCase.getTestStepByName("List_of_APIs_OrderByID_ASC")
def response = request.getPropertyValue("Response")
def JsonSlurperResponse = new JsonSlurper().parseText(response)
def Steps = TestStep.drop(3)
log.info JsonSlurperResponse.data.id   
def id = JsonSlurperResponse.data.id

Steps.each {
    it.getAt(0).setPropertyValue("apiId", id.toString())   
    log.info it.getAt(0).name       
}

如果我运行上面的代码,id [1, 2, 10, 11, 12, 13, 14, 15, 16, 17, 18] 的所有数组值都设置为以下每个 testSteps

我看了一些其他的 SO 问题

谁能帮帮我。 :-)

【问题讨论】:

  • 每个soapui测试用例都是独立的。你不能传递一些这样的值。您可以使用测试用例 GET-APIs_OrderdByID_ASC 中的数据接收器来管理此案例,或者如果您使用免费版本,则只需将您的属性写入文件。然后在您的第二个测试用例中,您调用此属性文件(专业版的数据源或免费读取 groovy 中的文件)并为每个值创建一个循环。
  • @Lerminou 是的,我可以将这些 id 写入外部文件并从那里取回 id 到 setPropertyValue。但我不想使用任何外部文件来存储这些值。它面临 2 个问题 - 提供绝对路径,当我将它放在服务器中进行回归时使用它很忙,当它有大量数据时,写入文件和再次读取非常耗时。
  • 您可以使用相对路径与context.expand('${projectDir}') 这是您的项目目录。

标签: arrays json dictionary groovy soapui


【解决方案1】:

我已经按照 Leminou 的建议对数据接收器做了一些事情。

Datasinks 是一个很好的解决方案。在测试 A 中,创建一个数据接收器步骤以持久保存感兴趣的值。然后在target step中,使用data source step,链接到之前datasink生成的文件。

数据接收器可以配置为在每次测试后追加或重新开始。

如果您正在努力梳理数据接收器的值,请创建一个返回所需单个值的 groovy 步骤,然后在数据接收器步骤中调用 groovy。

听起来有点复杂,但确实有效。

【讨论】:

    【解决方案2】:

    您可以使用项目级属性或 testSuiteLevel 属性或 testCase 属性。

    通过这种方式,您可以实现与从属性转移步骤中获得的相同结果,但采用不同的方式。

    在源测试用例中编写一个 groovy 步骤到 setProperty(保存您以后要使用的值)

    testRunner.testCase.setPropertyValue("TCaseProp", "TestCase")
    testRunner.testCase.testSuite.setPropertyValue("TSuiteProp","TestSuite") 
    

    testRunner.testCase.testSuite.project.setPropertyValue("ProjectLevel","ProjectLevelProperty")

    “TCaseProp”是属性的名称。你可以给任何名字 “TestCase”是您要存储的值。您可以提取此值并使用变量 例如

    def val="9000"
    testRunner.testCase.setPropertyValue("TCaseProp", val)
    

    您可以在同一套件的其他情况下使用该属性。如果您想在不同的套件中使用,您可以定义项目级属性

    在目标测试用例请求中使用以下语法

    ${#Project#ProjectLevel}
    ${#TestCase#TCaseProp}
    ${#TestSuite#TCaseProp}
    
    <convertCurrency>${#TestSuite#TCaseProp}</ssp:SystemUsername>
    

    系统会自动替换上述请求中的属性值

    https://www.soapui.org/scripting-properties/tips-tricks.html

    【讨论】:

      【解决方案3】:

      以下脚本有效。 只是为了改变

      Steps.each { s ->
         id.each { i ->
           s.getAt(0).setPropertyValue("apiId", i.toString())            
        }
      }
      

      这里的idArrayList 类型。所以我们可以遍历List

      PS:我们可以使用for循环来做同样的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        • 2014-11-19
        相关资源
        最近更新 更多