2.3 参数化JDBC Request TestStep的SQL查询
这部分直接建立在上面一个项目面,以显示如何使用JDBC Request TestStep根据TestStep外部的属性值执行参数化SQL查询。 这很有用,因为它允许JDBCRequest TestStep根据从其他TestSteps的结果设置的属性来查询和检查数据,例如,使用从Web服务响应中获取的ID执行查询。
2.3.1 操作步骤
首先,向JDBC Request TestStep添加一个具有固定值的新参数,并将其用作简单选择查询的条件。然后,更改JDBC RequestTestStep参数,目的是为了从TestCase属性值中获取其值。执行步骤如下:
1. 编辑上一项目的“JDBC Request TestStep”,添加一个新的参数:invoiceIdParam,参数值为2
2. 修改SQL Query,给查询语句加上where限定条件,指定invoice id必须等于invoiceIdParam的值。Sql查询语句如下:
select * from invoice where id=:invoiceIdParam
Note:占位符语法(Palceholdersyntax):在查询中的预期参数名称之前使用”:”。
3.运行查询语句,将看到invoice id为2的值返回,为红色的原因是由于上一部分的断言没有执行成功。截图如下:
4. 确实有效有用,为了使这更有用,我们可以尝试使用SoapUI属性扩展来从TestStep之外的某处获取参数值。SoapUI具有表达式语言以便引用项目中多个对象的属性。更多信息:http://www.soapui.org/Scripting-Properties/property-expansion.html。给出如下例子:
n 给JDBC RequestTestStep的TestCase添加一个invoiceNo属性;在TestCase上双击,点击Properties栏,添加一个属性名为invoiceNo的属性,属性值为1。
n 打开JDBC RequestTestStep,编辑invoiceIdParam属性值为:${#TestCase#invocieNo}
n 运行TestStep,你将看到一个id=1的invoice查询结果。
2.3.2 工作原理
该部分学习的重点是在JDBCRequest TestStep使用查询参数的语法以及属性扩展表达式语言。属性扩展在SoapUI中非常重要,因为它们允许数据在相关对象之间传递,例如TestSteps对象。在许多地方它们被用来插入属性值。常见的例子是在Groovy脚本中设置变量的值或在Web服务请求中设置属性。
INSERT INTO test.invoice(id, company, amount, due_date)
VALUES
(:invoiceIdParam, :invoiceCompanyParam, :invoiceAmountParam,:invoiceDueDateParam);
另一个例子将使用JDBCRequest TestStep的扩展属性来插入上一个TestStep收集到的数据,例如:将测试结果存储在数据库中以供外部报告工具使用或填充模拟服务的测试数据。插入基于参数值的数据,插入命令如下所示:
操作截图:
JDBC插入数据(JDBC Request):
JDBC查询插入的数据(JDBCRequest2):
当使用属性扩展时,考虑属性的定义域是非常重要的,尤其在更新它们的时候。例如,由多个TestCases更新的项目或全局范围的属性可能导致并发性或线程安全性问题。一般来说,尽量保持范围尽可能窄,可写属性尽可能宽,只读属性尽可能宽。更多关于属性传输的信息:http://www.soapui.org/Functional-Testing/property-transfers.html。