Skip to main content

8. API Testing Examples

GET

Get all categories

pm.test('1. Status code is 200', function () {
pm.response.to.have.status(200);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be an array', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('array');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'array',
items: {
type: 'object',
properties: {
id: { type: 'number' },
name: { type: 'string' },
description: { type: ['string', 'null'] },
},
required: ['id', 'name', 'description'],
additionalProperties: false
},
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

Get category by id

pm.test('1. Status code is 200', function () {
pm.response.to.have.status(200);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
id: { type: 'integer'},
name: { type: 'string'},
description: { type: ['string', 'null']},
},
required: ['id', 'name', 'description'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

Get category by id (id is invalid)

pm.test('1. Status code is 400', function () {
pm.response.to.have.status(400);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
statusCode: { type: 'number' },
message: { type: 'array', items: { type: 'string' } },
error: { type: 'string' },
},
required: ['statusCode', 'message', 'error'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

pm.test('6. Values is correct', function () {
var jsonData = pm.response.json();
pm.expect(jsonData.statusCode).to.eql(400);
pm.expect(jsonData.message).to.include('Validation failed (numeric string is expected)');
pm.expect(jsonData.error).to.eql('Invalid route params');
});

Get category by id (id not found)

pm.test('1. Status code is 410', function () {
pm.response.to.have.status(410);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
statusCode: { type: 'number' },
message: { type: 'array', items: { type: 'string' } },
error: { type: 'string' },
},
required: ['statusCode', 'message', 'error'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

pm.test('6. Values is correct', function () {
var json = pm.response.json();
pm.expect(json.statusCode).to.equal(410);
pm.expect(json.message).to.include('Category not found');
pm.expect(json.error).to.equal('Bad Request');
});

CREATE

Create category

pm.test('1. Status code is 201', function () {
pm.response.to.have.status(201);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
id: { type: 'number' },
name: { type: 'string' },
description: { type: ['string', 'null'] },
},
required: ['id', 'name', 'description'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

Create category (name is duplicated)

pm.test('1. Status code is 400', function () {
pm.response.to.have.status(400);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
statusCode: { type: 'number' },
message: { type: 'array', items: { type: 'string' } },
error: { type: 'string' },
},
required: ['statusCode', 'message', 'error'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

pm.test('6. Values is correct', function () {
var json = pm.response.json();
pm.expect(json.statusCode).to.equal(400);
pm.expect(json.message).to.include('Name must be unique');
pm.expect(json.error).to.equal('Bad Request');
});

Create category (name is required)

pm.test('1. Status code is 400', function () {
pm.response.to.have.status(400);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
statusCode: { type: 'number' },
message: { type: 'array', items: { type: 'string' } },
error: { type: 'string' },
},
required: ['statusCode', 'message', 'error'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

pm.test('6. Values is correct', function () {
var json = pm.response.json();
pm.expect(json.statusCode).to.equal(400);
pm.expect(json.message).to.include('Name is required');
pm.expect(json.error).to.equal('Bad Request');
});

UPDATE

Update category

pm.test('1. Status code is 200', function () {
pm.response.to.have.status(200);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
id: { type: 'number' },
name: { type: 'string' },
description: { type: ['string', 'null'] },
},
required: ['id', 'name', 'description'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

Update category (id is invalid)

pm.test('1. Status code is 400', function () {
pm.response.to.have.status(400);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
statusCode: { type: 'number' },
message: { type: 'array', items: { type: 'string' } },
error: { type: 'string' },
},
required: ['statusCode', 'message', 'error'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

pm.test('6. Values is correct', function () {
var json = pm.response.json();
pm.expect(json.statusCode).to.equal(400);
pm.expect(json.message).to.include('Validation failed (numeric string is expected)');
pm.expect(json.error).to.equal('Invalid route params');
});

Update category (name is duplicated)

pm.test('1. Status code is 400', function () {
pm.response.to.have.status(400);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
statusCode: { type: 'number' },
message: { type: 'array', items: { type: 'string' } },
error: { type: 'string' },
},
required: ['statusCode', 'message', 'error'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

pm.test('6. Values is correct', function () {
var json = pm.response.json();
pm.expect(json.statusCode).to.eql(400);
pm.expect(json.message).to.include('Name must be unique');
pm.expect(json.error).to.eql('Bad Request');
});

Update category (id not found)

pm.test('1. Status code is 410', function () {
pm.response.to.have.status(410);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
statusCode: { type: 'number' },
message: { type: 'array', items: { type: 'string' } },
error: { type: 'string' },
},
required: ['statusCode', 'message', 'error'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

pm.test('6. Values is correct', function () {
var json = pm.response.json();
pm.expect(json.statusCode).to.eql(410);
pm.expect(json.message).to.include('Category not found');
pm.expect(json.error).to.eql('Bad Request');
});

DELETE

Delete category

pm.test('1. Status code is 200', function () {
pm.response.to.have.status(200);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
message: { type: 'string' },
},
required: ['message'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

pm.test('6. Values is correct', function () {
var jsonData = pm.response.json();
pm.expect(jsonData.message).to.eql('Category deleted');
});

Delete category (id is invalid)

pm.test('1. Status code is 400', function () {
pm.response.to.have.status(400);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
statusCode: { type: 'number' },
message: { type: 'array', items: { type: 'string' } },
error: { type: 'string' },
},
required: ['statusCode', 'message', 'error'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

pm.test('6. Values is correct', function () {
var jsonData = pm.response.json();
pm.expect(jsonData.statusCode).to.eql(400);
pm.expect(jsonData.message).to.include('Validation failed (numeric string is expected)');
pm.expect(jsonData.error).to.eql('Invalid route params');
});

Delete category (id not found)

pm.test('1. Status code is 410', function () {
pm.response.to.have.status(410);
});

pm.test('2. Response time is less than 200ms', function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});

pm.test('3. Response must be valid and have a body', function () {
pm.response.to.be.withBody;
pm.response.to.be.json;
});

pm.test('4. Json must be a object', () => {
const responseJson = pm.response.json();
pm.expect(responseJson).to.be.an('object');
});

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
statusCode: { type: 'number' },
message: { type: 'array', items: { type: 'string' } },
error: { type: 'string' },
},
required: ['statusCode', 'message', 'error'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});

pm.test('6. Values is correct', function () {
var jsonData = pm.response.json();
pm.expect(jsonData.statusCode).to.eql(410);
pm.expect(jsonData.message).to.include('Category not found');
pm.expect(jsonData.error).to.eql('Bad Request');
});

Orders (a full object)

pm.test('5. Schema is valid', () => {
var schema = {
type: 'object',
properties: {
id: { type: 'integer' },
createdDate: { type: 'string', format: 'date-time' },
shippedDate: { type: 'string', format: 'date-time' },
status: { type: 'string', enum: ['WAITING', 'COMPLETED', 'CANCELLED'] },
description: { type: 'string' },
shippingAddress: { type: 'string' },
shippingCity: { type: 'string' },
paymentType: { type: 'string', enum: ['CASH', 'CREDIT CARD'] },
customerId: { type: 'integer' },
employeeId: { type: 'integer' },
customer: {
type: 'object',
properties: {
id: { type: 'integer' },
firstName: { type: 'string' },
lastName: { type: 'string' },
phoneNumber: { type: 'string' },
address: { type: 'string' },
birthday: { type: 'string', format: 'date' },
email: { type: 'string', format: 'email' },
},
required: ['id', 'firstName', 'lastName', 'phoneNumber'],
},
employee: {
type: 'object',
properties: {
id: { type: 'integer' },
firstName: { type: 'string' },
lastName: { type: 'string' },
phoneNumber: { type: 'string' },
address: { type: 'string' },
birthday: { type: 'string', format: 'date' },
email: { type: 'string', format: 'email' },
},
required: ['id', 'firstName', 'lastName', 'phoneNumber'],
},
orderDetails: {
type: 'array',
items: {
type: 'object',
properties: {
quantity: { type: 'integer', minimum: 0 },
price: { type: 'number', minimum: 0 },
discount: { type: 'number', minimum: 0, maximum: 100 },
product: {
type: 'object',
properties: {
id: { type: 'integer' },
name: { type: 'string' },
price: { type: 'number', minimum: 0 },
discount: { type: 'number', minimum: 0, maximum: 100 },
stock: { type: 'integer', minimum: 0 },
description: { type: 'string' },
categoryId: { type: 'integer' },
supplierId: { type: 'integer' },
category: {
type: 'object',
properties: {
id: { type: 'integer' },
name: { type: 'string' },
description: { type: 'string' },
},
required: ['id', 'name'],
},
},
required: ['id', 'name', 'price', 'stock', 'categoryId', 'supplierId'],
},
},
required: ['quantity', 'price', 'product'],
},
},
},
required: ['id', 'createdDate', 'shippedDate', 'status'],
additionalProperties: false,
};

const responseJson = pm.response.json();
pm.expect(responseJson).to.be.jsonSchema(schema);
});