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

时间:2015-03-26 01:22:45

标签: json api groovy automation 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);

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

{
  "name": "${brandName}",
  "page_title": "${pageTitle}"
}

我也尝试过这个。 ' POSTCreateNewBrand'是我的TestCase名称和'名称'是property_name

{
  "name": "${#POSTCreateNewBrand#name}",
  "page_title": "${#POSTCreateNewBrand#page_title}"
}

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

<errors>
   <error>
      <status>400</status>
      <message>The required field 'name' was not supplied.</message>
   </error>
</errors>

1 个答案:

答案 0 :(得分:8)

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

{
  "name": "${#TestCase#name}",
  "page_title": "${#TestCase#page_title}"
}

此外,同样适用于ProjectTestSuite等等;来自SOAPUI documentationTestStep级别的名称:

  

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

     

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

     

#TestCase# - 引用包含TestCase

中的TestCase属性      

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

     

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

     

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

     

#Env# - 引用环境变量

     

[TestStep name]# - 引用TestStep属性

希望这有帮助,