
graphql-api-testing
by graysurf
codex-kit tracks Codex CLI setup to keep workflows consistent across machines.
SKILL.md
name: graphql-api-testing description: Test GraphQL APIs with repeatable, file-based operations and variables under /setup/graphql, with per-project endpoint presets in setup/graphql/endpoints.env, using the bundled gql.sh (xh/httpie/curl + jq). Use when the user asks to manually call GraphQL queries/mutations, fetch JWTs, replay requests reliably, and record API test reports.
GraphQL API Testing
Contract
Prereqs:
bashandjqavailable onPATH.- HTTP client:
xhorhttporcurl. setup/graphql/exists (or bootstrap from template) with operations, vars, and optional endpoint/jwt presets.
Inputs:
- Operation + variables:
setup/graphql/operations/<op>.graphqlandsetup/graphql/operations/<vars>.json. - Optional flags/env:
--env,--url,--jwt,--config-dir,--no-history(plusGQL_URL,ACCESS_TOKEN).
Outputs:
- Response JSON printed to stdout; errors printed to stderr.
- Optional history file under
setup/graphql/.gql_history(gitignored; disabled via--no-history). - Optional markdown report via
$CODEX_HOME/skills/tools/testing/graphql-api-testing/scripts/gql-report.sh.
Exit codes:
0: request completed successfully- non-zero: invalid inputs/missing files/http error/client error
Failure modes:
- Missing supported HTTP client (
xh/http/curl). - Invalid GraphQL/variables JSON, or missing config files.
- Auth missing/invalid (JWT) or network/timeout/connection failures.
Goal
Make GraphQL API calls reproducible via:
setup/graphql/operations/*.graphql+*.json(operations + variables)setup/graphql/endpoints.env(+ optionalendpoints.local.env)setup/graphql/jwts.env(+ optionaljwts.local.env)setup/graphql/schema.env(+ committed schema SDL, e.g.schema.gql)setup/graphql/prompt.md(optional, committed; project context for LLMs: what to test, DB tooling, other test utilities)
TL;DR (fast paths)
Call an existing operation:
$CODEX_HOME/skills/tools/testing/graphql-api-testing/scripts/gql.sh \
--env local \
--jwt default \
setup/graphql/operations/<operation>.graphql \
setup/graphql/operations/<variables>.json \
| jq .
Generate a report (includes a replayable ## Command by default):
$CODEX_HOME/skills/tools/testing/graphql-api-testing/scripts/gql-report.sh \
--case "<test case name>" \
--op setup/graphql/operations/<operation>.graphql \
--vars setup/graphql/operations/<variables>.json \
--env local \
--jwt default \
--run
Generate a report from a copied gql.sh command snippet (no manual rewriting):
$CODEX_HOME/commands/api-report-from-cmd '<paste a gql.sh command snippet>'
If your repo bootstrapped setup/graphql/ from the template, you can also use:
setup/graphql/api-report-from-cmd.sh '<paste a gql.sh command snippet>'
Replay the last run (history):
$CODEX_HOME/skills/tools/testing/graphql-api-testing/scripts/gql-history.sh --command-only
Resolve committed schema SDL (for LLMs to author new operations):
$CODEX_HOME/skills/tools/testing/graphql-api-testing/scripts/gql-schema.sh --config-dir setup/graphql
Flow (decision tree)
- If
setup/graphql/prompt.mdexists → read it first for project-specific context. - No
setup/graphql/yet → bootstrap from template: cp -R "$CODEX_HOME/skills/tools/testing/graphql-api-testing/assets/scaffold/setup/graphql" setup/- Have schema but no operation yet → resolve schema (
gql-schema.sh) then addsetup/graphql/operations/<name>.graphql+ variables json. - Have operation → run with
gql.sh. - Need a markdown report → use
gql-report.sh --run(or--response).
Notes (defaults)
- History is on by default:
setup/graphql/.gql_history(gitignored); one-off disable with--no-history(orGQL_HISTORY_ENABLED=false). - Reports include
## Commandby default; disable with--no-command(orGQL_REPORT_INCLUDE_COMMAND_ENABLED=false). - Variables: any numeric
limitfields (including nested pagination inputs) are normalized to at leastGQL_VARS_MIN_LIMIT(default: 5; setGQL_VARS_MIN_LIMIT=0to disable). - Prefer
--config-dir setup/graphqlin automation for deterministic discovery.
CI / E2E (optional)
In CI, use gql.sh as the runner and jq -e as assertions (exit code is the contract):
set -euo pipefail
$CODEX_HOME/skills/tools/testing/graphql-api-testing/scripts/gql.sh \
--config-dir setup/graphql \
--env staging \
--jwt ci \
setup/graphql/operations/<operation>.graphql \
setup/graphql/operations/<variables>.json \
| jq -e '(.errors? | length // 0) == 0 and .data != null' >/dev/null
Notes:
- Many GraphQL servers return HTTP 200 even when
.errorsis present, so assert it explicitly. - If you don’t want CI jobs to write history, add
--no-history(or setGQL_HISTORY_ENABLED=false).
References
- Full guide (project template):
skills/tools/testing/graphql-api-testing/references/GRAPHQL_API_TESTING_GUIDE.md - Report contract:
skills/tools/testing/graphql-api-testing/references/GRAPHQL_API_TEST_REPORT_CONTRACT.md - Report template:
skills/tools/testing/graphql-api-testing/references/GRAPHQL_API_TEST_REPORT_TEMPLATE.md
スコア
総合スコア
リポジトリの品質指標に基づく評価
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
レビュー
レビュー機能は近日公開予定です