问题背景
现如今国内的大部分软件或者网站应用,普遍流行使用短信业务,比如登录、注册以及特定的业务通知等。
对于这些业务,在使用Jmeter进行性能测试的过程中,就会需要自动获取和填入短信验证码,否则性能流程无法进行下去。
由于绝大多数的系统其短信验证码并不会在接口返回中,因此如何获取短信验证码是一个问题。
最简单的做法,是让开发在测试环境将验证码写死,在测试过程中固定使用静态验证码字串。
不过求人不如求己~也是出于尽量贴近真实用户场景的目的,更合适的做法还是通过技术手段动态获取并填写短信验证码。
解决思路
大多数应用的短信验证码都是通过第三方服务来发送的,如前文所言一般不会通过本地接口返回。
但是但凡设计过关的系统应该会将短信验证码存留于数据库当中进行留底和备份。
因此我们可以通过Jmeter去连接数据库,并通过合理的逻辑获取相应的验证码。
通常我们使用Jmeter更多的是测试HTTP和FTP等协议,但其实除这些之外,Jmeter还支持许多其他种协议,JDBC就是常见的一种。
因此以上需求应该完全能够实现。
实现方法
1. 建立JDBC连接
在Jmeter测试计划中,添加配置元件-JDBC连接配置(JDBC Connection Configuration),用于管理数据库连接。
2. 使用JDBC请求获取验证码
在线程组中,添加取样器-JDBC请求,进行数据库查询。
取到的结果:
3. 使用正则将验证码提取并使用
以上提取到的数据库记录中,只有969386是我们需要的验证码,因此需要用正则表达式提取器将他提取出来:
到此,后续的请求使用${mcode}就可以使用获取到的验证码继续测试了。