Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/JamesMessinger/postman-bdd
A BDD test framework for Postman and Newman
https://github.com/JamesMessinger/postman-bdd
api assertions bdd chai javascript newman postman rest testing
Last synced: 12 days ago
JSON representation
A BDD test framework for Postman and Newman
- Host: GitHub
- URL: https://github.com/JamesMessinger/postman-bdd
- Owner: JamesMessinger
- License: mit
- Archived: true
- Created: 2016-02-03T04:47:02.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2018-07-26T11:31:31.000Z (over 6 years ago)
- Last Synced: 2024-05-19T03:11:57.942Z (6 months ago)
- Topics: api, assertions, bdd, chai, javascript, newman, postman, rest, testing
- Language: HTML
- Homepage: http://www.getpostman.com
- Size: 6.22 MB
- Stars: 139
- Watchers: 15
- Forks: 29
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
![Postman BDD](docs/logo.gif)
✨ Postman now has it's own BDD test syntax ✨
--------------------------
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](OLD_README.md).
### Docs
* [Test Scripts](https://www.getpostman.com/docs/v5/postman/scripts/test_scripts)
* [Test Examples](https://www.getpostman.com/docs/v5/postman/scripts/test_examples)### Example
```javascript
// 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
});
```### Migration Guide
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:#### Remove `describe` blocks
`describe()` blocks were optional in Postman-BDD, and they don't exist at all in Postman's new syntax. So just remove them.#### Replace `it` blocks with `pm.test`
Postman-BDD used `it` blocks to define tests, such as:```javascript
it('should return the correct customer', () => {
// assertions here
});
```Postman now has `pm.test` blocks, which work the same way. For example:
```javascript
pm.test('returns the correct customer', () => {
// assertions here
});
```#### Move hooks to folder/collection scripts
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](https://www.getpostman.com/docs/v6/postman/scripts/test_scripts#adding-a-test-script-to-a-collection-or-folder).#### Different assertion syntax
Postman-BDD used the [Chai.js](http://www.chaijs.com/api/bdd/) and [Chai-HTTP](http://www.chaijs.com/plugins/chai-http/#assertions) assertion libraries, which let you write assertions using an intuitive, fluent, English-like syntax.```javascript
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.
```javascript
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);
});
```