This shows you the differences between two versions of the page.
ii:labs:s2:05:tasks:02 [2022/05/31 16:05] radu.ciobanu [02. [40p] Deploying and testing a service stack in a multi-node Docker Swarm cluster] |
ii:labs:s2:05:tasks:02 [2024/04/29 19:31] (current) radu.ciobanu [02. [10p] Testing a web application using Postman] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 02. [40p] Deploying and testing a service stack in a multi-node Docker Swarm cluster ==== | + | ==== 02. [10p] Testing a web application using Postman ==== |
- | For this exercise, we will deploy a four-service stack, which is defined in the //**docker-compose-swarm.yml**// file from the {{:ii:labs:s2:05:tasks:lab5.zip|lab archive}}. | + | The application started earlier is a web application that does not have a graphical interface (i.e., a frontend). For this reason, it can only be tested by sending HTTP requests using a tool such as [[https://www.postman.com|Postman]]. We will now show how to use Postman to connect to a web application backend. |
- | == Subtasks == | + | In the Postman application, we can create the two types of requests that we want to test: |
+ | * //**GET**// - requests information from the backend (in our case, the list of books in the library) | ||
+ | * //**POST**// - sends information to the backend (in our case, adds a book to the library). | ||
- | - on //**node1**//, download the lab archive using the following command: //**wget https://ocw.cs.pub.ro/courses/_media/ii/labs/s2/05/tasks/lab5.zip**// | + | The steps to accomplish this are outlined below. Firstly, once we have opened the Postman application, we press the //**+**// button, as can be seen in the image below (the button is circled in red). |
- | - on //**node1**//, unzip the lab archive with the following command: //**unzip lab5.zip**// | + | |
- | - on //**node1**//, deploy the service stack with the following command: //**docker stack deploy -c docker-compose-swarm.yml lab5**// | + | {{:ii:labs:s2:04:tasks:screen1.png?direct&700|}} |
- | - check that all services have started with the //**docker stack ps lab5**// command (you should see all services in the "Running" state; if not, run the command until all services have started) | + | |
- | - check how your services have been scheduled by accessing the //**visualizer**// service; this is done by clicking on the blue //**8081**// button on the Play with Docker page; are all the services there? | + | Next, we select the //**HTTP Request**// option, as shown below. |
+ | |||
+ | {{:ii:labs:s2:04:tasks:screen2.png?direct&700|}} | ||
+ | |||
+ | We add the first request, whose type should be //**GET**//. In the address bar, we write //**localhost:5555/api/books/**// and then we press the //**Send**// button (shown in red in the image below). | ||
+ | |||
+ | {{:ii:labs:s2:04:tasks:screen3.png?direct&700|}} | ||
+ | |||
+ | Once the request is sent and everything is in order, we should receive a reply with the status //**200 OK**// (circled in the image below), which contains an empty string (because there are currently no books in the library), as shown below. | ||
+ | |||
+ | {{:ii:labs:s2:04:tasks:screen4.png?direct&700|}} | ||
+ | |||
+ | Next, we can create a //**POST**// request. We start by pressing the circled //**+**// button in the image below. | ||
+ | |||
+ | {{:ii:labs:s2:04:tasks:screen5.png?direct&700|}} | ||
+ | |||
+ | Next, we set the request type to //**POST**// and then put the same address as before. | ||
+ | |||
+ | {{:ii:labs:s2:04:tasks:screen6.png?direct&700|}} | ||
+ | |||
+ | Because we are now adding a book, we need to place the book information in the //**POST**// request we are making. This is done by selecting the //**Body**// component of the request (circled in red in the image below), marking the data as //**Raw**// and //**JSON**// (also in red in the image) and adding the book information in JSON format (see below an example for "Harry Potter and the Prisoner of Azkaban"): | ||
+ | |||
+ | {{:ii:labs:s2:04:tasks:screen7.png?direct&700|}} | ||
+ | |||
+ | When we press the //**Send**// button, if everything is fine, we will receive a reply with the status //**200 OK**// and the ID of the newly-added book, as can be seen in the image. | ||
+ | |||
+ | {{:ii:labs:s2:04:tasks:screen8.png?direct&700|}} | ||
+ | |||
+ | Finally, if we run the //**GET**// request again, we can check the existence of the book we added in the library. | ||
+ | |||
+ | {{:ii:labs:s2:04:tasks:screen9.png?direct&700|}} | ||
+ | |||
+ | <note important>If you are using Play with Docker instead of running on your own computer, you need to replace the //**localhost:5555**// part of the address with the VM's actual address (see [[ii:labs:s2:04|lab 4]] for a reminder on how to do this).</note> | ||
+ | |||
+ | == Subtasks == | ||
- | == What to upload == | + | - install Postman |
+ | - send a //**GET**// request to your application based on the steps above and check that it returns //**200 OK**// and an empty list of books | ||
+ | - add a book of your choosing in the library using a //**POST**// request based on the steps above and check that it returns //**200 OK**// | ||
+ | - send a //**GET**// request again and check that you can see the book you just added | ||
- | * a text file with the commands given on each node | ||
- | * a print screen with the output of the //**docker stack ps lab5**// command | ||
- | * a print screen with the //**visualizer**// page |