Я тестирую функцию сообщений пользователя веб-решения с использованием pytest + selenium. Тесты сгенерируют тестовое сообщение для тестового пользователя, а затем войдут в систему этого пользователя, чтобы убедиться, что сообщение действительно отображается для этого пользователя.
- Мне нужно генерировать эти сообщения через внутренний API.
- Чтобы получить доступ к этому API, сначала нужно сгенерировать токен AUTH через другой API.
Итак, сценарий тестирования в основном:
- При запуске теста сгенерируйте новый токен AUTH с помощью вспомогательной функции API.
- Отправка запроса другому API для установки нового сообщения (требуется токен AUTH)
- Отправить запрос еще одному API, чтобы «сопоставить» это сообщение с указанным пользователем (требуется токен AUTH)
- Войдите в систему тестового пользователя и убедитесь, что новое сообщение действительно отображается.
Моя проблема заключается в том, что я хочу избегать создания нового токена AUTH при каждом запуске каждого теста в моем классе тестов - я хочу создать новый токен, как только все тесты будут использоваться в одном и том же тестовом прогоне.
Какое самое разумное решение для генерации одного нового токена доступа при вызове всех тестов?
Прямо сейчас я придумал что-то вроде этого, которое будет генерировать новый токен каждый раз при запуске любого отдельного теста:
import pytest
import helpers.api_access_token_helper as token_helper
import helpers.user_message_generator_api_helper as message_helper
import helpers.login_helper as login_helper
import helpers.popup_helper as popup_helper
class TestStuff(object):
@pytest.yield_fixture(autouse=True)
def run_around_tests(self):
yield token_helper.get_api_access_token()
def test_one(self, run_around_tests):
auth_token = run_around_tests
message_helper.create_new_message(auth_token, some_message_data)
message_helper.map_message_to_user(auth_token, user_one["user_id"])
login_helper.log_in_user(user_one["user_name"], user_one["user_password"])
assert popup_helper.user_message_is_displaying(some_message_data["title"])
def test_two(self, run_around_tests):
auth_token = run_around_tests
message_helper.create_new_message(auth_token, some_other_message_data)
message_helper.map_message_to_user(auth_token, user_two["user_id"])
login_helper.log_in_user(user_two["user_name"], user_two["user_password"])
assert popup_helper.user_message_is_displaying(some_other_message_data["title"])
Я немного поработал с прибором "испытания на бегу", но не смог найти решение.