edu-dis-labs-private/docs/test/README.md

25 KiB
Raw Blame History

Тестування працездатності системи

Передумови

  1. Налаштування віртуального середовища
python3 -m venv .
source bin/activate.fish
pip3 install flask mariadb
  1. Запуск сервера:
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)>

Бачимо, що ми можемо отримувати інформацію про окремі опитування, змінювати та видаляти їх.