首页 > 解决方案 > SoapUI - 将 JWT 令牌设置为全局项目参数

问题描述

我是 SaopUI 的新手。我用资源创建了一个项目。我需要设置一些变量并将它们用于请求。例如,我有我的 JWT 令牌,并且 JWT 令牌会经常更改(测试不同的用户和权限 = 不同的 JWT 令牌)所以,确实存在我可以为项目全局设置参数并将其用作请求的 HEADER 参数的方式“链接”(在那个参数/值上)?

谢谢!,简

标签: soapui

解决方案


您可能对属性扩展感兴趣

SoapUI 提供了一种通用语法来在处理过程中动态插入(“扩展”)属性值。语法如下:

${[scope]propertyName[#xpath-expression]}

其中范围可以是以下文字值之一:

#Project# - 引用项目属性(跨特定 SoapUI 项目引用属性)

#TestSuite# - 引用包含 TestSuite 中的 TestSuite 属性

#TestCase# - 引用包含 TestCase 中的 TestCase 属性

#MockService# - 引用包含 MockService 中的 MockService 属性

#Global# - 引用全局属性。在文件>首选项>全局属性选项卡中找到。跨所有项目的参考属性

#System# - 引用系统属性。在帮助>系统属性中找到。

#Env# - 引用环境变量

[TestStep 名称]# - 引用一个 TestStep 属性

当然,许多范围只有在可用时才能工作,即您不能在 TestCase 脚本中使用#MockService# 范围,因为没有包含 MockService 可供访问。

如果未指定范围,则按如下方式解析属性:

  • 检查具有匹配名称的属性的当前上下文(例如 TestRunContext)

  • 检查匹配的全局属性

  • 检查匹配的系统属性

例如,您可以创建一个 groovy 步骤来设置变量:

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}


推荐阅读