Писал ли bash-скрипты

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

Ответ

Да, я регулярно пишу bash-скрипты для автоматизации рутинных задач в тестировании и CI/CD. Это позволяет экономить время и стандартизировать процессы.

Типичные сценарии использования:

  • Подготовка и очистка тестового окружения: Установка зависимостей, сброс баз данных, настройка конфигурационных файлов.
  • Парсинг и анализ логов: Поиск ошибок, подсчет определенных событий после прогона тестов.
  • Запуск тестовых наборов: Последовательный или параллельный запуск разных типов тестов (юнит, API, E2E) с передачей параметров.
  • Мониторинг: Проверка доступности сервисов (health-check) перед началом тестирования.

Пример скрипта для запуска набора тестов и базовой проверки результатов:

#!/bin/bash
set -euo pipefail  # Выход при ошибке, обработка неопределенных переменных

# Конфигурация
TEST_SUITE="API_Smoke_Tests"
LOG_DIR="./test_logs"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
LOG_FILE="${LOG_DIR}/${TEST_SUITE}_${TIMESTAMP}.log"

# Создание директории для логов
mkdir -p "$LOG_DIR"

echo "Запуск тестового набора: $TEST_SUITE" | tee -a "$LOG_FILE"

# Запуск команды тестирования (например, Newman для Postman коллекций)
# Здесь предполагается, что newman установлен глобально
if command -v newman &> /dev/null; then
    newman run "my_api_collection.json" --environment "staging_env.json" 2>&1 | tee -a "$LOG_FILE"
    TEST_EXIT_CODE=${PIPESTATUS[0]}
else
    echo "Ошибка: Newman не найден. Установите его через 'npm install -g newman'" | tee -a "$LOG_FILE"
    exit 1
fi

# Анализ кода завершения и логов
if [ $TEST_EXIT_CODE -eq 0 ]; then
    echo "УСПЕХ: Все тесты пройдены." | tee -a "$LOG_FILE"
    # Дополнительная проверка на отсутствие WARN в логах
    if grep -q -i "warn" "$LOG_FILE"; then
        echo "ВНИМАНИЕ: В логах обнаружены предупреждения."
    fi
    exit 0
else
    echo "СБОЙ: Обнаружены неудачные тесты. Код выхода: $TEST_EXIT_CODE" | tee -a "$LOG_FILE"
    echo "Последние строки лога с ошибками:"
    tail -20 "$LOG_FILE" | grep -A 10 -B 5 -i "error|fail"
    exit 1
fi

Такой скрипт интегрируется в пайплайн CI (например, Jenkins или GitLab CI) для автоматического запуска и отчетности.