【问题标题】:soapUI: How to set lists as propertysoapUI:如何将列表设置为属性
【发布时间】:2014-12-23 07:35:43
【问题描述】:

我想使用 Groovy 在soapUI 中执行以下操作:

  1. 从数据库中选择随机值和对应数据
  2. 从网络服务获取响应
  3. 将我的数据库数据与来自网络服务的响应进行比较

为此,我定义了以下步骤:

  1. 为测试套件创建属性对象
  2. Groovy 脚本从数据库中获取随机值和对应值
  3. 将随机值放入请求的转换
  4. Web 服务调用以获取响应
  5. Groovy 脚本将我的数据库中的值与 Web 服务的响应进行比较

我已经对其他测试执行了相同的步骤,方法是在步骤 2 中将数据库中的值放入属性对象并在步骤 5 中从那里读取它们。但到目前为止,这些值始终是正常的 Stringint .在我在当前测试用例中得到的响应中,我得到了一个列表。所以我创建了一个数组,并在第 2 步中用我想要的数据填充 bean 对象。在第 5 步中,我解析我的 XML-String 并将数据也转换为 Object-Array。所以我可以比较它们的所有属性。

我用一个单独的脚本编写了整个测试用例,并首先在 groovy 控制台上对其进行了测试。当我开始将其转换为soapUI并使用属性将数据从第2步“传输”到第5步时,我的问题出现了,因为看起来我无法将Arraylist放入属性(请参阅下面的错误消息)。

现在我很困惑这是不可能的,因为我可以轻松地将 SQL 实例放入属性中:

def contextSqlInstanz = Sql.newInstance(urlH2, userH2, passwordH2, driverH2)
context.setProperty( "contextSqlInstanz", contextSqlInstanz )

sql = context.getProperty("contextSqlInstanz");

那么我如何传输我的数组,填充对象,从第 2 步到第 5 步,以将其与我的 web 服务响应进行比较。我想将两者都转换为字符串并比较字符串是否相等,但我想手动比较我的 bean-class 的每个属性。

豆类:

class myBean {

    String value1;
    String value2;
    ...
}

读取我的本地数据库,生成 bean 并将它们放入列表中

function getdata() {  
  def liste = []

  // sql-statements
  sql.eachRow(...) {

   def myBean = new myBean();

   myBean.value1 = it.value1.toString();
   myBean.value2 =  it.value2.toString();
   ...

   liste.add(Schluesselwert)

  }

  return liste   
}

试图将列表放入属性中

sollListeH2 = getdata()

def props = testRunner.testCase.getTestStepByName("P_testcase")
props.setPropertyValue( "sollListe", sollListeH2)

结果:

groovy.lang.MissingMethodException:没有方法签名:com.eviware.soapui.impl.wsdl.teststeps.WsdlPropertiesTestStep.setPropertyValue() 适用于参数类型:(java.lang.String, java.util.ArrayList) values: [sollListe, [value1@15d4334, value2@1e739c8, ...]] 可能的解决方案:setPropertyValue(java.lang.String, java.lang.String), getPropertyValue(java.lang.String) 行错误:91

【问题讨论】:

  • 为什么要使用列表而不是遍历它?您可以将属性设置为字符串值
  • 不明白你的意思。在第 5 步中,我遍历列表以比较每个对象的每个属性?当然,我可以为每个对象的每个属性创建字符串,但这是 a) 丑陋和 b) 即使有小列表让我们说 5 个对象,每个对象有 8 个属性,这将是 80 个属性字符串:/

标签: groovy soapui


【解决方案1】:

因为我没有找到另一种方法,所以我通过将每个值作为自己的属性放入属性中来做到这一点,这是一种丑陋的方式

在第二步设置道具:

def convertVectorToProps(vector) {  
  def size = vector.size();

  def props = testRunner.testCase.getTestStepByName("P_testcase")

  props.setPropertyValue("sollSize", size.toString())

  for(int i=0; i < size; i++) { 

     props.setPropertyValue("myBean.value1" + i, vector.value1[i]);
     props.setPropertyValue("myBean.value2" + i, vector.value2[i]);

     ...
  }
} 

读取第 5 步中的道具并构建新向量:

def convertPropsToVector() {

  def props = testRunner.testCase.getTestStepByName("P_testcase")

  def sollSize = props.getPropertyValue("sollSize").toInteger() 

  SollListe = [];


  for(int i=0; i < sollSize; i++) { 

    def myBean = new myBean();

     myBean.value1 = props.getPropertyValue("myBean.value1" + i);
     myBean.value2 = props.getPropertyValue("myBean.value2" + i);  

     SollListe << myBean
  }

  return SollListe
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多