我是SaopUI的新手。我用资源创建了一个项目。 我需要设置一些变量并将其用于请求。例如,我有我的JWT令牌,并且JWT令牌将经常更改(测试不同的用户和权限=不同的JWT令牌) 那么,是否存在一种方式可以为项目全局设置参数并将其用作“链接”(在该参数/值上)的请求的HEADER参数?
谢谢!, 扬
答案 0 :(得分:0)
SoapUI提供了一种通用语法来在处理过程中动态插入(“扩展”)属性值。语法如下:
$ {[scope] propertyName [#xpath-expression]}
其中scope可以是以下文字值之一:
#Project#-引用项目属性(特定SoapUI项目的引用属性)
#TestSuite#-在包含的TestSuite中引用TestSuite属性
#TestCase#-在包含的TestCase中引用一个TestCase属性
#MockService#-在包含的MockService中引用MockService属性
#Global#-引用全局属性。在“文件”>“首选项”>“全局属性”选项卡中找到。所有项目的参考属性
#System#-引用系统属性。在帮助>系统属性中找到。
#Env#-引用环境变量
[TestStep名称]#-引用一个TestStep属性
当然,许多范围仅在可用时才起作用,即,您不能在TestCase脚本中使用#MockService#范围,因为其中没有可访问的MockService。
如果未指定范围,则按以下方式解析属性:
检查当前上下文(例如TestRunContext)中具有匹配名称的属性
检查匹配的全局属性
检查匹配的系统属性
例如,您可以创建一个常规步骤来设置变量:
import groovy.json.JsonSlurper
project = testRunner.getTestCase().testSuite.getProject();
testStep = testRunner.testCase.testSteps["YourApiRequestStep"]
def Response = testStep.getProperty("response").value;
def someFieldYouWantToSave = ""
if (Response == null) {
log.error('No Response found.');
}
else {
def jSlurper = new JsonSlurper();
def json = jSlurper.parseText(Response);
if (json.get("theFieldFromTheResponse") == null){
log.error "TheFieldFromTheResponse not found in response. Please execute the teststep and try again"
} else {
someFieldYouWantToSave = json.get("theFieldFromTheResponse").toString()
testRunner.testCase.setPropertyValue("someFieldYouWantToSave", someFieldYouWantToSave)
}
}
然后您可以在请求中使用该属性,如下所示: $ {#Project#theFieldFromTheResponse}