25 KiB
25 KiB
Тестування працездатності системи
Передумови
- Налаштування віртуального середовища
python3 -m venv .
source bin/activate.fish
pip3 install flask mariadb
- Запуск сервера:
flask --app server run
Тестування компонентів
Система має два варіанти передачі індексів: у рядку шляху або в тілі запиту. Перевіримо, як працюють обидва варіанти.
/api/survey
Цей шлях дозволяє використовувати всі 4 HTTP-методи, що використовуються в домовленості REST (GET, POST, PUT, DELETE). Протестуємо кожен з них на практичному прикладі:
user@debian-laptop ~/D/f/t/f/d/m/e/s/demo (master)> curl -s http://127.0.0.1:5000/api/survey | jq . [ { "id": 1, "isPaused": 0, "isNamed": 0, "name": "Test 1", "duration": "1w", "account_id": 10 }, { "id": 4, "isPaused": 0, "isNamed": 0, "name": "Test 2", "duration": "1w", "account_id": 5 } ] user@debian-laptop ~/D/f/t/f/d/m/e/s/demo (master)> curl -X POST -d '{"isPaused": false, "isNamed": true, "name": "Test 3", "duration": "1w", "account_id": 2}' --header "Content-Type: application/json" http://127.0.0.1:5000/api/survey {"success": true} user@debian-laptop ~/D/f/t/f/d/m/e/s/demo (master)> curl -s http://127.0.0.1:5000/api/survey | jq . [ { "id": 1, "isPaused": 0, "isNamed": 0, "name": "Test 1", "duration": "1w", "account_id": 10 }, { "id": 4, "isPaused": 0, "isNamed": 0, "name": "Test 2", "duration": "1w", "account_id": 5 }, { "id": 12, "isPaused": 0, "isNamed": 1, "name": "Test 3", "duration": "1w", "account_id": 2 } ] user@debian-laptop ~/D/f/t/f/d/m/e/s/demo (master)> curl -X PUT -d '{"id": 8, "isPaused": true, "isNamed": true, "name": "Test 3", "duration": "4w", "account_id": 2}' --header "Content-Type: application/json" http://127.0.0.1:5000/api/survey {"success": true} user@debian-laptop ~/D/f/t/f/d/m/e/s/demo (master)> curl -s http://127.0.0.1:5000/api/survey | jq . [ { "id": 1, "isPaused": 0, "isNamed": 0, "name": "Test 1", "duration": "1w", "account_id": 10 }, { "id": 4, "isPaused": 0, "isNamed": 0, "name": "Test 2", "duration": "1w", "account_id": 5 }, { "id": 12, "isPaused": 1, "isNamed": 1, "name": "Test 3", "duration": "4w", "account_id": 2 } ] user@debian-laptop ~/D/f/t/f/d/m/e/s/demo (master)> curl -X DELETE -d '{"id": 12}' --header "Content-Type: application/json" http://127.0.0.1:5000/api/survey [{'id': 12, 'isPaused': 1, 'isNamed': 1, 'name': 'Test 3', 'duration': '4w', 'account_id': 2}] user@debian-laptop ~/D/f/t/f/d/m/e/s/demo (master)> curl -s http://127.0.0.1:5000/api/survey | jq . [ { "id": 1, "isPaused": 0, "isNamed": 0, "name": "Test 1", "duration": "1w", "account_id": 10 }, { "id": 4, "isPaused": 0, "isNamed": 0, "name": "Test 2", "duration": "1w", "account_id": 5 } ]
/api/survey/<id>
У цьому випадку доступні лише 3 методи (GET, PUT, DELETE), оскільки під час створення нового опитування його ідентифікатор визначається безпосередньо базою даних.
user@debian-laptop ~/D/f/t/f/d/m/e/s/restful-server (master)> curl -s http://127.0.0.1:5000/api/survey | jq . [ { "id": 1, "isPaused": 0, "isNamed": 0, "name": "Test 1", "duration": "1w", "account_id": 10 }, { "id": 4, "isPaused": 0, "isNamed": 1, "name": "Test 3", "duration": "1w", "account_id": 5 } ] user@debian-laptop ~/D/f/t/f/d/m/e/s/restful-server (master)> curl -X PUT \ -d '{"isPaused": true, "isNamed": true, "name": "Test 4", "duration": "2w"}' \ --header "Content-Type: application/json" \ -s http://127.0.0.1:5000/api/survey/4 {"success": true} user@debian-laptop ~/D/f/t/f/d/m/e/s/restful-server (master)> curl -s http://127.0.0.1:5000/api/survey/4 | jq . [ { "id": 4, "isPaused": 1, "isNamed": 1, "name": "Test 4", "duration": "2w", "account_id": 5 } ] user@debian-laptop ~/D/f/t/f/d/m/e/s/restful-server (master)> curl -v -X DELETE --header "Content-Type: application/json" -d '{}' http://127.0.0.1:5000/api/survey/4 * Trying 127.0.0.1:5000... * Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0) > DELETE /api/survey/4 HTTP/1.1 > Host: 127.0.0.1:5000 > User-Agent: curl/7.88.1 > Accept: */* > Content-Type: application/json > Content-Length: 2 > < HTTP/1.1 200 OK < Server: Werkzeug/3.0.3 Python/3.11.2 < Date: Tue, 21 May 2024 14:45:09 GMT < Content-Type: text/html; charset=utf-8 < Content-Length: 94 < Connection: close < [{'id': 4, 'isPaused': 1, 'isNamed': 1, 'name': 'Test 4', 'duration': '2w', 'account_id': 5}] * Closing connection 0 user@debian-laptop ~/D/f/t/f/d/m/e/s/restful-server (master)>
Бачимо, що ми можемо отримувати інформацію про окремі опитування, змінювати та видаляти їх.