本文章主要涉及的功能点有:
1.JDBC链接数据库(使用的是PG库),
2.SQL语句使用,
3.BeanShell preProcessor使用
本文中所需要的jar包有:lib\ext\fastjson -1.2.7.jar postgresql -42.2.5.jar
前提:做并发压测,需要合同号,如果使用传统的CSV DATA的也可以,只是一次只能发一个合同号,如果我需要一次性发N个则需要使用前置处理BeanShell preProcessor才能完成。
备注:第1、2步主要是讲JDBC的链接,第3、4步主要讲前置处理, 2个部分没有必然的联系,只是第4步需要获取数据,这个数据是通过第2步获取的,也可以通过其他方式获取。
第一步:配置JDBC
操作:右键->配置元件->JDBC
主要设置:Variable name for created pool:pgrts
Max number of connection:10
Validation Query:select 1
Database URL: jdbc:postgresql://xxx.beta.cloud/HCC_DATA
Username:XXXXX
Password:XXXXX
其他默认就行
第二步:配置JDBC Request
操作:右键->添加->Sampler->JDBC Request
主要设置:Variable name of pool declared in JDBC connection cenfiguration:pgrts
编写SQL1:select contract_number from test1 order by 1
Variable names: contract_number
备注:上面的SQL是查询出所有的值,还可以根据迭代分页查询出不同的数据。设置一个固定变量:num_x 值为200,再设置计数器:jrnum(每次迭代自动+1),根据并发用户查询出不同的数据:编写SQL2:select contract_number from test1 order by 1 LIMIT ${num_x} OFFSET ( ${jrnum} - 1 )*${num_x},这个意思是每次查询出200个值,并发压测下,每次查询出来的值都是不一样。
第三步:HTTP请求页面
地址:http://xxxx.sina.com/test/send
body部分如下:
{
"appId":"com.sina.com.itc.hcc.rts",
"mqmessagovo":${jrbody}
}
第四步:HTTP请求页面添加前置处理器
操作:右键->添加->前置处理器->Beanshell proProcessor
以下是在Beanshell proProcessor页面所写的java程序:
import java.util.ArrayList ;
import java.util.List ;
import com.alibaba.fastjson.*;
String stust = "{\"contractNumber\":\"11111111111\",\"duId\":\"222222222\"}" ;
List listtest1 = new ArrayList() ;
List listtest2 = new ArrayList() ;
int c = Integer.parseInt( vars.get("contract_number_#")); //获取上面查询语句能查询出来的总条数,类似于count(1),这里取出来作为下面循环的次数
String res1 = "" ;
String res2 = "" ;
String res3 = "" ;
String regx= "\"" ;
for( int i = 0 ; i < c ; i++ ){
listtest1.add(stust );
String res = "" ;
res = (String )listtest1.get(i) ;
JSONObject jsonob = JSONObject.parseobject(res) ;
int j = i +1 ;
jsonob.put("contractNumber",vars.get("contract_number_"+j)); //从上面的JDBC请求中获取数据,取第一条是contract_number_1,第二条是contract_number_2,以此类推,使用变量能把这一个循环里面的所有数据取出来
res1 = jsonob.toJSONString() ;
listtest2.add(res1) ;
}
res2 = listtest2.toString() ;
res3 = res2.replace(regx,"\\\"") ;
vars.putObject("jrbody",res3 );
通过此次前置处理器处理完的结果是:
body部分完整如下:
{
"appId":"com.sina.com.itc.hcc.rts",
"mqmessagovo":[{\"contractNumber\":\"11111111111\",\"duId\":\"222222222\"},{\"contractNumber\":\"333333333\",\"duId\":\"222222222\"},{\"contractNumber\":\"4444444444\",\"duId\":\"222222222\"},{\"contractNumber\":\"55555555555\",\"duId\":\"222222222\"},.........{\"contractNumber\":\"999999999\",\"duId\":\"222222222\"}]
}