[Moscow.pm] Как тестировать приложения с базой данных

Andrei andrei.protasovitski на gmail.com
Вт Фев 23 07:56:43 PST 2010


Доброго здоровья!

23 февраля 2010 г. 7:36 пользователь Иван Бессарабов
<ivan на bessarabov.ru>написал:

> Хочу все-таки научится по умному писать тесты.
>
> Вот есть у меня веб приложение, оно активно взаимодействует с базой
> данных. Хочу все это обложить тестами.
> Сейчас делаю так:
>  1. приложение это крутится на тестовом сервере
>  2. есть файл project.conf где прописаны данные для подключения к базе
> данных
>  3. создал тестовую базу, забил в нее тестове значения и сохранил dump
>  4. в файлах t/*.t есть некоторое количество тестов
>  5. написал скрипт test_it.pl который: а) создает тестовую базу из
> dump-а б) заменяет конфиг файл на файл с данными для подключения для
> тестовой базы в) прогоняет все тесты и отображает их вывод г)
> возвращает конфиг обратно
>
> Это все работает, но я уверен, что можно сделать лучше.
>
> Расскажите, пожалуйста, о вашем опыте тестирования.
>
> Спасибо.
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>

Как сделано у нас.

Сразу хочу сказать, что работаем с несколькими базами (около десятка или
двух), практически каждая имеет кучу реплик (основная база содержит более
сотни реплик).

Итак.
Есть свой фреймворк, который создаёт dataset. Этот dataset сохраняется как
perl-script, содержащий информацию о том из каких баз и каких таблиц записи
с какими ключами нужно использовать, чтобы запустить тест. Естественно, один
и тот же dataset может использоваться во многих тестах, равно как и
несколько dataset'ов в одном тесте.

В начале теста пишется что-то типа:

use Our::Framework::Test::DataSet;

require_data('path/to/data/sets');

А дальше сам тест.

Само собой, эти тесты не покрывают ORM. ORM, точнее, то, что было переписано
из ORM, тестируется по-другому.

Что делает фреймворк?
1. Создаёт таблицы в соответсвующих тестовых базах такие же, как и в
продакшне. Как я уже говорил, баз несколько, для каждой есть своя пустая
тестовая. Или даже несколько, потому что тесты иногда запускаются
параллельно.
2. Наполняет данными из продакшн базы.
3. и всё. :)

Ну, может ещё очищать базу перед запуском теста и некоторые другие функции,
нужные для подготовки базы к тестированию.

Но у нас не совсем типичное приложение, точнее, совсем нетипичное. Многие
решения очень специфические и вряд ли могут быть применимы где-то ещё.

-- 
Andrei Protasovitski
< andrei[dot]protasovitski[at]gmail[dot]com >
Diemen, Netherlands
----------- следущая часть -----------
Вложение в формате HTML было извлечено&hellip;
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20100223/b1a0eb12/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm