Дамп или не дамп

Всё про тестирование в Yii 2.0
Ответить
nds
Сообщения: 26
Зарегистрирован: 2017.09.05, 07:57

Дамп или не дамп

Сообщение nds »

Всем привет, вводим на проекте api тесты и встал вопрос наполнения БД данными. Варианта собтвенно два: 1) фикстуры, 2) дамп БД, который при старте тестов сбрасывается в начальное состояине.
С дампом дела не имел, но был опыт работы с фикстурами на довольно крупном пректе - поддержка на фикстурах не самая простая в том плане, что имея большую цепочку вложенных связей на один кейс нужно "помнить" всю эту цепочку, т.е. грузить по 10-20 фикстур за тест, плюс есть некое неудобство при создании массивов данных и связей между этими данными, в том плане, что есть вероятность накосячить с на этапе их создания.
Вопрос выборки начальных данных на старте теста прмерно одинаков, т.е. в варианте с фикстурами провайдером данных является фикстура, а в варианте с БД провайдером является либо чистый коннекшн либо его обертка в виде, например, репозиторя.
В варианте с дампом БД можно спокойно добавлять/удалять через какой нибудь дружелюбный UI.
Как-то побольше плюсов в содержании дампа БД получается.
Что скажете?
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Дамп или не дамп

Сообщение maleks »

nds писал(а): 2020.10.12, 20:40 нужно "помнить" всю эту цепочку, т.е. грузить по 10-20 фикстур за тест,
Всмысле самому что ли помнить?
Нужно создавать фикстуру которая будет уже от остальных 10 фикстур зависеть.

А ваши дампы вы хотите иметь много разных, для разных окружений-ситуаций, и выбирать какой грузить?
Вопрос в том как и где поддерживать такие дампы.
Фикстуры то в гите хранятся и их меняешь когда структура БД изменяется.
Один раз для одной таблицы.
А у вас если будет куча разных дампов то в них все надо вносить изменения.
а в варианте с БД провайдером является либо чистый коннекшн
Вы еще коннекшены переключать собрались? Но все равно грузить данные туда сначала с дампа?
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Дамп или не дамп

Сообщение ElisDN »

Фикстуры загружаются свои для каждого отдельного теста с нужными только этому тесту данными.
А дамп обычно загружают только один раз перед запуском всех тестов и потом перед каждым тестом не сбрасывают.

Поэтому в варианте с дампом могут быть проблемы, что изменения, записанные тестами для экшенов create, update и delete будут влиять на результат теста экшена index.

Так что с фикстурами тесты получаются полностью изолированными. Одну и ту же строку можно загружать в тесты create, update и delete.

А с дампом данные общие на всех. Для изоляции для каждого теста надо будет делать свою отдельную строку в таблице. Или запускать тесты в транзакции со параметром cleanup: true. Но это не сработает для приёмочных тестов.
nds
Сообщения: 26
Зарегистрирован: 2017.09.05, 07:57

Re: Дамп или не дамп

Сообщение nds »

maleks писал(а): 2020.10.13, 10:49 Нужно создавать фикстуру которая будет уже от остальных 10 фикстур зависеть.
В любом случае нужно создать 10 файлов фикстур + 10 файлов с данными для этих фикстур.
Не проще ли через UI к БД надобавлять данных при этом так же соблюдая изоляцию данных для каждого кейса/теста?
maleks писал(а): 2020.10.13, 10:49 А ваши дампы вы хотите иметь много разных, для разных окружений-ситуаций, и выбирать какой грузить?
дамп полный аналог данным в файле данных фикстур, поэтому
maleks писал(а): 2020.10.13, 10:49 Вопрос в том как и где поддерживать такие дампы.
точно так же, как и файлы данных фикстур
maleks писал(а): 2020.10.13, 10:49 А у вас если будет куча разных дампов то в них все надо вносить изменения.
Почему куча? один дамп.
maleks писал(а): 2020.10.13, 10:49 Вы еще коннекшены переключать собрались?
Коннекшн один, зачем его переключать.
nds
Сообщения: 26
Зарегистрирован: 2017.09.05, 07:57

Re: Дамп или не дамп

Сообщение nds »

ElisDN писал(а): 2020.10.13, 11:00 Поэтому в варианте с дампом могут быть проблемы, что изменения, записанные тестами для экшенов create, update и delete будут влиять на результат теста экшена index.
Вот проблема изоляци данных м/у тестами, что в БД, что в файлах фикстур как мне кажется одинаковый?
Например у меня есть UserFixture, PostFixture и данные которые лежат в файлах users.php и posts.php:

Код: Выделить всё

// users.php
<?php

return [
	// тест для обновления
	[
		'id' => 1,
		'login' => 'Jon',
		'state' => 'ENABLED',
	],
	// тест для удаления
	[
		'id' => 2,
		'login' => 'Michael',
		'state' => 'ENABLED',
	],
	// тест для перевода в статус ENABLED
	[
		'id' => 3,
		'login' => 'Michael',
		'state' => 'DISABLED',
	],
	// тест возможности редактирования поста создателем
	[
		'id' => 4,
		'login' => 'Denis',
		'state' => 'ENABLED',
	],
];


// posts.php
<?php

return [
       // тест возможности редактирования поста создателем
	[
		'user_id' => 4,
		'body' => 'текст',
	]
];
ElisDN писал(а): 2020.10.13, 11:00 Фикстуры загружаются свои для каждого отдельного теста с нужными только этому тесту данными.
Например для теста редактирования поста я в любом случае подгружу все данные из файла users и мне в любом случае конфликты и целостность нужно контролировать указывая корректные id и связи на эти id из других файлов, т.е. точно так же как если бы эти данные у меня лежали в БД.
Т.е. для меня это пока полный аналог БД без каких либо преимуществ.


PS: Я не "топлю" за дамп, просто хочу разобраться)
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Дамп или не дамп

Сообщение ElisDN »

nds писал(а): 2020.10.13, 11:59 Вот проблема изоляци данных м/у тестами, что в БД, что в файлах фикстур как мне кажется одинаковый?
Здесь да, но я говорю про index. Сколько записей он вернёт в паджинации: 3, 4 или 2?
nds
Сообщения: 26
Зарегистрирован: 2017.09.05, 07:57

Re: Дамп или не дамп

Сообщение nds »

ElisDN писал(а): 2020.10.13, 13:10
nds писал(а): 2020.10.13, 11:59 Вот проблема изоляци данных м/у тестами, что в БД, что в файлах фикстур как мне кажется одинаковый?
Здесь да, но я говорю про index. Сколько записей он вернёт в паджинации: 3, 4 или 2?
Для такого теста индекса я б добавил в users.php данные

Код: Выделить всё

[
        // для тестирования получения пользователей
	'id' => 5,
	'login' => 'Vasia',
]
, которые не менялись бы другими тестами, и в результате проверял бы наличие полей id и login в вернувшемся списке.
Т.е. для теста index у меня гарантированно будет минимум одна запись, чего достаточно для проверки.
nds
Сообщения: 26
Зарегистрирован: 2017.09.05, 07:57

Re: Дамп или не дамп

Сообщение nds »

ElisDN писал(а): 2020.10.13, 13:10 Здесь да, но я говорю про index. Сколько записей он вернёт в паджинации: 3, 4 или 2?
Понял, что имеете ввиду,
в таком случае вариант один, делать фикстуру UserIndexCaseFixture users_index_case_data.php.
Ответить