我有 csv 文件,它将被处理并保存在数据库中。我需要验证 CSV 与 DB 的内容。 CSV 文件有
IDENTIFIER|AUDIT_ACTION|EMPLID|NAME|EFFDT|LAST_NAME|FIRST_NAME
PERSON_STG|A|731757|Abhijit |01-Oct-2010|SS|Abhijit
PERSON_STG|A|743910|Singh|02-May-2011|S|Arshita
.......................
DB 有一个表,其中包含 CSV 文件中每个值的列(例如
Emplid
、Firstname
、lastname
)
我需要验证 csv 中由分隔符分隔的每个值是否保存在数据库中。
我已经尝试过了
您可以帮助了解如何比较 CSV 文件 JDBC 响应吗
假设数据库中有数据,如下所示:
mysql> select * from cvdata;
+------------+--------------+--------+---------+-------------+-----------+------------+
| IDENTIFIER | AUDIT_ACTION | EMPLID | NAME | EFFDT | LAST_NAME | FIRST_NAME |
+------------+--------------+--------+---------+-------------+-----------+------------+
| PERSON_STG | A | 731757 | Abhijit | 01-Oct-2010 | SS | Abhijit |
| PERSON_STG | A | 743910 | Singh | 02-May-2011 | S | Arshita |
+------------+--------------+--------+---------+-------------+-----------+------------+
2 rows in set (0.00 sec)
如果您在 JDBC Request 采样器中发出 SELECT 语句,配置如下:
您将获得以下JMeter变量(可以使用调试采样器和查看结果树侦听器组合进行可视化)
请参阅在 JMeter 中调试 JDBC 采样器结果 文章,了解有关在 JMeter 中使用 JDBC 请求结果的更多信息
Forever
添加 CSV Data Set Config 作为循环控制器的子项并进行如下配置:
上述配置假设您的 CSV 文件如下所示:
IDENTIFIER|AUDIT_ACTION|EMPLID|NAME|EFFDT|LAST_NAME|FIRST_NAME
PERSON_STG|A|731757|Abhijit |01-Oct-2010|SS|Abhijit
PERSON_STG|A|743910|Singh|02-May-2011|S|Arshita
如果不同 - 您将需要修改您的 CSV 数据集配置。
请注意,我故意在
Abhijit
后面留了一个空格,以触发测试失败以用于演示目的,如果您想检查“快乐路径”,请将其删除差不多就这样了,现在你要做的就是比较if
IDENTIFIER
变量等于IDENTIFIER_1
变量IDENTIFIER
变量在第二次迭代时等于 IDENTIFIER_2
AUDIT_ACTION
变量在第一次迭代时等于AUDIT_ACTION_1
AUDIT_ACTION
变量在第二次迭代时等于 AUDIT_ACTION_2
为了检查这些,您可以添加一个 JSR223 Sampler 作为循环控制器的子级,并将以下代码放入“脚本”区域:
int loop = (vars.get('__jm__Loop Controller__idx') as int) + 1
if (!vars.get('IDENTIFIER_' + loop).equals(vars.get('IDENTIFIER'))) {
SampleResult.setSuccessful(false)
SampleResult.setResponseMessage('IDENTIFIER mismatch')
}
if (!vars.get('AUDIT_ACTION_' + loop).equals(vars.get('AUDIT_ACTION'))) {
SampleResult.setSuccessful(false)
SampleResult.setResponseMessage('AUDIT_ACTION mismatch')
}
if (!vars.get('EMPLID_' + loop).equals(vars.get('EMPLID'))) {
SampleResult.setSuccessful(false)
SampleResult.setResponseMessage('EMPLID mismatch')
}
if (!vars.get('NAME_' + loop).equals(vars.get('NAME'))) {
SampleResult.setSuccessful(false)
SampleResult.setResponseMessage('NAME mismatch')
}
if (!vars.get('EFFDT_' + loop).equals(vars.get('EFFDT'))) {
SampleResult.setSuccessful(false)
SampleResult.setResponseMessage('EFFDT mismatch')
}
if (!vars.get('LAST_NAME_' + loop).equals(vars.get('LAST_NAME'))) {
SampleResult.setSuccessful(false)
SampleResult.setResponseMessage('LAST_NAME mismatch')
}
if (!vars.get('FIRST_NAME_' + loop).equals(vars.get('FIRST_NAME'))) {
SampleResult.setSuccessful(false)
SampleResult.setResponseMessage('FIRST_NAME mismatch')
}
如果有任何不匹配,它将失败:
CSV 中的记录与 DB 中的顺序不同。 DB有更多记录。所以所有记录都不匹配。如何循环 CSV 中的每一列,例如 EMPLID 值“731757”必须搜索 DB 中的所有 EMPID 值,如果找到,则断言应该通过。