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

将属性id(数组)转移到SoapUI/Groovy中的其他测试用例

芮岳
2023-03-14

我有一个API来获取ID、名称、数据等的列表(TestCase nameget-API\u OrderdByID\u ASC)

我想将这些ID传输到同一TestSuite或其他TestSuite中的其他后续TestCase。

在SOAPUI中,Property Transfer在同一个TestCase的TestSteps中工作。(使用OpenSource版本)。我需要在不同的TestCase/TestSuites之间传输属性值。

下面是我可以从一个测试用例中提取id的代码,以及我想要传输的测试用例/测试步骤的名称。

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的所有数组值都设置为以下测试步骤

我看了一些其他的SO问题

  • 使用groovy脚本在SOAPUI中传输属性

有人能帮我吗?:-)


共有3个答案

松昱
2023-03-14

下面的脚本很有效。只是为了改变

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

这里的id是一个数组列表类型。因此,我们可以循环查看列表。

PS:我们可以使用for循环执行相同的操作。

马清野
2023-03-14

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

通过这种方式,您可以实现从财产转让步骤中获得的相同内容,但方式不同。

将源测试用例中的groovy步骤写入setProperty(保存稍后要使用的值)

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

TestRunner.testCase.testSuite.project.set属性值("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

司寇高峯
2023-03-14

我已经按照Leminou的建议使用了datasinks。

数据链接是一个很好的解决方案。在测试A中,创建一个datasink步骤来持久化感兴趣的值。然后在目标步骤中,使用数据源步骤,该步骤链接到前面由datasink生成的文件。

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

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

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

 类似资料:
  • 我是SoapUI的新手,遇到了一个我不明白的问题。目标:我想在不同的测试步骤中将结果从一个Groovy脚本传递到另一个Groovy脚本。 第1步:我有一个生成GUID的Groovy脚本: 步骤2:我有一个属性转移步骤,它接受上述脚本的结果,并将其传递到HTTP请求步骤(正在工作) 步骤3:我有第二个Groovy脚本,它运行curl命令,其中需要包含相同的GUID。 第3步是问题开始的地方。如何从第

  • 我开发了一些SoapUI案例,通过从文件中读取属性来在每个测试用例的开头设置一个属性。这很好,然后我可以通过每个测试请求步骤中的语法访问每个属性(让我们说)。 现在我意识到每个测试用例的一个属性都是相同的,所以我想为此创建一个testsuite属性,并从测试用例属性文件中删除属性定义。首先,我的测试用例都失败了,因为现在“propertyA”已经不知道了,但我发现了这一点(根据http://www

  • 我有一个Groovy测试类 在该类中有以下测试用例: 以及如下所示: 现在,当我运行这个测试用例时,我在调用时收到以下错误消息: 棒极了。lang.MissingPropertyException:类:ecs没有此类属性:msg1。MsgDispatcherTest 你知道我错过了什么吗?

  • 需要一些非常具体的包装器和例程。

  • 我使用的是免费(非专业)SoapUI 5.0,我在测试套件中有一个属性列表。然后,我有许多测试步骤,每个步骤与测试套件属性具有相同的名称。 我试图在测试步骤属性中编写Groovy脚本,以检索同名的测试套件属性的值。 例如: 测试套件的属性颜色为\u红色,值为12345 到目前为止,我在“info”属性值中拥有什么: 我不确定我是否需要新的GroovyShell()。评估位,但没有它仍然不起作用。我

  • 我正在使用SoapUI的开源版本进行一些SOAP Web服务负载测试。 我希望每个请求与以前的请求尽可能不同,我不希望使用相同的属性进行负载测试。 我有一个属性文件,它有几个属性,每个属性值都调用groovy脚本从文件中读取一个随机值,并将其分配给测试用例属性,即在值字段中: <代码>${=(DynamicPropertyScript)} 脚本: 如果我在测试用例开始时调用这个脚本,那么这个脚本工