Test like human
Use when testing a pull request from a real user perspective. Follow PR testing instructions, simulate realistic scenarios, and produce a human-readable report.From its SKILL.md
npx -y skills add pekral/cursor-rules --skill test-like-humanAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
10.1 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it
Constraints
- This skill is stack-agnostic. Detect the project's language, framework, and toolchain in step 1 and choose tools from that detection; the Laravel/PHP commands below are conditional examples for Laravel projects, not defaults. When the project IS Laravel, the Laravel-specific guidance (tinker / artisan /
APP_ENV/FormRequest) stays fully in force. - Apply the project's own conventions where they exist. When a referenced rule or skill is present in the current project, follow it:
@rules/php/core-standards.mdc,@rules/git/general.mdc,@rules/jira/general.mdc,@rules/reports/general.mdc. If a referenced@rules/*file or linked skill (pr-summary,code-review*) does not exist in the current project, skip it and produce the equivalent output directly — never fail because a Laravel-specific dependency is missing. @rules/reports/general.mdc(when present): the tracker comment delegated to@skills/pr-summary/SKILL.mdand any per-scenario annotations folded into it must be written in the language of the source assignment. The in-conversation dev-team follow-up may stay in English.- Output must be human-readable (no technical logs or internal details)
- Focus on user-visible behavior, not implementation
Use when
- You need to validate a pull request from a real user perspective
- You want structured testing based on PR instructions
This skill runs on demand only — never auto-chained from @skills/code-review/SKILL.md, @skills/code-review-github/SKILL.md, @skills/code-review-jira/SKILL.md, @skills/process-code-review/SKILL.md, or @skills/resolve-issue/SKILL.md. Invoke it explicitly via /test-like-human (or the equivalent in-conversation request) after the CR has been published, when a real user-perspective validation is genuinely wanted.
Required approach
1. Understand the context
- Load the pull request (prefer
gh, fallback to MCP tools) - Read description, comments, and discussions
- Identify the expected final behavior
- Detect the project type and toolchain before choosing any tool: the primary language and framework, how the app is started/served, where env/config lives, and which REPL/console the project ships. This detection drives every tool choice below.
- Examples: Laravel/PHP →
php artisan serve,.env,php artisan tinker; Node →npm/pnpmscripts,.env/process.env, thenodeREPL; Python →manage.py shell/python, env vars; Ruby →rails console. - Universal tools stay constant across stacks:
curlfor HTTP APIs, a browser for UI. Only the backend REPL and run commands are stack-specific.
- Examples: Laravel/PHP →
2. Extract testing instructions
- Locate "Testing Recommendations"
- Extract all scenarios
- Do not invent new requirements unless needed to verify suspicious behavior
- Identify the gating mechanism for each scenario and record the exact toggle plus required value needed to reach the changed branch (feature-flag name + value, ENV switch, query string, admin toggle, allow-listed account). This recorded toggle feeds both the step-3 reachability pre-check and the Available behind / first How to test step in the published report.
- Manual reproduction is the primary output of this skill. Mapping each scenario to automated test coverage is a separate completeness check that must not replace the manual run:
- Map each scenario to an existing automated test; if none exists, note the gap.
- When the assignment does not restrict it, write the missing test before the run is considered complete.
- When the assignment explicitly says "test as a human / do not run automated tests", perform the manual run and only note the missing coverage — do not run or extend the suite.
- Build/CI-level scenarios (e.g.
composer build, coverage thresholds) are covered by the project's CI pipeline and need no duplicate test.
3. Choose testing method per scenario
Reachability pre-check (before testing each scenario). Confirm the changed branch is actually reachable in the local/test environment. Environment guards, feature flags, allow-listed accounts, and ENV switches can disable the change locally, so a "PASS" might exercise nothing related to the change — a false positive. Examples of gates: Laravel if (App::environment('production')), a config() / feature-flag check; elsewhere NODE_ENV, build-time flags, process.env.*, LaunchDarkly. If the scenario is gated, either:
- enable the gate (flip the flag, override the ENV, use an allow-listed identity), or
- call the affected method directly with the gate forced (e.g. Laravel
php artisan tinker; otherwise the stack's REPL).
Otherwise a "PASS" does not test anything the change touched.
Then pick the method per scenario:
- UI → browser tools
- API →
curlis mandatory whenever the PR changes the API (see below); otherwisecurlor equivalent (prefer API docs if available) - Backend logic → the stack's REPL (Laravel:
php artisan tinker; Node:node; Python:python/manage.py shell; Ruby:rails console) - CLI → terminal commands
Backend REPL / script setup. Running backend verification through the project's REPL or a throwaway script may require:
- overriding the env so the gated branch runs (Laravel example:
APP_ENV=testing; generally, switching the runtime environment), - raised limits for heavy operations (Laravel/PHP example:
memory_limit; generally, memory/time limits), - a local substitute for production infrastructure that does not run locally (managed DB, cloud SDK, queues).
Use throwaway data and clean up afterwards: delete the artifacts and restore the branch / working tree to its original state.
API changes → mandatory curl verification. If the PR changes the API — route/endpoint definitions, controllers/handlers, the validation layer, response/serialization, or status codes (Laravel examples: routes/api.php, API controllers, FormRequest, API Resources) — curl verification is required, not optional:
- For each changed/added endpoint, issue a real
curlrequest against the local environment with the correct HTTP method, authentication (token / API key), headers, and body. - Verify the contract: status code, response shape and types, validation errors on invalid input, and authorization (no token / foreign token); check idempotency where it applies.
- Cover the happy path and edge/negative cases (missing required field, unauthorized access) — not just
200. - If public API docs exist, verify against them and flag any mismatch between code and docs (code is the source of truth).
Do not over-test — focus on meaningful validation.
4. Execute as a senior tester
For each scenario, think:
- what the user tries to achieve
- where the flow could fail or confuse
- whether behavior feels correct and trustworthy
- for backend changes: whether data ends in the correct state
5. Validate results
- Compare expected vs actual behavior
- Confirm the observed behavior was caused by the changed code, not an unrelated branch or an environment that skips the change. Where it makes sense, verify the triple:
- positive — the fix works,
- negative — a different error / input does not behave like the handled case and does not pass silently,
- legacy preservation — behavior outside the gate stays unchanged.
- Identify inconsistencies, confusion, or broken flows
- Do not expose technical details in conclusions
Report format
Local in-conversation report only — use the template defined in templates/test-report.md for the agent's own working notes (raw scenario results, observations, blockers). This template must not be posted to any tracker.
Deliver
- Reference the pull request
- Include all tested scenarios
- Provide overall summary
- Highlight failed / blocked / unclear cases
- Recommend whether the change is ready from a user perspective
After completion
The tracker-facing output is produced by @skills/pr-summary/SKILL.md when it exists in the project. This skill does not author its own JIRA / GitHub comment template — that responsibility belongs to pr-summary, which already enforces the uniform Authors / Available behind / Summary of changes / How to test contract. When pr-summary is not present in the current project, produce the equivalent tracker comment directly, following the same contract — do not skip the report and do not fail on the missing dependency.
- Hand the raw test-report markdown (from
templates/test-report.md) and the per-scenario results to@skills/pr-summary/SKILL.mdas input context for the publishing step (or, when absent, to your direct report). - Invoke
pr-summarywith the target tracker matching the PR origin (GitHub for GitHub PRs, JIRA for JIRA-tracked work). - The published tracker comment must:
- credit the real change author(s) in the
Authorsline — resolved from git history and PR metadata, never the agent / tester identity running this skill; - include the Available behind line whenever the verified change is reachable only behind a test parameter (feature flag, ENV switch, query string, admin toggle, allow-listed account) — pass the gating toggle and required value recorded in step 2 so its first How to test step enables it;
- in the How to test section, fold the test scenarios actually executed by this skill (including pass / fail / blocked / unclear status next to each step, and the
curlrequest + key contract checks for every API endpoint touched), so the published comment reflects real verification work rather than restating the PR description.
- credit the real change author(s) in the
- Append a short non-public follow-up message to the dev team (in conversation, not on the tracker) listing failed / blocked / unclear scenarios with enough technical detail to act on them. That message is for the developers — it complements the
pr-summarytracker comment, it does not replace it.
What ships with it: 1 file
283 B alongside SKILL.md
templates/
- test-report.md283 B