【发布时间】:2014-12-23 07:35:43
【问题描述】:
我想使用 Groovy 在soapUI 中执行以下操作:
- 从数据库中选择随机值和对应数据
- 从网络服务获取响应
- 将我的数据库数据与来自网络服务的响应进行比较
为此,我定义了以下步骤:
- 为测试套件创建属性对象
- Groovy 脚本从数据库中获取随机值和对应值
- 将随机值放入请求的转换
- Web 服务调用以获取响应
- Groovy 脚本将我的数据库中的值与 Web 服务的响应进行比较
我已经对其他测试执行了相同的步骤,方法是在步骤 2 中将数据库中的值放入属性对象并在步骤 5 中从那里读取它们。但到目前为止,这些值始终是正常的 String 或 int .在我在当前测试用例中得到的响应中,我得到了一个列表。所以我创建了一个数组,并在第 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 个属性字符串:/