コンテンツにスキップ

問題の抑制

Mayhem がレポートする問題がすべて API のメンテナーにとって意味がある、 あるいは興味を引くものとはかぎりません。 Mayhem には API テスト ジョブで見つかった問題を抑制する仕組みがあります。

.mapi 構成ファイル

.mapi 構成ファイルは問題の抑制ルールを指定します。

#
# Example .mapi configuration file
#
version: "1.0"

# An array of rules for suppressing issues.
#
# If an issue matches any rule, it will be suppressed
# from reporting.
#
# Any issue will only match a rule if ALL statements for
# a rule match the issue.

suppressed:
- reason: "Suppress Internal API issues"
  path: /internal/.*
- reason: "Ignore flask debug exceptions"
  summary: flask\.debughelpers\.*

問題抑制ルールは、さまざまな問題フィールドに一致する正規表現で構成されます。

suppressed:
- reason: "(required string) Description of why issues matches this rule are suppressed"
  method: "(optional regex) GET|PUT|POST|DELETE|PATCH... etc. Matches HTTP Method"
  path: "(optional regex) /foo|/tools/.* Matches the HTTP request path"
  rule_id: "(optional regex) internal-server-error|auth-bypass|server-crash... Matches mapi rule id"
  summary: "(optional regex) matches additional issue summary - such as stacktrace message"
  response: "(optional regex) Matches against the entire response, headers and payload. *"

レスポンス比較

抑制ルールに response 正規表現が含まれている場合、その正規表現はサーバーのレスポンス全体に適用されます。つまり、ヘッダーで始まり、ペイロードが送信された場合は後続のペイロードを含む、TCP 接続上で送信された生のレスポンスです。

curl -v を使用してアクセスすることで、サーバーからの生の出力に近いものを確認できます。

例: curl -v https://google.com

[...]
< location: https://www.google.com/
< content-type: text/html; charset=UTF-8
< date: Thu, 24 Mar 1970 21:04:22 GMT
< expires: Sat, 23 Apr 1970 21:04:22 GMT
< cache-control: public, max-age=2592000
< server: gws
< content-length: 220
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< alt-svc: h3=":443"; ma=2592000,h3-29=":443";
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

レスポンス内のヘッダーと比較を行うには、次のように response フィールドを追加します。

server: gws

ボディの一部と比較を行うには、次のように response フィールドを追加します。

The document has moved

.mapi ファイルの配置場所

💡 SCM ツールで抑制ルールへの変更を追跡できるよう、ソース管理システムに .mapi ファイルをチェックインすることを推奨します。

mapi CLI は、次の優先順位で .mapi ファイルを解決します。

  1. mapi run 呼び出し時に --config <path-to-file> を使用して設定されたファイル
  2. MAPI_CONFIG_FILE 環境変数で設定されたファイル
  3. mapi run が呼び出された作業ディレクトリにあるファイル
  4. プロジェクトのルート (.git フォルダーがある場合、同じレベル) にあるファイル

抑制された問題の参照

mapi は実行時に抑制された問題もアップロードしますが、デフォルトではそれらの問題は表示されません。たとえば CLI から抑制された問題を表示するには、追加のフラグ --include-suppressed を指定する必要があります。

 mapi issue list <job-id>> --include-suppressed

 ID     RULE_ID                SUMMARY  METHOD  PATH                 SUPPRESSED  SUPPRESSED_REASON
 35717  internal-server-error           GET     pet/findByTags       true        Ignore all GETs
 35716  internal-server-error           GET     pet/{petId}          true        Ignore all GETs
 35715  internal-server-error           POST    user                 false
 35714  internal-server-error           POST    pet                  false