在 Groovy 个测试步骤之间传输列表 (SoapUI)
Transfer list between Groovy test steps (SoapUI)
我有一个测试用例,它在每个 运行 其他测试用例之前被调用(开始和完成)。它类似于 'test data preparation' 测试用例。此测试用例的输出是包含一些元素的列表,列表如下所示:
def list = ['Login', 'Get Messages', 'Logout', etc.]
列表在每个 运行 上都不同。我需要将此列表从 'test data preparation' 测试用例转移到其他测试用例。传输将在两个 Groovy 脚本之间进行。
如何在 SoapUI 中的两个 Groovy 测试步骤之间传输列表?
据我了解:
- 你有一个 TestCase,你从其他所有 TestCase 调用它。
- 我假设这是使用 "Run TestCase" 测试步骤完成的?
- 您希望能够传递字符串列表
- 正如我所读,参数是单向的。从 "external testcase" 回到调用测试用例。每个测试用例都没有 "input" 到这个 "external testcase"?
您的 "external testcase" 中的 Groovy 脚本可能会生成一个字符串结果,然后可以将其转换为类似字符串的数组或数组列表。
这可能是一个字符串,其值由 ;
分隔
def result = ""
result += "Entry1;"
result += "Entry2;"
result += "Entry3;"
// You may want to add a line of code that removes the last ;
return result
然后,通过添加几行代码,可以从其他地方的 Groovy 脚本中轻松检索此结果。
如果 Groovy 脚本放在另一个 TestCase 中,但在同一个 TestSuite 中,您可以使用以下方法检索结果:
def input = testRunner.testCase.testSuite.getTestCaseByName("Name of TestCase").getTestStepByName("Groovy Script Name").getPropertyValue("result")
如果放在不同TestSuite中的TestCase中,可以使用:
def input = testRunner.testCase.testSuite.project.getTestSuiteByName("Test Suite Name").getTestCaseByName("Test Case Name").getTestStepByName("Groovy Script Name").getPropertyValue("result")
然后遍历输入,执行如下操作:
for (def s : input.split(";")) {
log.info s
// Do your stuff here
}
我希望这是有道理的...? :)
从 groovy 第 1 步开始,您应该 return 列表:
def list = ['Login', 'Get Messages', 'Logout']
return list
从 groovy 第 2 步你可以得到这个 returned 列表
def result = context.expand( '${Groovy Script 1#result}' )
list = result.tokenize('[,] ')
list.each{
log.info it
}
请注意,您得到一个字符串,您必须将其转换回列表(标记化)。
我是用 SOAPUI pro 做的。
另一种方法(丑陋的)是将列表存储在 groovy 脚本 1 中的自定义 属性 中(使用 testRunner.testCase.setPropertyValue("myList",list.toString())
并在 groovy 步骤 2 中恢复它 (testRunner.testCase.getPropertyValue("myList")
希望对你有所帮助
EDIT :如果列表元素包含空格
这不是很干净,我希望有人能帮助提供更好的东西,但您可以执行以下操作:
list = "['Login - v1', 'Get Messages - v2', 'Logout - v1']"
list = list.replace('\'','\"')
def jsonSlurper = new groovy.json.JsonSlurper()
list = jsonSlurper.parseText(list)
list.each{
log.info it
}
亚历克斯
我有一个测试用例,它在每个 运行 其他测试用例之前被调用(开始和完成)。它类似于 'test data preparation' 测试用例。此测试用例的输出是包含一些元素的列表,列表如下所示:
def list = ['Login', 'Get Messages', 'Logout', etc.]
列表在每个 运行 上都不同。我需要将此列表从 'test data preparation' 测试用例转移到其他测试用例。传输将在两个 Groovy 脚本之间进行。
如何在 SoapUI 中的两个 Groovy 测试步骤之间传输列表?
据我了解:
- 你有一个 TestCase,你从其他所有 TestCase 调用它。
- 我假设这是使用 "Run TestCase" 测试步骤完成的?
- 您希望能够传递字符串列表
- 正如我所读,参数是单向的。从 "external testcase" 回到调用测试用例。每个测试用例都没有 "input" 到这个 "external testcase"?
您的 "external testcase" 中的 Groovy 脚本可能会生成一个字符串结果,然后可以将其转换为类似字符串的数组或数组列表。 这可能是一个字符串,其值由 ;
分隔def result = ""
result += "Entry1;"
result += "Entry2;"
result += "Entry3;"
// You may want to add a line of code that removes the last ;
return result
然后,通过添加几行代码,可以从其他地方的 Groovy 脚本中轻松检索此结果。
如果 Groovy 脚本放在另一个 TestCase 中,但在同一个 TestSuite 中,您可以使用以下方法检索结果:
def input = testRunner.testCase.testSuite.getTestCaseByName("Name of TestCase").getTestStepByName("Groovy Script Name").getPropertyValue("result")
如果放在不同TestSuite中的TestCase中,可以使用:
def input = testRunner.testCase.testSuite.project.getTestSuiteByName("Test Suite Name").getTestCaseByName("Test Case Name").getTestStepByName("Groovy Script Name").getPropertyValue("result")
然后遍历输入,执行如下操作:
for (def s : input.split(";")) {
log.info s
// Do your stuff here
}
我希望这是有道理的...? :)
从 groovy 第 1 步开始,您应该 return 列表:
def list = ['Login', 'Get Messages', 'Logout']
return list
从 groovy 第 2 步你可以得到这个 returned 列表
def result = context.expand( '${Groovy Script 1#result}' )
list = result.tokenize('[,] ')
list.each{
log.info it
}
请注意,您得到一个字符串,您必须将其转换回列表(标记化)。
我是用 SOAPUI pro 做的。 另一种方法(丑陋的)是将列表存储在 groovy 脚本 1 中的自定义 属性 中(使用 testRunner.testCase.setPropertyValue("myList",list.toString()) 并在 groovy 步骤 2 中恢复它 (testRunner.testCase.getPropertyValue("myList")
希望对你有所帮助
EDIT :如果列表元素包含空格
这不是很干净,我希望有人能帮助提供更好的东西,但您可以执行以下操作:
list = "['Login - v1', 'Get Messages - v2', 'Logout - v1']"
list = list.replace('\'','\"')
def jsonSlurper = new groovy.json.JsonSlurper()
list = jsonSlurper.parseText(list)
list.each{
log.info it
}
亚历克斯