使用JMeter,如何将表数据与JSON数据进行比较?

时间:2018-11-19 10:10:36

标签: postgresql rest jmeter compare assertion

我有一个任务来比较从postgreSQL表中获取的所有数据和使用REST API(带有JSON数据的HTTP请求)的网站上的所有数据,以查看缺少的数据。

我使用JDBC请求(SELECT * FROM exampleTable)从postgreSQL获取数据,数据采用标准SQL表格式。

我使用HTTP请求采样器获取REST API数据,数据为JSON格式:

{“记录”:[{“ id”:“ rec6iT8M0YFZc9kxf”,“字段”:{“生日”:“ 2010-09-01”,“性别”:“女性”,“目前在牧场”:[ “ rec7hRbjrgTaKWdCs”],“品种”:“ Jersey”,“重量”:1800,“名称”:“ Jerri”,“附件”:[{“ id”:“ attbz”,“ url”:“ {{3} }“,” filename“:” Jersey_cow.jpg“,” size“:1555316,” type“:” image / jpeg“,” thumbnails“:{” small“:{” url“:” https://IaGSYtK8SlS.jpg“ ,“ width”:27,“ height”:36},“ large”:{“ url”:“ https://_Jersey_cow.jpg”,“ width”:256,“ height”:341}}}]}}

等等等

两个请求应具有相同的数据格式(用于比较的相同“列”>名称,性别,品种,体重等)

我尝试使用JSON Extractor后处理器元素从HTTP响应中获取单个变量,并使用Response Assertion元素将它们与JDBC请求中的单个变量进行比较,但是没有运气

我遇到此错误:断言失败消息:java.lang.ClassCastException:java.util.ArrayList无法转换为java.lang.String(可能是因为我使用的是整个SQL数据集,而不是各个列的数据)

或类似的东西: 断言失败消息:测试失败:文本应与/ $ {gender} /

匹配

我不知道如何成功地将变量分配给SQL表和JSON响应中的数据,然后匹配那些变量值(查看REST API提取的内容中缺少哪些条目)

有没有一种简单的方法可以使用jmeter GUI来执行此操作,而不必依赖beanshell / groovy或任何其他类型的脚本(因此只需使用jmeter中可用的元素)?

谢谢!

1 个答案:

答案 0 :(得分:1)

不知道您的数据库结构,想出确切的解决方案非常棘手,但是您可以使用JSR223 PostProcessor

将JDBC Request输出转换为JSON。

示例:

  • 给出以下JDBC Request采样器配置:

    enter image description here

  • 将产生以下输出:

    enter image description here

  • 我可以使用以下Groovy代码将其转换为JSON:

    def result = vars.getObject('result')
    def json = new groovy.json.JsonBuilder(result).toPrettyString()
    log.info(json)
    

    enter image description here

    如您所见,它包含列名和值,您应该可以将其用于断言。

更多信息:Debugging JDBC Sampler Results in JMeter