使用Groovy Script在SoapUI中生成动态JSON请求主体并将其传递给POST API请求

San*_*eep 2 api groovy automation json soapui

我正在尝试使用SOAP UI为API自动化生成动态JSON请求体.我正在使用groovy脚本来做同样的事情.我无法将动态生成的属性值传递给请求中的JSON主体.有人可以帮忙吗?

我的Groovy脚本

import java.util.Random

//generating random values
Random rand = new Random()
String brandName = "BrandName" + rand.nextInt(100000)
String pageTitle = "BrandPageTitle" + rand.nextInt(100000)

//setting test case properties
testRunner.testCase.setPropertyValue("name", brandName);
testRunner.testCase.setPropertyValue("page_title", pageTitle);
Run Code Online (Sandbox Code Playgroud)

这是我的POST请求的JSON主体.我不确定我访问下面JSON中的变量的方式是正确的

{
  "name": "${brandName}",
  "page_title": "${pageTitle}"
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个.'POSTCreateNewBrand'是我的TestCase名称,'name'是property_name

{
  "name": "${#POSTCreateNewBrand#name}",
  "page_title": "${#POSTCreateNewBrand#page_title}"
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的测试时,我发现名称字段未作为请求正文的一部分提供,并看到以下错误

<errors>
   <error>
      <status>400</status>
      <message>The required field 'name' was not supplied.</message>
   </error>
</errors>
Run Code Online (Sandbox Code Playgroud)

alb*_*iff 9

要在TestCase级别中使用属性,不必使用TestCase名称,请使用直接#TestCase#常量,后跟属性名称,如下所示:

{
  "name": "${#TestCase#name}",
  "page_title": "${#TestCase#page_title}"
}
Run Code Online (Sandbox Code Playgroud)

此外,同样适用于Project,TestSuite等等; 它的TestStep级别名称来自SOAPUI文档:

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

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

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

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

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

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

#Env# - 引用环境变量

[TestStep name]# - 引用TestStep属性

希望这可以帮助,