Bird
Raised Fist0
Postmantesting~15 mins

Body validation before sending in Postman - Build an Automation Script

Choose your learning style10 modes available
Validate request body before sending POST request
Preconditions (3)
Step 1: Open Postman and create a new POST request to https://api.example.com/users
Step 2: In the Body tab, select raw and JSON format
Step 3: Enter the JSON body with fields: name (string), email (string), age (number)
Step 4: Before sending, validate that name and email are not empty and age is a positive number
Step 5: If validation passes, send the request
Step 6: If validation fails, do not send and show an error message
✅ Expected Result: Request is sent only if the body fields meet validation rules; otherwise, an error message is shown and request is not sent
Automation Requirements - Postman Tests (JavaScript)
Assertions Needed:
Verify 'name' field is a non-empty string
Verify 'email' field is a non-empty string and contains '@'
Verify 'age' field is a positive number
Best Practices:
Use pre-request scripts to validate body before sending
Use pm.expect assertions for validation
Do not send request if validation fails (throw error in pre-request script)
Keep validation logic clear and simple
Automated Solution
Postman
const body = pm.request.body.raw;

try {
    const jsonBody = JSON.parse(body);
    pm.expect(jsonBody).to.have.property('name').that.is.a('string').and.is.not.empty;
    pm.expect(jsonBody).to.have.property('email').that.is.a('string').and.is.not.empty;
    pm.expect(jsonBody.email).to.include('@');
    pm.expect(jsonBody).to.have.property('age').that.is.a('number').and.is.above(0);
} catch (e) {
    throw new Error('Request body is not valid JSON or missing required fields');
}

// If validation fails, throw error to stop request
if (!jsonBody.name || !jsonBody.email || !jsonBody.email.includes('@') || typeof jsonBody.age !== 'number' || jsonBody.age <= 0) {
    throw new Error('Validation failed: name and email must be non-empty, email must contain @, age must be positive number');
}

This script runs in the Pre-request Script tab in Postman before sending the request.

It parses the raw JSON body and checks that name and email are non-empty strings, email contains '@', and age is a positive number.

If any check fails, it throws an error which stops the request from being sent and shows the error message.

This ensures only valid request bodies are sent, preventing server errors and improving test reliability.

Common Mistakes - 3 Pitfalls
Not parsing the JSON body before validation
Using pm.test assertions in pre-request script
Not stopping the request when validation fails
Bonus Challenge

Now add data-driven testing with 3 different JSON bodies to validate before sending

Show Hint

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