Review and Stretch Goals

8 min read

You've finished the capstone — or at least taken a serious first pass at it. This lesson is the part most courses skip and the part that matters most: a structured review of your own work, a set of stretch goals to push the suite further, and concrete pointers for what to learn next. Treat the checklist below as a rubric — tick what you've genuinely produced, leave blank what you skipped, and use the gaps to plan a second pass. The honest scorers learn the most.

Self-assessment checklist

Walk through every line. The point isn't to score 100% — it's to see clearly what you have and what you don't.

Collection structure

  • ☐ Single collection named PetStore API Tests.
  • ☐ Folders by feature: Auth, Categories, Pets, Orders, CRUD Chain, plus optionally Negative Cases and Smoke.
  • ☐ Verb-first request names (GET All Pets, POST Create Pet, DELETE Pet).
  • ☐ Collection-level description with run instructions, owners, source-of-truth pointer.
  • ☐ Folders have at least a sentence of description each.

Environments

  • ☐ Three environments: Local, Staging, Production.
  • ☐ Each contains baseUrl, testEmail, testPassword.
  • ☐ Real credentials live in Current value; Initial value is empty or placeholder.
  • Production is documented as read-only smoke.
  • ☐ Switching the environment dropdown actually swaps the targeted host with no request edits.

Authentication

  • ☐ Collection-level Bearer auth using {{authToken}}.
  • POST Register and POST Login override to No Auth.
  • ☐ Pre-request script at the collection level checks tokenExpiry and re-logs in via pm.sendRequest.
  • tokenExpiry is set 1 minute before actual expiry to avoid race conditions.
  • ☐ Tested: clearing authToken causes the next request to log in automatically.

Test assertions (Chapter 3)

  • ☐ At least 30 pm.test() blocks across the collection.
  • ☐ Every request asserts a specific status code (not just 2xx wherever exact matters).
  • ☐ Every request with a body asserts at least one field of that body.
  • ☐ At least 5 requests assert on the Content-Type header.
  • ☐ At least one JSON Schema validated with tv4.
  • ☐ At least 5 negative tests in a Negative Cases folder (missing field, wrong content-type, wrong auth, duplicate, oversized).
  • ☐ At least one to.not.have.property("password") style negative assertion on user-data responses.

Chained CRUD flow

  • CRUD Chain folder with 6 numbered requests.
  • ☐ Each step extracts the value(s) the next step needs (authToken, userId, petId, orderId).
  • ☐ All extractions guarded by an assertion ("login successful" before pulling token).
  • ☐ Running the folder via Collection Runner → all 6 pass.
  • ☐ Console logs show variables being set on each step.

Data-driven testing

  • pets-data.csv with at least 10 rows.
  • ☐ Mix of valid and invalid inputs (~60/40 valid/invalid).
  • ☐ At least one row exercises injection-style input ('; DROP TABLE--, <script>).
  • ☐ Tests script reads pm.iterationData.get("expectedStatus") and uses it.
  • ☐ Test names include row context (`Iteration "${name}" → ${expected}`).
  • ☐ Collection Runner finishes 10 iterations with the expected pass/fail distribution.

Newman + reports

  • ☐ Collection and environments exported to postman/ and committed to Git.
  • package.json with newman and newman-reporter-htmlextra as devDependencies.
  • npm run test:api works locally; exit code is 0 when all pass.
  • reports/api-report.html opens in a browser and renders correctly.
  • ☐ JUnit XML (reports/results.xml) produced.
  • ☐ At least three npm scripts: test:api, test:api:smoke, test:api:data.
  • reports/ and node_modules/ in .gitignore.

CI/CD

  • .github/workflows/api-tests.yml exists.
  • ☐ Workflow triggers on push and pull_request.
  • ☐ Newman is invoked with npx newman run.
  • ☐ Secrets pulled from GitHub Actions Secrets via --env-var, never from committed files.
  • reports/ uploaded as an artifact with if: always().
  • ☐ At least one successful run visible in the GitHub Actions tab.
  • ☐ Workflow status visible on the repo's main page.

Documentation and sharing

  • ☐ Collection has a multi-paragraph markdown description.
  • ☐ Every folder has a one-paragraph description.
  • ☐ At least 5 requests have meaningful descriptions (purpose, side effects, gotchas).
  • ☐ At least one request has saved examples (200 + 4xx).
  • ☐ Documentation has been published (private/team-only is fine).
  • ☐ The published docs URL is in the project README.

If you ticked at least 80% of those boxes, the capstone is complete. If you ticked less, that's data — the unchecked items are exactly what to do next.

Reflection questions

Spend 10–15 minutes writing answers. They sharpen what you actually learned.

  1. Which step took longest? Was it test design, debugging chained variables, fighting with Newman, or wrestling GitHub Actions? Where time goes is where the next learning sits.
  2. Which deliverable would you skip if asked to do this in 4 hours instead of 10? The honest answer reveals what you consider load-bearing — and where you'd cut corners under deadline pressure.
  3. What's the one bug in your suite right now? Every test suite has one. Could be a flaky timing assertion, a hardcoded id that breaks when the API resets, an env-var that only works on your machine. Naming it is the first step to fixing it.
  4. What's one thing you'd do differently if you started over? The opinions you have now are the ones you'd give a junior tester picking this up next month.

Stretch goals — for going from "completed" to "portfolio-ready"

If you finished the nine deliverables and want to push further:

1. Postman Monitor for production health checks

Right-click the collection → Monitor Collection. Frequency: every 6 hours. Environment: Production (read-only smoke). Notifications: Email on failure. The monitor runs your suite in the cloud without any infra you maintain. Pair with a smoke folder that hits only /pets, /categories, and a public health endpoint — never destructive paths.

Done correctly, this is the second-cheapest production observability you can buy.

2. Publish full API documentation

Right-click the collection → View DocumentationPublish. Make it private/team-only. Add the URL to your repo README:

**API Test Documentation:** https://documenter.getpostman.com/view/XXXX

Now anyone can browse the collection's structure, requests, and saved examples without installing Postman. Recruiters love a public docs page they can click through in an interview.

3. Build a Postman Flow for the order lifecycle

A visual canvas (Chapter 6 Lesson 1) that shows: login → browse pets → filter by category → place order → verify. Drop Output blocks at each step so a non-engineer can run the flow and see the data flowing through. This is the demo artefact for stakeholders.

4. Negative-case data-driven CSV

A second pets-data-negative.csv with 15 rows of malicious or malformed inputs:

  • SQL injection: '; DROP TABLE pets; --
  • XSS: <script>alert(1)</script>
  • Buffer-overflow attempts: 10,000-character names.
  • Unicode shenanigans: zero-width characters, RTL overrides, emoji in numeric fields.
  • Type coercion: numbers as strings, strings as numbers, booleans as "yes".

Each row's expectedStatus should be 400 or 422. If any return 200, you've found a real input-validation bug — and that's the point. The masterclass Positive, Negative, Edge Cases lesson covers the strategy.

5. JSON Schema validation for every endpoint

Write a schema for every 2xx response shape and validate with tv4 in every Tests tab. Store the schemas as collection variables so the same schema can be reused across requests. Schema-as-tests is one of the highest-leverage forms of API test maintenance — it catches silent backend changes that hand-written assertions miss.

6. Slack alerting on CI failures

Wire your GitHub Actions workflow to post to Slack when red. The slackapi/slack-github-action Action makes it three lines:

- if: failure()
  uses: slackapi/slack-github-action@v1
  with:
    payload: |
      { "text": "API tests failed: ${{ github.event.repository.html_url }}/actions/runs/${{ github.run_id }}" }
  env:
    SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}

Now your suite ties into the team's existing alerting — the alert lands where humans already look.

Where to go next

You've now wrapped both the API Testing Masterclass (the concepts) and Postman (the most-used tool). The natural next moves:

After API Testing with Postman
  • – Python for QA
  • – Core Java for QA
  • – JavaScript for QA
  • – TypeScript for QA
  • – Cypress with TypeScript
  • – Playwright
  • – Selenium
  • – REST Assured (Java)
  • – Karate (no-code DSL)
  • – Bruno / Insomnia
  • k6 –
  • Locust –
  • JMeter –
  • Contract testing (Pact) –
  • Microservices testing –
  • API security testing –

A few specific recommendations:

  • If you don't yet have a programming language under your belt: start with Python for QA. It pairs beautifully with API testing — requests + pytest is the canonical combination — and complements Postman: you build a Postman suite for exploration and CI, you write Python for the cases Postman can't express.
  • If your team is in the Java ecosystem: Core Java for QA gives you the foundation for REST Assured, the dominant Java API-testing framework. Same patterns as Postman, more code-heavy, version-controllable down to the assertion.
  • If you want browser + API testing in one suite: Cypress with TypeScript treats API calls and browser actions as siblings. You can test that the UI displays what the API returned without leaving the framework.
  • If TypeScript is your starting point: TypeScript for QA into Cypress with TypeScript is the cleanest browser-and-API path.
  • Performance testing isn't a Postman strength. When you need it, k6 (JS-flavoured, runs in CI) and Locust (Python-flavoured, distributed) are the modern choices.
  • Contract testing with Pact is the next conceptual leap once you have multiple services. The masterclass Consumer-Driven Contracts lesson is the entry point.

Each of those is its own discipline; pick by what your team needs most or what excites you most. Both are good answers.

What you've actually learned

If you walk away from this course remembering ten things, the right ten are:

  1. Postman is a request-builder; collections are your test suite.
  2. Variables and environments parameterise everything — never hardcode.
  3. The Tests tab is JavaScript; pm.test() and pm.expect() cover most of what you need.
  4. Negative assertions (to.not.have.property) catch a class of bug positive assertions miss.
  5. Pre-request scripts + pm.sendRequest keep tokens fresh during long runs.
  6. Chaining values via pm.collectionVariables.set turns request lists into workflows.
  7. Data-driven runs scale a single request to many input rows.
  8. Mock servers unblock front-end work and reproduce hard-to-trigger error responses.
  9. Newman runs the same collection in CI; htmlextra and JUnit make results readable.
  10. CI on every PR is what makes the suite load-bearing — manual runs are nice; gated merges are non-negotiable.

Those ten are enough to be a strong Postman-fluent QA engineer at any company. Everything else — Flows, monitors, advanced auth flows, niche reporters — is detail you pick up on the job.

📝 Capstone task

Final pass on your work.

  1. Run the self-assessment checklist. Tally your score honestly. Anything below 80% — note the unchecked items.
  2. Pick one stretch goal from the five above. Spend 60–90 minutes on it. Even an unfinished attempt at a Monitor, a Flow, or a negative-case CSV leaves you noticeably stronger.
  3. Push your repo to a public GitHub account (sanitise any secrets first). Add a clear README explaining what's in it. This is now a portfolio piece.
  4. Write a one-paragraph reflection — the answer to "if I had to start this capstone over, what would I do differently?" Save it next to the repo.
  5. Add the project to your CV. A line that says "Built a CI-integrated Postman/Newman API test suite covering 12 endpoints with 30+ assertions and a daily production health monitor" is a hiring signal that beats most generic QA bullets.

Welcome to the working ranks of API testers with Postman.

// tip to track lessons you complete and pick up where you left off across devices.