自动化工具测试注册功能时,往往会遇到验证码,这个烦人的验证码怎么能够解决掉呢?

通常有两种方法

  1. 让开发禁用注册码,或在测试环境写个固定的验证码
  2. 在jmeter中用 jdbc获取数据库中验证码

今天通过一个实例给大家介绍一下第二种方法

首先我们的整理思路是这样的:

1.随机的手机号码

2.获取该手机号码的数据库验证码

3.手机号+验证码,发送请求

4.注册成功

(一)获取数据库中的数据

添加 DBC Connection Configuration

右键线程组->添加->配置元件->JDBC Connection Configuration

不同数据库具体的填写方式,可以参考下面的表格:

Datebase

Driver class

Database URL

MySQL

com.mysql.jdbc.Driver

jdbc:mysql://host:port/{dbname}

PostgreSQL

org.postgresql.Driver

jdbc:postgresql:{dbname}

Oracle

oracle.jdbc.driver.OracleDriver

jdbc:oracle:thin:user/pass@//host:port/service

Ingres (2006)

ingres.jdbc.IngresDriver

jdbc:ingres://host:port/db[;attr=value]

MSSQL

com.microsoft.sqlserver.jdbc.SQLServerDriver

或者

net.sourceforge.jtds.jdbc.Driver

jdbc:sqlserver://IP:1433;databaseName=DBname

或者

jdbc:jtds:sqlserver://localhost:1433/"+"library"

我这边测试用的是mysql数据库,值得注意的是mysqll数据库需要指出本机的数据库实例的名称,例如如果实例叫mysql,那么,rul为:jdbc:mysql://localhost:3306/mysql

(二)设置变量

分析整体思路,我们可以看出来,在这个实例中需要两个变量,一个是手机号,一个是验证码,其中只有验证码是需要从数据库获取的

1.我们先处理简单的,设置手机号这个变量,我这里命名为account

右键线程组->添加->配置元件->用户定义的变量

利用jmeter自带的函数即可设置手机号这个随机变量,如图所示,我这里设置的account即手机号是13000000000~13999999999随机

2.接着我们再来处理较为复杂的验证码这个变量,我这里设置的变量名是ACTIVE_CODE

右键线程组->添加->Sampler->JDBC Request

注意Variable Name要和JDBC Connection Configuration中Variable Name一致,否则将获取不到这个变量的值

然后我们再看JDBC Request中查询ACTIVE_CODE这个变量值的sql

SELECT ACTIVE_CODE FROM uc_user_active WHERE EXCHANGE_ID='108991'and ACCOUNT=${ACCOUNT};根据手机号码查询验证码,由于手机号码也是一个变量,所以我们where条件语句的写法是ACCOUNT=${ACCOUNT},当然这里你也可以设置手机号码为固定值去验证这个验证码是否获取成功

(三)录制脚本

当数据库和变量都设置好之后,我们通过jmeter自带的录制功能,录制发送验证码和注册这两个请求

我们可以看到录制下来的请求参数,其中cellPhone(注册手机号),和account的值是相等的,我们设置这个变量的参数值为${ACCOUNT}

参数 设置完成之后,我们可以运行一下,看看验证码是否能够获取成功,查看结果树,这个验证码获取成功了,验证码是805173

接着我们再看注册这个请求,正确的参数填写应该是这样,这里有个地方要注意,当使用jdbc request的结果作为参数时,要写成${ACTIVE_CODE_1}这样子,1代表你查出来的数据第一行,想取第几行就把1改成几,这和用户自定义的变量稍微有点区别

(四)运行脚本

以上操作都完成以后,我们就可以试测试一下我们的脚本是否可靠,运行脚本,查看结果数和数据库,我们可以看到已经注册成功

jmeter使用jdbc获取注册验证码进行注册的更多相关文章

  1. jmeter通过cookie获取图片验证码实现登录2

    在登录时有一张图片验证码,需要获取验证码用于后续登录,见图 1.找到图片验证码接口写入jmeter 2.正则表达式提取cookie 3.Fiddler抓取登录成功的响应cookie,并设置成全局 4. ...

  2. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  3. Django项目:CRM(客户关系管理系统)--49--40PerfectCRM实现全局账号注册+验证码+页面刷新保留信息

    # gbacc_urls.py # ————————38PerfectCRM实现全局账号登录注销———————— from django.conf.urls import url from gbacc ...

  4. react项目中登陆注册验证码的倒计时,页面刷新不会重置

    目前很多的网站和app在做登陆注册时都会用到手机验证码,为了防止验证码轰炸,也就是随意的点击验证码,一般我们需要对获取验证码进行一些限制,最常用到的是在规定时间内不得重复发送. 实现倒计时很简单,可以 ...

  5. flask中注册验证码和分页

    注册验证码.核心思路,替换注册页面的img标签的src属性. 1.准备好文件夹:captcha2.导包 from utils.captcha.captcha import captcha3.验证码生成 ...

  6. EF获取DbContext中已注册的所有实体类型

    /// <summary> /// 获取DbContext中已注册的实体类型 /// </summary> /// <typeparam name="T&quo ...

  7. 关于Java的jdbc中 DriverManager.registerDriver(driver); //注册驱动 有没有必要写的思考

    加载数据库驱动的时候,有如下部分代码: /1) 注册驱动程序 //给java.sql.Driver接口的引用赋值 com.mysql.jdbc.Driver 实现类对象// Driver driver ...

  8. frida- registernatives获取so层动态注册函数

    frida获取so层动态注册函数 谢谢大佬的无私奉献https://github.com/lasting-yang/frida_hook_libart 一.js模板一 function hook_Re ...

  9. JAVA jdbc获取数据库连接

    JDBC获取数据库连接的帮助类 import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManage ...

随机推荐

  1. elasticsearch-6.2.3单机搭建

    1.这里说明下,elasticsearch为了保证安全性需要创建新的用户名,需要在新的用户名下运行,本人用的是elasticsearch-6.2.3,centos7.3 2.切换目录到:cd usr/ ...

  2. vmnet2访问外网

    1.vmnet2用于内网之间的访问,外部网络访问不了它.它可以访问外网,要想访问外网就必须有真实主机共享网络给它 2.[root@localhost ~]# vim /etc/sysconfig/ne ...

  3. 【VS开发】动态创建ActiveX控件

    bool CCollectDataDlgDlg::CreateMyCtrl(LPRECT lpRect, UINT nID, CWnd *pParent) {  CLSID clsid;  wstri ...

  4. tableau备份

    备份:数据库备份:https://help.tableau.com/current/server-linux/zh-cn/cli_maintenance_tsm.htm#tsm https://hel ...

  5. [转帖]Ubuntu 18.04 server安装图形界面及realvnc远程桌面连接

    Ubuntu 18.04 server安装图形界面及realvnc远程桌面连接 https://blog.csdn.net/networken/article/details/88938304 转帖 ...

  6. [转帖]oracle 00600 4194 4193 问题的处理

    oracle断电重启之ORA-00600[4194] https://www.cnblogs.com/xwdreamer/p/3778383.html 部门的机器出现异常 断电导致的 错误 从网上学了 ...

  7. Spark架构角色及基本运行流程

    1. 集群角色 Application:基于spark的用户程序,包含了一个Driver program 和集群中多个Executor Driver Program:运行application的mai ...

  8. vs 小贴士

    1. ubuntu上vs code root执行 sudo code --user-data-dir="~/.vscode-root" 2. 设置vs code 打开在新的标签页打 ...

  9. <<C++ Primer>> 第四章 表达式

    术语表 第 4 章 表达式 算术转换(arithmetic conversion): 从一种算术类型转换成另一种算术类型.在二元运算符的上下文中,为了保留精度,算术转换通常把较小的类型转换成较大的类型 ...

  10. Comet OJ - Contest #5 E 迫真大游戏

    怎么说,看了推到之后真的不难,事实上确实也蛮友好(可能咱就是想不出多项式题目的做法???),除了用到了分治法法塔就比较毒瘤 花了一个晚上以及一个上午做这么一道题...(还是太菜了) Result1 分 ...