Bird
Raised Fist0
Postmantesting~15 mins

Data file integration (CSV, JSON) in Postman - Build an Automation Script

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Run API tests using data file integration with CSV and JSON in Postman
Preconditions (3)
Step 1: Open Postman and create a new collection
Step 2: Add a new request to the collection with the API endpoint
Step 3: Set the HTTP method and required headers
Step 4: Click on the Runner button to open the Collection Runner
Step 5: Select the collection containing the request
Step 6: Click on 'Select File' and upload the CSV data file
Step 7: Start the run and observe the results
Step 8: Repeat the run using the JSON data file instead of CSV
Step 9: Verify that each request uses data from the file and responses are as expected
✅ Expected Result: The API requests run multiple times using each row/object from the CSV and JSON files. Each response matches the expected output for the input data.
Automation Requirements - Postman Collection Runner
Assertions Needed:
Verify response status code is 200 for each request
Verify response body contains expected data matching input
Verify all data rows/objects from the file are used
Best Practices:
Use variable placeholders in the request URL, headers, or body to inject data
Use pre-request scripts or tests to validate data-driven execution
Keep data files clean and well-structured
Use descriptive names for variables and data columns/keys
Automated Solution
Postman
/* Postman test script example for data-driven test using CSV or JSON */

// In the request body or URL, use variables like {{username}}, {{password}}

// Example test script to verify response
pm.test('Status code is 200', () => {
    pm.response.to.have.status(200);
});

pm.test('Response contains username', () => {
    const jsonData = pm.response.json();
    pm.expect(jsonData.username).to.eql(pm.iterationData.get('username'));
});

// No additional code needed to load data files; handled by Collection Runner

// To run:
// 1. Open Collection Runner
// 2. Select collection
// 3. Select CSV or JSON file with columns/keys like username, password
// 4. Run and observe test results for each data row/object

// Example CSV file content:
// username,password
// user1,pass1
// user2,pass2

// Example JSON file content:
// [
//   {"username": "user1", "password": "pass1"},
//   {"username": "user2", "password": "pass2"}
// ]

This Postman test script uses variable placeholders like {{username}} and {{password}} in the request to inject data from the CSV or JSON file during the Collection Runner execution.

The test script verifies that the response status code is 200 and that the response body contains the expected username matching the input data for each iteration.

The Collection Runner automatically reads the data file and runs the request once per data row (CSV) or object (JSON), replacing variables accordingly.

This approach keeps the test simple and reusable for any data file with matching keys.

Common Mistakes - 4 Pitfalls
Not using variable placeholders in the request to inject data
Uploading data file with incorrect format or missing headers/keys
{'mistake': 'Not verifying response data against input data', 'why_bad': 'Tests may pass without confirming the API processed the input correctly, missing bugs.', 'correct_approach': "Write assertions comparing response fields to input data using pm.iterationData.get('variableName')."}
Running tests without using Collection Runner
Bonus Challenge

Now add data-driven testing with 3 different inputs using both CSV and JSON files

Show Hint

Practice

(1/5)
1. What is the main purpose of using data files like CSV or JSON in Postman's Collection Runner?
easy
A. To run the same test multiple times with different input data
B. To create new APIs automatically
C. To change the Postman interface theme
D. To store test results permanently

Solution

  1. Step 1: Understand data file role in Postman

    Data files provide different sets of input data for tests.
  2. Step 2: Connect data files to Collection Runner

    Collection Runner uses these files to repeat tests with varied inputs.
  3. Final Answer:

    To run the same test multiple times with different input data -> Option A
  4. Quick Check:

    Data files = multiple test runs [OK]
Hint: Data files feed tests with many inputs [OK]
Common Mistakes:
  • Thinking data files create APIs
  • Confusing data files with UI settings
  • Assuming data files store results
2. Which of the following is the correct way to reference a CSV data file variable named username in a Postman test script?
easy
A. pm.variables.get('username')
B. pm.data.username
C. pm.iterationData.get('username')
D. pm.request.body.username

Solution

  1. Step 1: Identify how Postman accesses data file variables

    Postman uses pm.iterationData.get('variableName') to get data from CSV or JSON files.
  2. Step 2: Match the correct syntax for username

    The correct method is pm.iterationData.get('username').
  3. Final Answer:

    pm.iterationData.get('username') -> Option C
  4. Quick Check:

    Use pm.iterationData.get() for data file variables [OK]
Hint: Use pm.iterationData.get('var') for CSV/JSON data [OK]
Common Mistakes:
  • Using pm.variables.get() which accesses environment variables
  • Trying to access data as object properties
  • Confusing request body with data file variables
3. Given this CSV data file content:
email,password
user1@example.com,pass123
user2@example.com,pass456

And this test script snippet:
const email = pm.iterationData.get('email');
const password = pm.iterationData.get('password');
pm.test('Check email format', () => {
  pm.expect(email).to.include('@');
});

What will be the result of running the Collection Runner with this data file?
medium
A. Both iterations pass the test
B. Both iterations fail the test
C. First iteration passes, second fails
D. Test throws a syntax error

Solution

  1. Step 1: Analyze CSV data values

    Both emails contain '@' symbol: 'user1@example.com' and 'user2@example.com'.
  2. Step 2: Check test condition for each iteration

    The test checks if email includes '@', which is true for both rows.
  3. Final Answer:

    Both iterations pass the test -> Option A
  4. Quick Check:

    Email includes '@' = true for all data [OK]
Hint: Check data values against test condition carefully [OK]
Common Mistakes:
  • Assuming test fails without checking data
  • Confusing syntax error with logic error
  • Ignoring multiple iterations in Collection Runner
4. You have a JSON data file with this content:
[
  {"user": "alice", "age": 30},
  {"user": "bob", "age": "twenty-five"}
]

When running tests that expect age to be a number, you get unexpected failures. What is the most likely cause?
medium
A. The JSON file is not properly formatted
B. The second age value is a string, not a number
C. Postman cannot read JSON files
D. The test script is missing pm.iterationData.get()

Solution

  1. Step 1: Inspect JSON data values

    The first age is 30 (number), second is "twenty-five" (string).
  2. Step 2: Understand test expectation

    Tests expect age to be a number, but second value is text, causing failure.
  3. Final Answer:

    The second age value is a string, not a number -> Option B
  4. Quick Check:

    Data type mismatch causes test failure [OK]
Hint: Check data types in JSON carefully [OK]
Common Mistakes:
  • Assuming JSON format is invalid
  • Blaming Postman for reading JSON
  • Ignoring data type differences
5. You want to run a Postman test that uses a JSON data file with nested objects like:
[
  {"user": {"name": "John", "id": 101}, "active": true},
  {"user": {"name": "Jane", "id": 102}, "active": false}
]

Which is the correct way to access the name property inside the test script?
hard
A. pm.iterationData.get('user').get('name')
B. pm.iterationData['user']['name']
C. pm.iterationData.get('user.name')
D. pm.iterationData.get('user').name

Solution

  1. Step 1: Understand how Postman accesses nested JSON data

    Postman requires getting the parent object first with pm.iterationData.get('user'), then access nested properties using JavaScript dot notation.
  2. Step 2: Identify correct syntax for nested property

    Using pm.iterationData.get('user').name correctly accesses the nested name.
  3. Final Answer:

    pm.iterationData.get('user').name -> Option D
  4. Quick Check:

    Get parent object first, then .name [OK]
Hint: Get parent object first, then .name [OK]
Common Mistakes:
  • Trying to access nested objects as JS objects directly
  • Using .get() on returned object
  • Using bracket notation inside pm.iterationData.get()