数据库断言
数据库驱动配置步骤
1.添加驱动包。点击测试计划,找到库配置,点击“浏览”配置驱动包。
2.添加数据库配置元件。右键测试计划或者线程组,点击添加,选择JDBC Connection Configuration。
Variable Name For created pool:数据库配置的环境变量名字。这里先配置为db。 Database URL:数据库连接URL。 JDBC Driver Class:数据库驱动类名。右边可以下拉选择。 Username:数据库用户名。 Password:数据库密码。 Connection Properties:数据库连接属性。这里可以不配置。 |
3.点击添加取样器,选择jdbc request。
增加断言
jmeter的断言有很多中,数据库请求所有的断言都可以用。如果只是简单的比较结果是否等于或者包含某个值,使用比较断言接口。但是如果需要对不同的字段进行比较,则需要使用BeanShell断言。
1.在jdbc request下添加BeanShell断言。
2.写一个java脚本,用于比较数据。
public class JmeterCheckUtils { public static void checkResult() { // 返回数据为空,直接校验失败 if (vars.getObject("result").size() == 0) { Failure = true; FailureMessage = "查询结果为空"; return; } // 取第一个结果 Result = vars.getObject("result").get(0); TreeMap treeMap = new TreeMap(Result); log.info("期望值:" + map.toString()); log.info("实际值:" + treeMap.toString()); String resultValue = ""; String expectedValue = ""; boolean result = false; StringBuilder message = new StringBuilder("\n"); for (String key : map.keySet()) { expectedValue = map.get(key); resultValue = Result.get(key) == null ? null : Result.get(key).toString(); if (resultValue == null) { // 这里是为了兼容oracle返回的字段都是大写的。 resultValue = Result.get(key.toUpperCase()) == null ? null : Result.get(key.toUpperCase()).toString(); } if (expectedValue != null && expectedValue.startsWith("$")) { expectedValue = vars.get(expectedValue.substring(2, expectedValue.length() - 1)); } if (expectedValue == null) { result = expectedValue != resultValue; } else { result = !expectedValue.equals(resultValue); } if (result) { Failure = true; message.append(key + "的实际值为【" + resultValue + "】; " + key + "的期望值为【" + expectedValue + "】; " + "校验结果为:" + (result ? "不通过" : "通过") + ";\n"); } } log.info(message.toString()); FailureMessage = message.toString(); } } |
脚本说明:
这里是取数据库请求返回的第一条数据(取不到则校验失败),放到实际值map对象中,与BeanShell中定义的期望值map对象进行比较。可以根据自己的测试场景进行改造。
期望值可以写成${param}的形式,脚本会判断$开头的期望值,到环境变量中取。
FailureMessage、log、Result、Failure都是jmeter的预置的变量,不需要重新定义。
定义Map对象的时候,不能写尖括号(不清楚原理,应该是不支持泛型)。
使用TreeMap是为了打印期望值与实际值时,参数名字保持顺序,方便肉眼查看。
数据库请求的返回结果需要赋值到result变量中。
3.在BeanShell中填写脚本。
// 引入上面的java脚本,参数是java文件的源代码路径。 source("/Users/JmeterCheckUtils.java"); // 定义期望值map对象 Map map = new TreeMap(); // 填写期望值,这里设置成错误的值,方便查看结果。 map.put("TABLESPACE_NAME", "SYSTEM1"); // 调用java脚本比较期望值 JmeterCheckUtils.checkResult(); |
4.查看结果。可以看到期望值是SYSTEM1,而查询到的结果是SYSTEM。
BeanShell断言说明:
Assertion error:脚本是否有运行异常,如果有则需要看日志排查。
Assertion failure: 断言结果是否为失败。关联的对象是Failure。
Assertion failure message:断言的错误信息。关联的对象是FailureMessage。
5.控制台中也可以查看到打印的日志,包括期望值map对象、实际值map对象、比较的结果。
ORACLE注意事项
1.批量执行SQL,开头和结束需要特殊语法保护。开头添加declare begin,结尾添加end。
declare begin delete from ccc where id = '13100000001'; delete from ccc where id = '13100000002'; delete from ccc where id = '17100000001'; end; |
2.执行SQL结尾不能用分号。
3.数据库中clob字段查询不出数据,返回的结果为oracle.sql.CLOB@30082f38,需要特殊处理。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理