如何通过 Jmeter 中的系统变量设置 jdbc 连接配置

Posted

技术标签:

【中文标题】如何通过 Jmeter 中的系统变量设置 jdbc 连接配置【英文标题】:How to set jdbc connection configuration via system variables in Jmeter 【发布时间】:2018-02-16 15:35:13 【问题描述】:

出于安全原因,我们有通用测试机,一名测试员不应在采样器中看到另一名测试员的 jdbc 配置详细信息,因为有可能滥用用户名和密码以及其他详细信息。

1.有没有办法为MySQL、DB2、Microsoft SQL等多个数据库的不同jdbc连接配置设置系统变量。例如:应用程序 X 使用 Microsoft SQL,而应用程序 Y 使用 DB2,应用程序 Z 使用 MySQL。 Y 和 Z 是集成层。 数据库URL、JDBC驱动类、用户名、密码的变量。请提供示例。

2.Tester需要在测试开始前通过命令行运行#1怎么做?命令行是什么?。请提供示例。

3.在JDBC请求中,而不是硬编码sql脚本如何发送可能包含一堆SQL脚本或单个SQL脚本的SQL脚本路径。。请提供示例。

我已经尝试了下面的截图,但始终只返回唯一 sql 查询的结果,但是当查看采样器请求时,我看到所有已发送的查询,但响应仅针对第一个查询。

4.对于分布式测试,上述任何需要特别注意的事项。.请提供示例。

如何实现#1、#2、#3 和#4。

以下是最新截图 下面的#1 和#2 是截图

#3 下面是截图

谢谢, 拉杰

【问题讨论】:

【参考方案1】:

每个用户可以在命令行(-JdbUser)或使用属性文件发送不同的属性。

将每个动态参数定义为 dbUser 作为属性 $dbUser,以便每个用户都有不同的连接。

【讨论】:

我已经尝试了#3,但只执行了文件中的第一个 sql 查询。当我查看 jdbc 示例请求的请求时,请求进展顺利,但只返回了第一个查询的响应,其余的没有(请参阅原始帖子的屏幕截图)。您能否详细说明#1,并通过举例提供完整的命令。 我已经弄清楚了#1 和#2。有人可以在#3 上帮助我吗,因为我总是提到只有第一个 SQL 查询返回结果,尽管 Jdbc 请求能够成功读取所有列表来自文件的 SQL 查询。 #3 使用 CSV 数据集,它将读取 csv 文件中的所有 SQL。 meta.stackexchange.com/help/someone-answers【参考方案2】:

    您可以使用__groovy function 之类的方式访问操作系统Environment Variables

    $__groovy(System.getenv('DB2_PASSWORD'),)
    

    取决于您的操作系统,即:

    对于 Windows 系列,命令行类似于:set DB2_PASSWORD=secret 对于 Unix 系列,它将是:DB2_PASSWORD=secret && export DB2_PASSWORD

    最简单的方法是使用Directory Listing Config Plugin

    根据Remote Testing用户手册条目:

    如果测试使用任何数据文件,请注意这些文件不是由客户端发送的,因此请确保这些文件在每个服务器上的相应目录中可用。如有必要,您可以通过编辑每个服务器上的 user.properties 或 system.properties 文件来定义不同的属性值。这些属性将在服务器启动时被拾取,并可用于测试计划以影响其行为(例如,连接到不同的远程服务器)。或者在测试使用的任何数据文件中使用不同的内容(例如,如果每个服务器必须使用唯一的 id,则在数据文件之间划分它们)

    JMeter 从属设备完全独立,因此您需要在每个从属设备上进行相同的环境变量设置、复制 JDBC 驱动程序和 SQL 脚本、进行配置更改等 /强>,

【讨论】:

我已经为#1 和#2 使用了属性文件阅读器,jdbc 连接工作正常。对于#3,我为每个 SQL 查询创建了 5 个 csv 文件,当我执行它时只执行 1 个 csv 文件和抛出错误。我不确定我是在做混合还是错误地使用直接列出数据源插件来执行 SQL 查询。请参阅下面是我添加到原始帖子的最新屏幕截图部分。请告诉我。 目录列表数据源将只获取文件名,您需要使用__FileToString() function 才能从文件中读取查询,例如$__FileToString($filename,,) 我在一个文件中保存了 5 个 Sql 查询,目录列表成功完成,找到 1 个文件:$filename = C:\JMETER\LR2JMeter\NGP\Scripts\Database\NGP_Database.csv并在 jdbc 请求中传递了 $__FileToString($filename,,) 。请求成功运行了 5 个 sql 查询,但始终只返回第 1 个 sql 查询的结果。 如果单个文件中有 5 个 sql 查询,则需要使用 __StringFromFile() 或 CSVRead() 函数 我已经尝试了所有这些 $__StringFromFile(C:\JMETER\LR2JMeter\NGP\Scripts\SV_Db2Queries.csv,,,) $__StringFromFile(C:\JMETER\LR2JMeter\NGP\Scripts \SV_Db2Queries.txt,,,) $__StringFromFile(C:\JMETER\LR2JMeter\NGP\Scripts\SV_Db2Queries.sql,,,) 但仍然每次只读取 1 个和第一个 sql 查询

以上是关于如何通过 Jmeter 中的系统变量设置 jdbc 连接配置的主要内容,如果未能解决你的问题,请参考以下文章

jmeter循环读取数据库表中的数据

如何用JMeter对MySQL数据库进行压测

jmeter接口测试如何获取token&设置全局变量并引用

JMeter JDBC 手动提交

jmeter—JDBC request动态参数设置

Mac系统下Jmeter的下载安装及环境变量配置