调用的测试用例中缺少上下文
Context missing from called test case
在 SoapUI 中,我是 运行 来自 groovy 脚本的测试用例,代码如下:
def contextMap = new StringToObjectMap(context)
def myTestCase_1 = myTestSuite.getTestCaseByName("TestcaseName")
myTestCase_1.run(contextMap, false)
在被调用的测试用例中,我以这种方式在 groovy 脚本中设置了一些上下文属性:context.setProperty(“ProperyName”,”Value”)
被调用的测试用例完成后,创建的 属性 值在调用此测试用例的 groovy 脚本的上下文中丢失。
如何将 属性 值传回调用另一个测试用例的测试用例?
如果您想在同一个 testSuite
中通过不同的 testCases
共享 properties
,请不要使用 context
,而是尝试在 testSuite
上设置属性此 testSuite
中的所有 testCases
将共享该级别。例如,如果您有一个 testSuite
和两个 testCases
:testCase 1
和 testCase 2
,在来自 testCase 1
的 groovy 脚本上执行:
testRunner.testCase.testSuite.setPropertyValue( "sharedVar", "someValue" )
然后要在 testCase 2
中的另一个 groovy 脚本中使用此 属性,请使用:
def shared = testRunner.testCase.testSuite.getPropertyValue("sharedVar")
log.info shared
您也可以使用 testSuite
属性 保存在 testCase 2
中的 testCase 1
例如在 testStep SOAP Request
中使用:${#TestSuite#sharedVar}
根据操作评论编辑:
因为 OP 问题似乎是如何从使用 groovy 脚本从另一个 testCase
调用的 testCase
获取属性;这是一个可能的解决方法,它包括通过 运行 结果获取调用的 testCase
然后获取他的属性:
第一个 testCase
使用 groovy 调用另一个 testCase
看起来像:
import com.eviware.soapui.support.types.StringToObjectMap
def contextMap = new StringToObjectMap(context)
def testCase2 = testRunner.testCase.testSuite.getTestCaseByName("TestCase 2")
// get the result since is running sync
def result = testCase2.run(contextMap, false)
// from the result access the testCase and then the properties setted there
log.info result.getTestCase().getPropertyValue("varSettedOnTestCase2")
在第二个 testCase
中,只需执行您的逻辑并设置将从第一个 testCase
返回的属性:
testRunner.testCase.setPropertyValue("varSettedOnTestCase2","test")
希望这对您有所帮助,
在 SoapUI 中,我是 运行 来自 groovy 脚本的测试用例,代码如下:
def contextMap = new StringToObjectMap(context)
def myTestCase_1 = myTestSuite.getTestCaseByName("TestcaseName")
myTestCase_1.run(contextMap, false)
在被调用的测试用例中,我以这种方式在 groovy 脚本中设置了一些上下文属性:context.setProperty(“ProperyName”,”Value”)
被调用的测试用例完成后,创建的 属性 值在调用此测试用例的 groovy 脚本的上下文中丢失。 如何将 属性 值传回调用另一个测试用例的测试用例?
如果您想在同一个 testSuite
中通过不同的 testCases
共享 properties
,请不要使用 context
,而是尝试在 testSuite
上设置属性此 testSuite
中的所有 testCases
将共享该级别。例如,如果您有一个 testSuite
和两个 testCases
:testCase 1
和 testCase 2
,在来自 testCase 1
的 groovy 脚本上执行:
testRunner.testCase.testSuite.setPropertyValue( "sharedVar", "someValue" )
然后要在 testCase 2
中的另一个 groovy 脚本中使用此 属性,请使用:
def shared = testRunner.testCase.testSuite.getPropertyValue("sharedVar")
log.info shared
您也可以使用 testSuite
属性 保存在 testCase 2
中的 testCase 1
例如在 testStep SOAP Request
中使用:${#TestSuite#sharedVar}
根据操作评论编辑:
因为 OP 问题似乎是如何从使用 groovy 脚本从另一个 testCase
调用的 testCase
获取属性;这是一个可能的解决方法,它包括通过 运行 结果获取调用的 testCase
然后获取他的属性:
第一个 testCase
使用 groovy 调用另一个 testCase
看起来像:
import com.eviware.soapui.support.types.StringToObjectMap
def contextMap = new StringToObjectMap(context)
def testCase2 = testRunner.testCase.testSuite.getTestCaseByName("TestCase 2")
// get the result since is running sync
def result = testCase2.run(contextMap, false)
// from the result access the testCase and then the properties setted there
log.info result.getTestCase().getPropertyValue("varSettedOnTestCase2")
在第二个 testCase
中,只需执行您的逻辑并设置将从第一个 testCase
返回的属性:
testRunner.testCase.setPropertyValue("varSettedOnTestCase2","test")
希望这对您有所帮助,