1

需要对 Oracle 数据库进行负载测试,要求是同时向从 CSV 文件读取变量的数据库触发 sql 查询,这可行吗?

有一个 CSV 文件,其值如下

Name        Email
Justin      justin@beiber.com
George      george@washington.com
...
Micheal     micheal@jackson.com

然后有 10,20,30 个用户触发类似的查询

select name,phone,city
from address
where name = <<feild1-from-csv>>
and email = <<feild2-from-csv>>
...
4

1 回答 1

1

我建议将您的测试逻辑分成两个独立的部分:

  1. 从 CSV 加载信息并将其存储为 JMeter 变量
  2. 使用第 1 点中的变量对 Oracle 执行 SQL 代码

关于实现,我建议使用 2 个单独的线程组,第一个将从 CSV 加载内容,第二个将进行实际测试。

重要提示:不要忘记在 TestPlan 级别选中“连续运行线程组”框,以确保第二个线程组第一个线程组之后运行。

第一个线程组的示例配置:

  1. 柜台

    • 开始 - 1
    • 增量 - 1
    • 参考名称 - 计数器
  2. CSV 数据集配置

    • 文件名 - csv 文件的路径
    • 变量名称 - 名称、电子邮件
    • 分隔符 - 如果您使用的是 TAB - "\t",如果是逗号 - ","不带引号
    • 允许引用数据 - 假
    • 在 EOF 上回收 - 错误
    • 在 EOF 上停止线程 - 真
    • 共享模式 - 所有线程
  3. Beanshell Sampler(这个是可选的,JMeter 2.10 足够聪明,可以为你存储变量,但我更喜欢自己控制一切)

Beanshell 采样器的代码应如下所示:

props.put("name" + vars.get("counter"), vars.get("name"));

props.put("email" + vars.get("counter"), vars.get("email"));

它获取当前的“名称”变量并将其存储为名称 + 计数器属性。

因此,给定 3 行是 CSV 文件,您将具有以下属性:

name1=Justin
email1=justin@beiber.com
name2=George 
email2=george@washington.com
name3=Micheal
email3=micheal@jackson.com

您可以使用 Debug Sampler 查看 JMeter 变量和属性值

之后,在第二个线程组中,您可以将存储的属性称为:

${__P(name1,)}

或者

${__property(name1,,)}

在您的 JDBC 请求采样器中。

两者都应该工作。

于 2013-11-14T12:19:20.443 回答