Как сохранить токен в переменной
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Сохранение токена в переменной: практические подходы для QA Engineer
Как QA Engineer, работающий с API-тестированием, аутентификацией и авторизацией, я постоянно сталкиваюсь с необходимостью безопасного и эффективного хранения токенов. Сохранение токена в переменной — фундаментальный навык, который различается в зависимости от контекста: язык программирования, фреймворк тестирования, окружение выполнения. Рассмотрим ключевые подходы.
Базовые принципы хранения токенов
Прежде всего, важно понимать типы токенов и их жизненный цикл:
- Access Token (токен доступа): Краткосрочный, передается в заголовках запросов.
- Refresh Token (токен обновления): Долгосрочный, используется для получения новых access-токенов, хранится максимально защищенно.
- API Key, Bearer Token и другие.
Основное правило: никогда не хардкодить чувствительные данные (токены, пароли) напрямую в исходный код, особенно если он попадает в системы контроля версий (Git). Используйте переменные окружения или защищенные хранилища.
Примеры сохранения в различных контекстах
1. В скриптах на Python (для pytest, requests)
Чаще всего токен получают из ответа API и сохраняют в переменную или глобальный контекст фреймворка для последующих запросов.
import os
import requests
from dotenv import load_dotenv # для загрузки переменных из .env файла
# Безопасное хранение: загрузка из переменных окружения
load_dotenv()
API_KEY = os.getenv('API_KEY') # Токен лежит в .env файле или секретах CI/CD
# Пример получения и сохранения токена аутентификации
def get_auth_token():
auth_url = "https://api.example.com/auth"
credentials = {"username": "test_user", "password": os.getenv('TEST_PASSWORD')}
response = requests.post(auth_url, json=credentials)
response.raise_for_status()
# Извлекаем токен из ответа и сохраняем в переменную
auth_token = response.json()['access_token']
return auth_token
# Использование токена в последующих запросах
def call_protected_endpoint(token):
headers = {"Authorization": f"Bearer {token}"}
response = requests.get("https://api.example.com/data", headers=headers)
return response.json()
# Использование
token = get_auth_token()
data = call_protected_endpoint(token)
2. В конфигурации CI/CD (GitLab CI, GitHub Actions, Jenkins)
Токены хранятся в секретах (secrets, protected variables) пайплайна и передаются в скрипты как переменные окружения.
# Пример .gitlab-ci.yml
stages:
- test
api_test:
stage: test
script:
# Переменная API_TOKEN задана в настройках CI/CD GitLab
- echo "Running API tests with token..."
- python run_tests.py
variables:
# Передача токена в скрипт (GitLab автоматически маскирует такие переменные)
API_TOKEN: $API_TOKEN
3. В Postman/Newman
Переменные существуют на уровне коллекции, окружения или глобально. Токен часто сохраняется автоматически через скрипты Tests.
- Ручное сохранение: В интерфейсе Postman: Environment → Edit → Add variable (
token). - Автоматическое сохранение через скрипт после успешного логина:
// Вкладка Tests запроса на аутентификацию
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
const responseData = pm.response.json();
// Сохраняем access_token в переменную текущего окружения
pm.environment.set("access_token", responseData.access_token);
// При необходимости сохраняем refresh_token (в более защищенное хранилище, если есть)
// pm.environment.set("refresh_token", responseData.refresh_token);
Далее токен используется в заголовках других запросов коллекции как {{access_token}}.
4. В файлах конфигурации (.env)
Файл .env добавляется в .gitignore. В коде используется библиотека для его загрузки (например, python-dotenv для Python, dotenv для Node.js).
# Содержимое файла .env
API_BASE_URL=https://api.example.com/v1
CLIENT_ID=your_client_id_here
CLIENT_SECRET=your_super_secret_here # Никогда не коммитить!
ACCESS_TOKEN=
Рекомендации по безопасности для QA
- Используйте переменные окружения для хранения секретов. Это стандартный и безопасный подход, разделяющий код и конфигурацию.
- Применяйте scope переменных правильно: локальные (в рамках одного теста), контекстные (например,
pm.variablesв Postman), переменные окружения (для разных сред: dev, staging, prod), глобальные. - Очищайте переменные после использования, особенно в долгоживущих процессах (например, после завершения серии тестов).
- Для UI-тестирования (Selenium, Playwright) токены могут сохраняться в localStorage или sessionStorage браузера, чтобы эмулировать состояние аутентифицированного пользователя. Делается это через выполнение JavaScript.
# Пример для Playwright (Python)
async def set_auth_token(page, token):
await page.evaluate(f"() => {{
localStorage.setItem('auth_token', '{token}');
}}")
В заключение, выбор метода сохранения токена в переменной зависит от инструментария и контекста безопасности. Основная задача QA — обеспечить корректную работу тестов, не нарушая принципов безопасности и изоляции тестовых данных. Всегда отдавайте предпочтение защищенным способам хранения (секреты CI/CD, .env файлы), а не прямым присваиваниям в коде.