JSON 架构验证失败。找到数组值,但需要 null 或对象。 - 在 JMeter 中,由于列表值中存在特殊字符

问题描述 投票:0回答:1

简而言之:

我得到了(

JSON 架构验证失败。找到数组值,但为 null 或 需要对象

)我使用 BeanShell PreProsser 创建的自定义 HTTPS 示例请求负载的响应负载上的错误消息,用于发送几个数组。

第1步:

我正在使用 BeanShell PreProcessor 从 CSV 文件 (sampleGroups.csv) 中的可用数据创建对象,如下所示:

import java.text.*;
import java.io.*;
import java.util.*;

ArrayList stl = new ArrayList();  
int count = 1;

int limit = ${__P(upcLimit,101)};    

try {
File file = new File (${__P(data1, "sampleGroups.csv")});

if (!file.exists()) {
    throw new Exception ("ERROR: file not found");
}

BufferedReader bufRdr = new BufferedReader(new FileReader(file));
String line = null;

while(((line = bufRdr.readLine()) != null) && (count < limit))
{
    stl.add(line);
    count++;
}

bufRdr.close();   
}
catch (Exception ex) {
IsSuccess = false; 
log.error(ex.getMessage());
System.err.println(ex.getMessage());
}
catch (Throwable thex) {
System.err.println(thex.getMessage());
}
vars.putObject("groups",stl);

第2步:

然后在主请求有效负载中添加“groups”对象以制作如下数组:

{
  "included": {
    "groups": ${groups},
    "tags": ${tags}
  }
}

注意:我使用类似的步骤创建了一个“标签”数组 BeanShell 预处理器。

第 3 步(请求薪资):

那么 HTTP Sampler 发布的请求负载如下:

{
  "included": {
    "groups": [
      "CANDY, GUM & MINTS",
      "TAKE HOME CANDY, GUM & MINTS",
      "SEASONAL CANDY, GUM & MINTS",
      "BULK CANDY/GUM/MINT -NS"
    ],
    "tags": [
      "ACME,ADAL,AIMT,AJWL,AKBA,ASHA,ASOC,AVMT,PSOC,RDAL,SACG,SDEN,SHAW,SHGN,SNCA,SPHO,SPRT,SSEA,SSPK,SWMA,VLAS,VSOC",
      "ACME,ADAL,AIMT,AJWL,ASHA,ASOC,AVMT,PSOC,RDAL,SACG,SHAW,SNCA,SPRT,SSEA,SSPK,SWMA,VSOC",
      "ACME,AKBA,SWMA",
      "ACME,ADAL,AIMT,AJWL,AKBA,ASHA,ASOC,AVMT,PSOC,RDAL,SACG,SDEN,SHAW,SHGN,SNCA,SPHO,SPRT,SSEA,SSPK,SWMA,UNTD,VLAS,VSOC"
    ]
  }
}

第 4 步 - 响应 PAYLOD(有错误):

但是,我在“groups”数组的响应负载上遇到以下错误,而不是“tags”数组的响应负载:

{"errorCode":"ISF","errorMessage":"JSON schema validation failed in 2 areas in included.groups - Array value found, but a null or an object is required"}

这些与数组的唯一区别是“groups”数组中的项目具有特殊字符,例如空格、逗号、与号、斜杠等。而“tags”没有任何特殊字符。

- 注意事项:

sampleGroups.csv 文件中包含的测试数据具有根据客户提供给我的原始数据的特殊字符。因为数据被提取到数据库中,如下所示,因此它必须具有这些字符才能对生产数据进行类似的处理。我需要按原样发送带有列表的数组。

sampleGroups.csv
"CANDY, GUM & MINTS"
"TAKE HOME CANDY, GUM & MINTS"
"SEASONAL CANDY, GUM & MINTS"
"BULK CANDY/GUM/MINT -NS"

sampleTags.csv
"ACME,ADAL,AIMT,AJWL,AKBA,ASHA,ASOC,AVMT,PSOC,RDAL,SACG,SDEN,SHAW,SHGN,SNCA,SPHO,SPRT,SSEA,SSPK,SWMA,VLAS,VSOC"
"ACME,ADAL,AIMT,AJWL,ASHA,ASOC,AVMT,PSOC,RDAL,SACG,SHAW,SNCA,SPRT,SSEA,SSPK,SWMA,VSOC"
"ACME,AKBA,SWMA"
"ACME,ADAL,AIMT,AJWL,AKBA,ASHA,ASOC,AVMT,PSOC,RDAL,SACG,SDEN,SHAW,SHGN,SNCA,SPHO,SPRT,SSEA,SSPK,SWMA,UNTD,VLAS,VSOC"

我尝试过:

我发现 1 篇post 确实触及了与 JSON Schema 验证相关的问题。但是,它不适用于我的问题。

任何帮助将不胜感激。谢谢!

arrays json validation jmeter schema
1个回答
0
投票

您的被测系统会告诉您问题出在哪里。

它需要一个 JSON 对象(或 null),而您需要提供一个 JSON 数组

也许您的被测系统需要这样的东西:

{
  "included": {
    "groups": {
      "group1": ["CANDY", "GUM & MINTS"],
      "group2": ["TAKE HOME CANDY", "GUM & MINTS"],
      "group3": ["SEASONAL CANDY", "GUM & MINTS"],
      "group4": ["BULK CANDY/GUM/MINT -NS"]
    },
    "tags": {
      "tag1": ["ACME", "ADAL", "AIMT", "AJWL", "AKBA", "ASHA", "ASOC", "AVMT", "PSOC", "RDAL", "SACG", "SDEN", "SHAW", "SHGN", "SNCA", "SPHO", "SPRT", "SSEA", "SSPK", "SWMA", "VLAS", "VSOC"],
      "tag2": ["ACME", "ADAL", "AIMT", "AJWL", "ASHA", "ASOC", "AVMT", "PSOC", "RDAL", "SACG", "SHAW", "SNCA", "SPRT", "SSEA", "SSPK", "SWMA", "VSOC"],
      "tag3": ["ACME", "AKBA", "SWMA"],
      "tag4": ["ACME", "ADAL", "AIMT", "AJWL", "AKBA", "ASHA", "ASOC", "AVMT", "PSOC", "RDAL", "SACG", "SDEN", "SHAW", "SHGN", "SNCA", "SPHO", "SPRT", "SSEA", "SSPK", "SWMA", "UNTD", "VLAS", "VSOC"]
    }
  }
}

如果没有看到 JSON 模式或示例工作请求,我们无法帮助您将 CSV 数据转换为 JSON 有效负载,但有一点是显而易见的:您应该 重新考虑使用 Beanshell 并切换到使用 Groovy 语言的 JSR223 预处理器,主要原因是:

© www.soinside.com 2019 - 2024. All rights reserved.