至于上面的图形监听器,可以宏观的观察SQL语句在压力测试下响应的平滑度,并且有一定的统计信息,能够观察平均响应时间等。
现在我们来看另外一种方式编写我们的JDBC调用。就是使用JMeter提供的函数动态生成我们所需要不断变化的SQL语句部分。之所以需要这么做是为了方便我们观察执行的SQL语句内容。
在前面使用预编译的方式,传递动态参数的SQL语句执行的结果,大家已经看到过,在树形监听器中,我们观察到到执行过的SQL语句是:
SELECT * FROM (SELECT tmp.*, ROWNUM rn FROM ( select p.p_id, p.p_name, c.cmp_name from test_product p, test_company c where p.cmp_id = c.cmp_id and contains(p.p_name, ?) > 0 --and (p.p_name like '%D%' or p.p_name like '%AIX%') ORDER BY p.p_id desc ) tmp WHERE 1 = 1 AND ROWNUM <= 100) WHERE 1 = 1 AND rn >= 1 |
这样导致我们无法看出参数"?"当中表示的具体值是什么,这对我们在某些情况下确定SQL语句的性能是相当不利的。所以我们这里需要使用JMeter的动态函数特性。
我们创建第二个"JDBC Request"节点,而后禁用"产品名 全文关键字 JDBC Request",将新创建的"JDBC Request"重命名为"产品名 like JDBC Request",将其中的SQL语句改写为:
SELECT * FROM (SELECT tmp.*, ROWNUM rn FROM ( select p.p_id, p.p_name, c.cmp_name from test_product p, test_company c where p.cmp_id = c.cmp_id AND ( ${__V(smt_${__Random(1,4,rnd)})} ) ORDER BY p.p_id desc ) tmp WHERE 1 = 1 AND ROWNUM <= 100) WHERE 1 = 1 AND rn >= 1 |