时隔上一篇博文到现在四个月之久,虽说没写,但是心里一直在挂牵,觉得有些东西不写出来,自己想要的东西不仔细推敲几番,始终得不到成长 。于是,今天来交作业了。内容还是跟Jmeter相关,只是不再讨论基础的应用,希望自己写的能给其它需要的小伙伴哪怕是一丁点的帮助,那也足够了。
本篇主要介绍的是JDBC Request与正则表达式提取器。
1.JDBC Request
之前的博文中介绍的主要是http请求,因为这是最基础的接口请求方式。而JDBC Request是向数据库发送一个jdbc请求(sql语句),并获取返回的数据库数据的请求操作。它经常需要和JDBC Connection Configuration一起使用。本文中主要是通过此请求获取数据后,作为断言对下一请求的结果进行校验。
在使用JDBC Request之前,我们需要做的是数据库连接配置,即JDBC Connection Configuration,不同的数据库得引入不同的jar包,本文中用的是SQL SERVER 2014, 那么就只需要下载sqljdbc4.jar 放到 jmeter根目录的lib目录下就OK了。具体配置如下:
(1)在线程组下,添加一个配置元件JDBC Connection Configuration
重要参数说明:
Variable Name:数据库连接池的名称,我们可以有多个jdbc connection configuration,每个可以起个不同的名称,在jdbc request中可以通过这个名称选择合适的连接池进行使用。文中,我用到的数据库名称是TELDATMS。
Database URL:数据库url,jdbc:sqlserver://IP:1433;databaseName=DBname
JDBC Driver class:JDBC驱动
username:数据库登陆的用户名
passwrod:数据库登陆的密码
不同数据库具体填写的方式,可以参考如下表格:
(2)在线程组下,添加一个JDBC Request
添加察看结果树,所得到的结果如下
到这里,这一个JDBC Request就算完成了。可是,查询到这个结果有什么意义呢?上文中说明了,通过JDBC请求获取数据后,作为断言对下一请求的结果进行校验,那这里就是需要把这个22814提取出来,作为一个变量值。如何提取?
2.正则表达式提取器
正则表达式提取器参数说明:
(1)引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。
(2)正则表达式:
():括起来的部分就是要提取的。
.:匹配任何字符串。
+:一次或多次。
?:不要太贪婪,在找到第一个匹配项后停止。
(3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值
(4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0
(5)缺省值:如果参数没有取得到值,那默认给一个值让它取。
上文中提到的是,需要提取XP值,那根据正则表达式提取规则,数据库查询到结果后,使用 ULI_XP\n([^'']+)\n进行提取。
题外话:在这里,要跟大家分享一个万年大坑,我从昨天晚上一直搞到现在。之前在考虑换行时只考虑到了字段名后带着换行,于是,每次在查看提取结果后,数据后总是带着换行。直到刚才,我才想起来,会不会数据后本身也带着换行?于是,果断在)后又加了一个\n,谢天谢地,原来如此,原来是你折腾了我这么久。
那提取后,如何验证这个值提取的是否正确呢?
执行HTTP请求,如下图所示,这个变量的取值是22814,即取值正确。
此时,回到我们最初的想法,取到这个值后,需要以此来作为断言,判断返回值是否正常。于是新建一个HTTP请求,将此变量作为一个响应断言
如上,是将JDBC Request与正则表达式提取器结合在一起使用的案例,当然,正则表达式提取器的应用远不止这一项,比如在上文中提到UserID这个变量,它就是通过HTTP请求后,通过正则表达式提取器提取到值
这里展示的正则表达式写法与JDBC Request则完全不同,因为这是一个HTTP请求,返回的都是JSON数据。
这里的变量,不仅可以用在JDBC Request中,HTTP请求的参数中,还可以用在HTTP请求的信息头中一并请求,如下图所示。
小结:
1. 总的说来,这篇文章里更多说明的是正则表达式提取器的使用,以及提取到的变量的使用方法。当然,对于正则表达式的规范,还需要自己去仔细的体会琢磨,才能了解其中的用处。
2. 好好学习,才能天天向上。