Где хранить логин и пароль при написании автотестов?

«Где хранить логин и пароль при написании автотестов?» — вопрос из категории Тестирование безопасности, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При написании автотестов хранение учетных данных — критичный аспект безопасности. Я никогда не храню их в виде plain text в коде тестов. Вот мой подход:

Основной метод: Переменные окружения (Environment Variables) Это самый безопасный и переносимый способ. Данные загружаются в среду выполнения и недоступны в репозитории.

  • Пример на Python (pytest):

    import os
    
    TEST_USER = os.environ.get('QA_TEST_USER')
    TEST_PASSWORD = os.environ.get('QA_TEST_PASSWORD')
    
    def test_login():
        # Используем TEST_USER и TEST_PASSWORD
        ...
  • Как задать переменные:
    • Локально: в файле .env (который добавлен в .gitignore).
    • В CI/CD (Jenkins, GitLab CI, GitHub Actions): через защищенные настройки пайплайна (Secrets).

Резервный/Дополнительный метод: Конфигурационные файлы Для сложных наборов тестовых данных (несколько пользователей, ролей) использую конфигурационные файлы (JSON, YAML), которые тоже не коммитятся в репозиторий.

  • Пример config.qa.json (в .gitignore):
    {
      "users": {
        "admin": {
          "login": "qa_admin@example.com",
          "password": "#env:QA_ADMIN_PASS"
        },
        "user": {
          "login": "qa_user@example.com",
          "password": "#env:QA_USER_PASS"
        }
      }
    }

    Здесь пароли могут ссылаться на переменные окружения.

Важные практики, которые я соблюдаю:

  1. Использование тестовых/фиктивных аккаунтов: Учетные данные должны быть от специальных тестовых пользователей, а не от реальных сотрудников или продакшн-аккаунтов.
  2. .gitignore — наш друг: Все файлы с чувствительными данными (*.env, *config*.local.*, *secret*) должны быть в .gitignore.
  3. Шаблоны вместо реальных данных: В репозиторий кладу шаблоны файлов (например, .env.example), где указаны названия переменных, но не их значения.