Groovy测试步骤之间的转移列表(SoapUI)

时间:2019-03-26 09:12:49

标签: groovy soapui

我有一个测试用例,在每次运行其他测试用例之前都被称为(开始和完成)。它类似于“测试数据准备”测试用例。该测试用例的输出是包含一些元素的列表,列表看起来像这样:

def list = ['Login', 'Get Messages', 'Logout', etc.]

每次运行时列表都不相同。我需要将此列表从“测试数据准备”测试用例转移到其他测试用例。转移将在两个Groovy脚本之间进行。

如何在SoapUI的两个Groovy测试步骤之间转移列表?

2 个答案:

答案 0 :(得分:1)

据我了解:

  • 您有一个TestCase,可以从其他所有TestCase调用。
  • 我假设这是通过“运行TestCase”测试步骤完成的?
  • 您希望能够传递字符串列表
  • 在我读到它时,参数是一种方式。从“外部测试用例”并返回到调用测试用例。每个测试用例都没有“输入”到这个“外部测试用例”吗?

然后,“外部测试用例”中的Groovy脚本可能会生成String结果,然后可以将其转换为类似Array或ArrayList的字符串。 这可能是值以;;

分隔的字符串
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
}

我希望这有意义...? :)

答案 1 :(得分:1)

从常规步骤1开始,您将返回列表:

def list = ['Login', 'Get Messages', 'Logout']
return list

从groovy步骤2中,您可以获得此返回列表

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()) 并在常规步骤2中恢复它(testRunner.testCase.getPropertyValue(“ myList”)

我希望会对您有所帮助

编辑:如果列表元素包含空格

这不是很干净,我希望有人能够提供更好的服务,但是您可以执行以下操作:

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
}

亚历克斯