一般需要并发测试的接口大多是登录、下单等接口。尤其需要抢购的下单接口。下面做的就是下单并发测试,由于用户需要用到微信号注册,所以不从注册后获取用户,直接在数据库里插入用户数据,然后通过sql正则查询语句来获取插入的用户数据,进行测试。废话不多的说,上图:

一、数据库插入用户数据:

数据库必须使用字段:

 

 

我是用的使用的数据库是MySQL,所以写一个生成随机字符串的函数代表openid,一个生成随机11位数字代表手机号:

1.生成随机字符串函数:

USE test;
SET GLOBAL log_bin_trust_function_creators=1;
DELIMITER $$
CREATE FUNCTION rs(n INT)
RETURNS VARCHAR(1024)
BEGIN
DECLARE chars CHAR(62) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ0123456789';
DECLARE res VARCHAR(1024) DEFAULT '';
DECLARE i INT DEFAULT 0;
REPEAT
SET i = i + 1;
SET res = CONCAT(res,SUBSTRING(chars,FLOOR(1+RAND()*62),1));
UNTIL i=n END REPEAT;
RETURN res;
END
$$
DELIMITER ;

2.生成随机电话号码:

USE test;
DELIMITER $$
CREATE FUNCTION mobiles()
RETURNS VARCHAR(1024)
BEGIN
DECLARE chars CHAR(62) DEFAULT '0123456789';
DECLARE res VARCHAR(1024) DEFAULT '135';
DECLARE i INT DEFAULT 0;
REPEAT
SET i = i + 1;
SET res = CONCAT(res,SUBSTRING(chars,FLOOR(1+RAND()*10),1));
UNTIL i=8 END REPEAT;
RETURN res;
END
$$
DELIMITER ;

其中CONCAT(res,SUBSTRING(chars,FLOOR(1+RAND()*62),1),concat拼接;substring(string, position, length)字符截取,position从位置1开始;floor(n)向下取整;rand()取0~1随机数;

3.构造存储过程循环插入用户数据:

USE test;
DROP PROCEDURE IF EXISTS insertuser;
DELIMITER $$
CREATE PROCEDURE insertuser(IN quantity INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE oi VARCHAR(128);
DECLARE rn VARCHAR(128);
DECLARE tk VARCHAR(128);
DECLARE mb VARCHAR(128);
WHILE i<quantity DO
SET @oi=rs(28);
SET @rn=rs(5);
SET @tk=rs(64);
SET @mb=mobiles();
INSERT INTO jldc.`tb_user`(gzh_openid,phone,real_name,id_num,token) VALUES(@oi,@mb,@rn,"450421198708028521",@tk);
SET i=i+1;
END WHILE;
END $$
USE test;

如插入20条用户数据可以调用CALL insertuser(20);

二、Jmeter获取用户数据:

1.添加JDBC配置:

 

 

 

2.配置JDBC Connection Configguration:

 

Variable Name for created pool:对这个数据库连接的别名,在JDBC Request中也有一个叫做“Variable name of Pool declared in JDBC Connection Configuration”的变量名称,这两者的变量名称是需要一致的;

Database URL: jdbc:mysql://ip:端口/数据库名;

JDBC Driver class:数据库JDBC驱动类名,按连接的数据库用的是哪种来决定选哪个,如数据库是MySQL的话选com.mysql.jdbc.Driver;

Username:数据库连接用户名;

password:数据库连接密码;

3.添加JDBC Request:

 

 

 

4.JDBC Request写查询语句以及设置查询出来的使用哪些变量接收:

 

 查询插入的数据:

SELECT id,gzh_openid,token FROM jldc.`tb_user` WHERE real_name REGEXP '[a-zA-Z0-9]';

5.把查询到的数据写入csv文件:

 

 

 

 

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
vars.get("userid_#");
log.info("${userid_#}");
//指定需要写入到哪个文件,格式:TXT,csv
FileWriter fstream = new FileWriter("E:/jldc/jmeterData/mysql_users.csv",true);

//创建一个字符缓存输出流
BufferedWriter out = new BufferedWriter(fstream);

//返回的结果有值从数字 1 开始,一共有 ${userid_#} 次
for(int num=1; num<=${userid_#}; num++){
    //拼接变量名称
       userid = "userid"+"_"+num;
    openid = "openid"+"_"+num;
    token = "token"+"_"+num;
    
    //把拼接的名称赋值给 userid/openid/token
    vars.put("userid",userid);
    vars.put("openid",openid);
    vars.put("token",token);
    
    //vars.get()获取到变量名称,并和上面返回的 (1,2,3)名称一致,取到变量的值
    //","体现在csv文档中就是向右移一个单元格
    out.write(vars.get(userid)+","+vars.get(openid)+","+vars.get(token)+"\n");
}

out.close();

fstream.close();

三、接口并发:

1.csv数据文件设置:

使用上面数据库查询到的数据所存储的csv。

 

 

2.写接口请求:

 

 在请求下加一个请求信息头

 

 3.请求下设置好同步定时器:

 

 

 4.断言:

 

 简单的并发到这基本就完成了,当然如果要做大量的话需要做分布式,还要观察TPS,响应时间,网络,cpu,内存占用等。

 

原文地址:http://www.cnblogs.com/lkc-test/p/16924361.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性