Bird
Raised Fist0
Postmantesting~8 mins

Body validation before sending in Postman - Framework Patterns

Choose your learning style10 modes available
Framework Mode - Body validation before sending
Folder Structure
PostmanProject/
├── collections/
│   └── api-requests.postman_collection.json
├── environments/
│   ├── dev.postman_environment.json
│   ├── staging.postman_environment.json
│   └── prod.postman_environment.json
├── tests/
│   └── bodyValidationTests.js
├── scripts/
│   └── validators.js
├── globals.json
└── README.md

This structure organizes Postman collections, environment files, test scripts for body validation, and reusable validation scripts.

Test Framework Layers
  • Collections: Store API requests with pre-request scripts and test scripts.
  • Environments: Manage variables like base URLs, tokens, and credentials for different setups.
  • Test Scripts: JavaScript files under tests/ that contain body validation logic using Postman test API.
  • Reusable Validators: Helper functions in scripts/validators.js to check JSON schema, required fields, or value formats before sending requests.
  • Globals: Global variables accessible across collections and environments.
Configuration Patterns
  • Environment Variables: Use environment files to switch base URLs, authentication tokens, and other settings without changing requests.
  • Pre-request Scripts: Validate and modify request body before sending. For example, check required fields or data types and abort sending if invalid.
  • Global Variables: Store common values like API keys or user IDs accessible across collections.
  • Data Files: Use CSV or JSON files for data-driven testing to validate multiple body payloads.
Test Reporting and CI/CD Integration
  • Postman Test Results: View pass/fail status of body validation tests in Postman Test Results tab after running collections.
  • Newman CLI: Run collections with body validation tests in command line and generate JSON, HTML, or JUnit reports.
  • CI/CD Integration: Integrate Newman runs in pipelines (GitHub Actions, Jenkins, GitLab CI) to automatically validate request bodies before deployment.
  • Alerts: Configure pipeline to fail and notify team if body validation tests fail.
Best Practices
  1. Validate Early: Use pre-request scripts to check request body before sending to avoid unnecessary API calls.
  2. Use JSON Schema: Define and validate request body structure with JSON schema for clear expectations.
  3. Reusable Validators: Create helper functions for common validations to keep scripts clean and maintainable.
  4. Environment Separation: Keep environment-specific data separate to avoid accidental data leaks or wrong endpoints.
  5. Automate Reporting: Use Newman and CI/CD to automate validation and get quick feedback on body correctness.
Self Check

Where in this folder structure would you add a new validation function to check if a request body contains all required fields before sending?

Key Result
Use pre-request scripts and reusable validators in Postman collections to validate request bodies before sending.

Practice

(1/5)
1. What is the main reason to validate the request body in Postman before sending it?
easy
A. To automatically generate response data
B. To ensure the data format and required fields are correct
C. To speed up the request sending process
D. To change the HTTP method of the request

Solution

  1. Step 1: Understand the purpose of body validation

    Validating the request body helps catch errors like missing fields or wrong data types before sending.
  2. Step 2: Identify the correct reason

    Ensuring data format and required fields are correct prevents server errors and improves test reliability.
  3. Final Answer:

    To ensure the data format and required fields are correct -> Option B
  4. Quick Check:

    Body validation = correct data format [OK]
Hint: Validate body to avoid sending bad data [OK]
Common Mistakes:
  • Thinking validation speeds up sending
  • Confusing validation with response generation
  • Assuming validation changes HTTP method
2. Which Postman script snippet correctly checks if the raw request body contains a JSON field named username before sending?
easy
A. pm.expect(pm.response.body).to.have.property('username');
B. pm.request.body.raw.includes('username');
C. pm.expect(pm.request.body.raw).to.include('username');
D. pm.request.body.json().has('username');

Solution

  1. Step 1: Identify correct method to check raw body content

    pm.request.body.raw returns the raw string body; using pm.expect(...).to.include('username') checks if 'username' text exists.
  2. Step 2: Eliminate incorrect options

    pm.request.body.raw.includes('username'); returns boolean but no assertion; pm.expect(pm.response.body).to.have.property('username'); checks response, not request; pm.request.body.json().has('username'); uses invalid method.
  3. Final Answer:

    pm.expect(pm.request.body.raw).to.include('username'); -> Option C
  4. Quick Check:

    Use pm.expect with raw body to check text [OK]
Hint: Use pm.expect with raw body string to check fields [OK]
Common Mistakes:
  • Checking response instead of request body
  • Using non-existent methods on pm.request.body
  • Not using pm.expect for assertions
3. Given this Postman pre-request script snippet:
const body = JSON.parse(pm.request.body.raw);
pm.expect(body.age).to.be.a('number');
What will happen if the request body is {"age": "twenty"}?
medium
A. The test will fail because age is a string, not a number
B. The test will pass because 'twenty' is a valid value
C. The script will throw a syntax error
D. The test will be skipped automatically

Solution

  1. Step 1: Parse the request body and check type

    The script parses the JSON body and asserts that body.age is a number.
  2. Step 2: Analyze the given body value

    Since age is the string "twenty", the assertion to be.a('number') fails.
  3. Final Answer:

    The test will fail because age is a string, not a number -> Option A
  4. Quick Check:

    Type check fails if data type mismatches [OK]
Hint: Check data types carefully in JSON body [OK]
Common Mistakes:
  • Assuming string 'twenty' counts as number
  • Expecting syntax error on valid JSON
  • Thinking test skips on failure
4. You wrote this Postman pre-request test to check if the request body has a non-empty email field:
const body = JSON.parse(pm.request.body.raw);
pm.expect(body.email).to.not.be.empty;
But the test always passes even when email is missing. What is the likely problem?
medium
A. The raw body is not accessible in pre-request scripts
B. pm.expect cannot check empty strings
C. JSON.parse fails silently on missing fields
D. The test does not check if email exists before checking emptiness

Solution

  1. Step 1: Understand the test logic

    The test checks if body.email is not empty, but if email is undefined, the assertion does not fail as expected.
  2. Step 2: Identify missing existence check

    Without checking if email exists, the test passes because undefined is not considered empty string.
  3. Final Answer:

    The test does not check if email exists before checking emptiness -> Option D
  4. Quick Check:

    Check existence before emptiness to avoid false passes [OK]
Hint: Check field exists before checking empty [OK]
Common Mistakes:
  • Assuming empty check covers missing fields
  • Believing JSON.parse fails silently
  • Thinking raw body is unavailable in pre-request
5. You want to prevent sending a request if the JSON body misses the required field id or if id is not a positive integer. Which Postman pre-request script correctly validates this before sending?
hard
A. const body = JSON.parse(pm.request.body.raw); if (!body.id || typeof body.id !== 'number' || body.id <= 0) { throw new Error('Invalid id'); }
B. const body = JSON.parse(pm.request.body.raw); pm.expect(body.id).to.be.a('number').and.to.be.above(0);
C. const body = pm.request.body.raw; pm.expect(body).to.include('id');
D. const body = JSON.parse(pm.request.body.raw); if (body.id === undefined) { console.log('Missing id'); }

Solution

  1. Step 1: Check for existence and type with condition

    const body = JSON.parse(pm.request.body.raw); if (!body.id || typeof body.id !== 'number' || body.id <= 0) { throw new Error('Invalid id'); } parses the body and uses an if statement to check if id is missing, not a number, or not positive.
  2. Step 2: Prevent sending by throwing error

    Throwing an error in pre-request script stops the request from sending, enforcing validation.
  3. Final Answer:

    const body = JSON.parse(pm.request.body.raw); if (!body.id || typeof body.id !== 'number' || body.id <= 0) { throw new Error('Invalid id'); } -> Option A
  4. Quick Check:

    Throw error to block invalid body before sending [OK]
Hint: Throw error in pre-request to block bad body [OK]
Common Mistakes:
  • Using pm.expect without blocking request
  • Only logging missing fields without stopping
  • Checking raw string instead of parsed JSON
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard