Postman-BDD is no longer necessary, because Postman now has its own BDD and fluent syntax built-in!
I recommend that you start using Postman's new test syntax instead of Postman-BDD. However, if you want to continue using Postman-BDD, then you can find the original ReadMe here.
// example using pm.response.to.have
pm.test("response is ok", () => {
pm.response.to.have.status(200);
});
// example using pm.expect()
pm.test("environment to be production", () => {
pm.expect(pm.environment.get("env")).to.equal("production");
});
// example using response assertions
pm.test("response should be okay to process", () => {
pm.response.to.not.be.error;
pm.response.to.have.jsonBody("");
pm.response.to.not.have.jsonBody("error");
});
// example using pm.response.to.be*
pm.test("response must be valid and have a body", () => {
// assert that the status code is 200
pm.response.to.be.ok; // info, success, redirection, clientError, serverError, are other variants
// assert that the response has a valid JSON body
pm.response.to.be.withBody;
pm.response.to.be.json; // this assertion also checks if a body exists, so the above check is not needed
});
Postman's new BDD and fluent syntax are a bit different from Postman-BDD. Here are the changes you need to make to migrate your tests:
describe()
blocks were optional in Postman-BDD, and they don't exist at all in Postman's new syntax. So just remove them.
Postman-BDD used it
blocks to define tests, such as:
it('should return the correct customer', () => {
// assertions here
});
Postman now has pm.test
blocks, which work the same way. For example:
pm.test('returns the correct customer', () => {
// assertions here
});
Postman-BDD allowed you to define common assertions or setup/teardown logic in hooks, such as before()
, after()
, beforeEach()
and afterEach()
. This is no longer necessary because Postman now allows you to define test scripts for folders and collections.
Postman-BDD used the Chai.js and Chai-HTTP assertion libraries, which let you write assertions using an intuitive, fluent, English-like syntax.
it('should return a 200 response', () => {
response.should.have.status(200);
});
it('should set the Location header', () => {
response.should.have.header('Location');
});
it('should return a JSON response', () => {
response.should.be.json;
});
it('should return the correct customer', () => {
response.body.should.have.property('id', 12345);
});
Postman now supports its own fluent assertion syntax, which is somewhat similar.
pm.test('returns a 200 response', () => {
pm.response.to.have.status(200);
});
pm.test('sets the Location header', () => {
pm.response.to.have.header("Location");
});
pm.test('returns a JSON response', () => {
pm.response.to.be.json;
});
pm.test('returns the correct customer', () => {
let jsonData = pm.response.json();
pm.expect(jsonData.id).to.eql(12345);
});