← Назад к вопросам

Как сохранить токен в переменной

2.3 Middle🔥 171 комментариев
#Инструменты тестирования#Тестирование API

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сохранение токена в переменной: практические подходы для 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 файлы), а не прямым присваиваниям в коде.

Как сохранить токен в переменной | PrepBro