Jmeter从数据库获取测试数据, 作为下一个接口参数方法

下载驱动包

首先得下载mysql jdbc驱动包(注:驱动包的版本一定要与你数据库的版本匹配,驱动版本低于mysql版本有可能会导致连接失败报错

mysql jdbc驱动包:mysql-connector-java-8.0.13.jar

                   sqljdbc4-4.0.jar

将这两个jar包放到Jmeter目录中的lib文件下,然后重启Jmeter

 

 

添加jdbc connection configuration

1.添加线程组

 

 2.添加配置元件:JDBC Connection Configuration

 

 

3.JDBC Connection Configuration 基本配置

 

 

 

Variable Name:数据库连接池的名称,因为一个测试计划可以有多个 JDBC Connection Configuration,每个可以取不同的名称。在 jdbc request 中通过这个名称选择合适的连接池进行使用。(注意Variable Name命名必须和之后JDBC Request中的Variable Name 命名一致)

Max Number of Connections:最大连接数;如果做性能时,建议填 0;如果默认为 10,表示最大只能连接 10 个线程;

Max Wait(ms):最大等待时间,单位毫秒;

Time Between Eviction Runs(ms):有空闲的线程数,释放不使用的线程;

Auto Commit:自动提交,默认为 true,如修改数据库时,自动 commit

Database URLjdbc:mysql://${host}:${port}/dbname?allowMultiQueries=true(允许执行多条sql

JDBC Driver class:com.mysql.jdbc.Driver

Username:数据库用户名

Password:数据库密码

添加JDBC request

注:这个 Sampler 可以通过 sql 语句向数据库发送一个 jdbc 请求,并对获取返回的数据进行操作。它需要和 JDBC Connection Configuration一起使用

 

 

Variable Name:数据库连接池的名字,需要与 JDBC Connection Configuration Variable 保持一致

Query type:表示sql类型。select表示查询,update表示更新。不同的sql类型需要指定不同的type

Query :填写 sql 语句,下拉可以选择不同类型的sql

Parameter valus:参数值

Variable names:保存 sql 语句返回结果的变量名

Result variable name:创建一个对象变量,保存所有返回的结果

Query timeout:查询超时时间

Handle result set:定义如何处理由 callable statements 语句返回的结果

执行线程,查看结果

表数据:

 

 

执行的结果:

 

 

如何从数据库pub_tb_user表查出user_type为2username和count(*),然后把所有查出来的username和count(*)作为参数值,用于下一个接口。

分析:

1.我们查出来的count(*)将只有一个值,而login_name会有很多个,具体多少根据我们的条件user_type来变化;

2.查询出所有login_name后,我怎么取到每一个login_name的值?

3.又怎么把我们查出来的每一个login_name作为参数值去请求下一个接口?

 

操作步骤:

1.jdbc请求的sql中可以传入变量,在login_name这个request里面,下方的 variable name这里填上你想使用的变量名,也就是之后的接口中要用到的,我取的login_name,同理,countrequest里也做相同操作,可以取为count

 

 

 

 2.下面测试成功了没,使用登录接口,使用取到的login_name进行登录

原来当使用jdbc request的结果作为参数时,要写成${username_1}这样子,1代表你查出来的数据第一行,想取第几行就把1改成几

 

 

 

执行结果:

 

 

从响应,可以看到登录成功了,从而可以知道参数已经成功获取

但是username却有很多条,我是想所有的username都请求一次,也就是说如果是username这个变量的话,1这个数字应该是要不断变化的而不是某个固定的值,那怎么才能让他不断变化呢?

3.添加一个计算器

 

由于我们从第一行开始取值,所以启动填1,每次我们多1,所以递增也填1,最大值可不填,number format就是数字格式,如果填000,取值是12,那最后会显示为012,而我们只需要本身的数字,所以就填0,引用名称就是后面需要用的变量名

 4.有了计数器,能递增了,那我们就能把login_name传进去了。我们上面说了${login_name_1}是取第一行,${login_name_2}是取第二行,依次类推,那我们要从1开始取,一直到最后。上一步添加的计数器就起作用了,我们设置的计数器是从1开始计数,每次递增1,那么跟我们想要的完全吻合,index就是我们设置的计数器的变量名,可以直接用他来代替我们的数字1,2,3,4等等,那我们现在来把login_nameindex两个变量拼接起来,这里如果你直接写成 ${login_name_index}或者 ${login_name_${index}}都是不行的,因为两个变量不能直接拼接,需要用到一个函数 __V,不了解这个函数的可以百度看看,作用就是可以使2个变量可以拼在一起,所以我们拼接后的login_name变量应该是${__V(login_name_${index})}

 

 

 

 5.此时还要加一个循环控制器,点击插入上级--逻辑控制器--循环控制器,循环次数,我们使用count变量,即${count_1},这样就能把次数确定。这里其实不能用添加线程的方式来做,因为count login_name两个jdbc request都在这个线程里,如果设置多线程,这两个也会多次请求,不合理,所以我们选择更好的循环控制器

 

 

 6.设置好之后,查看下执行结果,可以看到有8login请求,且每个请求的login_name都不一样

 

 

 

posted @ 2019-06-18 19:13  为什么要取名字  阅读(719)  评论(0编辑  收藏  举报