当前位置: 首页 > 知识库问答 >
问题:

响应中缺少API蓝图和Dredd -必填字段,但测试仍然通过

殷宇
2023-03-14

显然,我遗漏了一些东西,因为测试总是通过的,即使我故意定义了一个假的“必需”参数,我知道API的响应中缺少这个参数。Dredd似乎只是测试响应体(数组)的类型,而不是其中的类型和参数。

我的 API 蓝图文件:

FORMAT: 1A
HOST: http://somehost.net

# API Title

## Endpoints [GET /endpoint/{date}]

+ Parameters

  + date: `2016-09-01` (string, required) - Date

+ Response 200 (application/json; charset=utf-8)

    + Attributes (array[Data])


## Data Structures

### Data

- realParameter: 2432432 (number)
- realParameter2: `some string` (string, required)
- realParameter3: `Something else` (string, required)
- realParameter4: 1 (number, required)
- fakeParam: 1 (number, required)

[
  {
    "realParameter": 31,
    "realParameter2": "some value",
    "realParameter3": "another value",
    "realParameter4": 8908
  },
  {
    "realParameter": 54,
    "realParameter2": "something here",
    "realParameter3": "and here too",
    "realParameter4": 6589
  }
]

reporter: apiary
custom:
  apiaryApiKey: somekey
  apiaryApiName: somename
dry-run: null
hookfiles: null
language: nodejs
sandbox: false
server: null
server-wait: 3
init: false
names: false
only: []
output: []
header: []
sorted: false
user: null
inline-errors: false
details: false
method: []
color: true
level: info
timestamp: false
silent: false
path: []
blueprint: myApiBlueprintFile.apib
endpoint: 'http://ahost.com'

有人知道为什么Dredd忽略了“fakeParameter”实际上没有出现在响应体中,并且仍然允许测试通过这一事实吗?

共有1个答案

松和璧
2023-03-14

您已经遇到了MSON的限制,这是API Blueprint用来描述属性的语言。在许多情况下,MSON描述的是数据结构中可能存在的内容,而不是必须确切存在的内容。

最突出的情况是数组,其中数组的任何内容基本上都是可选的,因此底层生成的JSON架构不会对数组内容施加任何约束。Dredd只是尊重这一点,所以间接地它也成为Dredd的问题,但是Dredd对此无能为力。

明显(但繁琐)的解决方法是使用“架构”部分和“属性”部分,使用更严格的规则指定您自己的 JSON 架构

 类似资料:
  • 我正在使用pdfbox-1.8.12从PDF中读取内容以获取XFA。我已经能够成功地为大多数文件获取XFA,而没有遗漏任何字段值。 问题在于一些文件,如错误。pdf。我有许多字段没有像CIN这样的值,但当我在任何PDF查看器、foxit或Acrobat中打开文件时,它会显示该字段。 然后将字节[]转换为字符串。 这是此文件的xfa,如果您在此搜索“U72300DL1996PLC075672”,它将

  • 我用DREDD测试我的Api,因为它的规范(考虑到Dredd在Openapi3中编写的痛苦限制)。否 我有一个终结点,如果 Accept 标头设置如此,它将生成 CSV 数据。 当我用Dredd运行测试时,测试失败 我在这里和这里阅读: - 但它们是什么?根据此页面和此页面,似乎足以指定给定类型的响应,但这显然不足以告诉Dredd生成这样的标头。

  • 问题内容: 与可选字段相比,应如何处理? 由于所有字段都是可选的,因此我无法根据响应json是否包含某些密钥来真正使我的网络请求失败,只需将其解析为null。 我正在使用的方法 例如,如果我有以下json: 而我的班级: 如果json不包含或不包含密钥,是否有任何选择会失败? 在许多情况下,您可能至少需要解析一些值,而其他值是可选的? 是否有任何模式或库可用于全局处理这种情况? 谢谢。 问题答案:

  • 我正在为Junit编写测试,以测试我编写的删除函数: 此方法适用于同时具有前后节点的双链接列表。 问题是:我们的大学将针对我们编写的测试运行错误代码,以确定我们是否编写了足够的测试来捕获错误代码和异常。 我知道他们将运行的两个测试,但不知道错误的含义。 > 失败:缺少逻辑 故障:缺少NextNodeRepairLogic 这是我没有考虑的两个测试,因为我无法理解这些错误的含义。有人知道这些错误可能

  • 我有一个获得名称和描述参数的APIendpoint(两者都是强制性的) 如果客户不提供任何这些,他将收到400个错误请求 有没有办法让我告诉客户缺少哪个字段?为“坏请求”响应提供更多信息

  • 我使用的是openapi 3.0.3版本,我们有scanario,我们不想让一个字段强制响应。下面是开放Api模式Snippit的示例。 例如,这里是MerchantDetails对象,其中“merchantName”和“merchantId”是必填字段。 作为回应,我们使用相同的对象,但我们只希望根据需要保留一个字段“merchantId”。有没有办法在不创建新对象的情况下实现这一点?