Giter VIP home page Giter VIP logo

endpoint-testing-mini's Introduction

endpoint-testing-mini

Endpoint Testing - ( Postman )

Project Summary

In this mini-project, we will learn about the basics of endpoint testing using Postman. Postman is a REST client that we will be making HTTP requests from. We will learn how to write Postman tests for the responses from the HTTP requests.

Postman docs: https://www.getpostman.com/docs/postman/scripts/test_scripts

Step 1

  • Run npm install in the terminal to install dependencies.

Step 2

Summary

We will import a collection of requests to Postman.

Instructions

  • Open Postman.
  • Click on the import button located in the top left corner of Postman.
    • The file you are importing is inside of the postman_collection folder in this repo.
  • After importing, you should have a collection called Endpoint Testing Mini Project. If you click on it, the list of requests should expand/close.

Step 3

  • Run nodemon in the terminal. Do not change the port from 4000. All the requests in the collections are set up with port 4000.

Step 4

Summary

In this step we will learn how to write Postman endpoint tests that are specific to each request in the Endpoint Testing Mini Project collection.

Instructions

GET - All Students

  • Click on the first request from the collection GET - All Students. When you click the blue Send button you should see all the student data in the Body tab.

  • Click on the Tests tab under the request url. We will write our Postman tests here (specific to this request).

TESTS:

  • Status code should be 200.
    • We need to test that the status code is 200. This is how we will structure a Postman test:
    pm.test('Description of the test', function() {
        // Here we can test specifics of the response
    })
    
    • To test the status code, we will use: pm.response.to.have.status(200)
    • In the Tests tab, let's type the following:
    pm.test("Status code is 200", function () {
        pm.response.to.have.status(200);
    });
    
    • Click on the Send button and check the Test Results tab. You should see one passing test.

    • Next we are going to test that all student objects got returned. For now, we will just test the length of the response. In order to compare two values to one another, we will use:

    pm.test('All 20 student objects in response', function() {
        pm.expect( [value recieved] ).to.eql( [value expected] )
    })
    
    • In order to test the data of the response, we will need to parse it first. On line 1, type: const response = pm.response.json(). Now we can test that the length of the response is equal to 20.

      Solution
      const response = pm.response.json();
      
      pm.test("Status code is 200", function () {
          pm.response.to.have.status(200);
      });
      
      pm.test('All 20 student objects in response', function() {
          pm.expect(response.length).to.eql(20);        
      })
      

GET - Students By Id

  • Response: Array of 1 student object. ID sent as url param.

Test for the following:

  • Status code should be 200

  • The response should include the following student object:

    {
        "id": 9,
        "student": "Patsy Daunay",
        "email_address": "[email protected]",
        "phone": "(806) 2654555",
        "current_grade": "A"
    }
    
  • There are multiple ways to check if the student object above matches the data in the response, but we will use: pm.expect( [student object above].to.eql( [student object in response] ) )

    • .to.eql() will recursively check every field in an object. It does not use === to check for exact equality.
    Solution
    const response = pm.response.json();
    const student9 = {
            "id": 9,
            "student": "Patsy Daunay",
            "email_address": "[email protected]",
            "phone": "(806) 2654555",
            "current_grade": "A"
        }
    
    pm.test("Status code is 200", function () {
        pm.response.to.have.status(200);
    });
    
    pm.test('Correct object in response for ID 9', function() {
        pm.expect(student9).to.eql(response[0])
    })
    

GET - Students By Name

Response: Will return any students whose name contains/matches the string of letters sent in the query.

Test for the following:

  • Status code is 200.
  • Abey Laynard's student object was returned.
    • By searching names with the letters 'la', Abey Laynard's student object should have been returned. Make sure that happened.

      Solution
      const res = pm.response.json();
      
      pm.test("Status code is 200", function () {
          pm.response.to.have.status(200);
      });
      
      pm.test('Abey Laynard student object in response', function() {
          let abeyObject = false;
          res.map( obj => {
              if (obj.student === 'Abey Laynard') abeyObject = true;
          })
          pm.expect(abeyObject).to.eql(true);
      })
      

GET - Students By Grade

  • Response: Returns all students whose grade matches query parameter.

Test for the following:

  • Status code should be 200.

  • Verify that all student objects returned have a C grade ('c' was sent in the url, if this changes, you must change your test).

    Solution
    const res = pm.response.json();
    
    pm.test("Status code is 200", function () {
        pm.response.to.have.status(200);
    });
    
    pm.test('Correct students returned for "C" grade', function() {
        let allHaveC = true;
        res.map( obj => {
            if (obj.current_grade !== 'C') allHaveC = false;
        })
        pm.expect(allHaveC).to.eql(true);
    })
    

GET - Students By Email

  • Response: All students whose email contains the letters sent.

Test for the following:

  • Status code should be 200.
  • Given the search string, '[email protected]', Grilbert De Gouy's student object should be the only object in the response array.
    • Length of reponse should be 1.
    • Make sure the object in response matches:
    {
        "id": 15,
        "student": "Gilbert De Gouy",
        "email_address": "[email protected]",
        "phone": "(615) 2408518",
        "current_grade": "B"
    }
    
Solution
let res = pm.response.json();
let gilbert = {
    "id": 15,
    "student": "Gilbert De Gouy",
    "email_address": "[email protected]",
    "phone": "(615) 2408518",
    "current_grade": "B"
}

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

pm.test('Gilbert\'s student object in repsonse', function() {
    pm.expect(res.length).to.eql(1);
    pm.expect(res[0]).to.eql(gilbert)
})

Get - Students By Phone

  • Response: All students whose phone number contains numbers sent in query parameter.

Test for the following:

  • Status code is 200.
  • All objects returned contain the numbers 608, in that order.
Solution
const res = pm.response.json();

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

pm.test("All objects contain '608'", function() {
    let contains608 = true;
    res.map( obj => {
        if (!obj.phone.includes('608')) contains608 = false;
    })
    pm.expect(contains608).to.eql(true);
})

PUT - Update Grade

  • Response: Student's object whose grade was updated.

Test for the following:

  • Status code should be 200.
  • Student's grade should have been updated to "A-"
Solution
const res = pm.response.json();

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

pm.test('Grade should have been updated to "A-" for user 15', function() {
    pm.expect(res[0].current_grade).to.eql("A-");
})

POST - Add Student

  • Response: Returns the new student that was created.

Test for the following:

  • Status code should be 200.
  • Verify that the new user object created contains the following:
Solution
const res = pm.response.json();

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

pm.test('Tim Allen added as student', function() {

    let newStudentName = 'Tim Allen';
    let newStudentEmail = "[email protected]";
    let newStudentPhone = '(408) 8674530';

    pm.expect(res[0].student).to.eql(newStudentName);
    pm.expect(res[0].email_address).to.eql(newStudentEmail);
    pm.expect(res[0].phone).to.eql(newStudentPhone);
})

DELETE - Remove Student

  • Response: Student object that was removed.

Test for the following:

  • Status code is 200.
  • ID of object in response is 18.
Solution
const res = pm.response.json();

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

pm.test('Student w/ ID 18 removed', function() {
    pm.expect(res[0].id).to.eql(18);
})

Step 5

  • Restart nodemon.
  • Run the entire collection of requests and tests.
    • Click on the right arrow next to the collection name.
    • Click the blue Run button. The collection runner will open.
    • Select the correct collection from the list on the left. Then click the blue button in the bottom at the bottom of the left side-menu.

You should see all of your tests passing. Make sure you restart the server every time you re-run the collection runner.

endpoint-testing-mini's People

Contributors

joeblank avatar devlemire avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.