Вступление
Современные приложения в основном состоят из фронтенда и бэкенда. Что касается тестирования бэкенда, то оно в основном ассоциируется с тестированием базы данных. В частности происходит проверка корректности записи введенных данных на фронтенде в базу данных бэкенда. Но не только. Также проверяется корректность схем, таблиц, ключей и многого другого. И вот об этом то мы с вами сегодня и поговорим на примере MariaDB Server, одной из самых популярных реляционных баз данных с открытым исходным кодом.
Установка
Прежде чем начать тестировать базу данных, нужно правильно её установить. Потому что обычная установка из .exe файла с помощью установщика Windows бесполезна для проведения каких-либо тестов. Нам нужно произвести установку в режиме отладки, так называемый debug mode. Я хотел бы показать это на платформе Windows, которая является одной из самых распространённых в мире.
Для этого нам нужно три составляющие, а именно:
Visual C++ (при установке Visual Studio обязательно добавьте компонент "Desktop Development with C++"),
CMake
Git
Если у вас есть все эти три компонента на вашем ПК, вы сможете начать непосредственную установку. Нужно создать папку для MariaDB и перейти в неё. В командной строке переходим в созданную папку и затем выполняем команды:
mkdir Test
cd Test
git init
git clone -b mariadb-10.5.15 https://github.com/MariaDB/server.git
Теперь вы скачали исходный код из репозитория. А затем нужно перейти в папку server, создать новую папку bld и перейти в нее:
cd server
mkdir bld
cd bld
Таким образом уже почти всё подготовлено и осталось только выполнить CMake как кроссплатформенный генератор системы сборки с помощью следующей команды:
cmake ..
Сборка закончена:
Последним шагом необходимо собрать Debug version. Установка может занять несколько минут. Это зависит от пропускной способности вашего интернет-соединения. Выполняем команду:
cmake --build . --config Debug
Тестирование
А теперь самая захватывающая часть нашей статьи. Давайте создадим наш первый тест. Это не так просто, но и не так сложно, как кажется. Вот некоторые правила, которые вы должны знать.
Вы должны использовать расширение .test
при сохранении своего теста и сохранять его необходимо и сохранять его нужно в папке, которая находится вот по такому пути c:\Test\server\mysql-test\main
Но запускать наши тесты мы будем из папки, которая находится вот по этому пути c:\Test\server\bld\mysql-test
Так как там находится основной запускающий файл. Уверен что можно добавить этот путь в path и тогда можно будет запускать откуда угодно, но сейчас не об этом речь.
А теперь открываем любой текстовый редактор, например Notepad и пишем наш первый тест:
--echo #
--echo # Test #00001: avarage
--echo #
create table t1 (
pk int primary key,
height int
);
insert into t1 values
(0,9),
(1,5),
(2,4);
show create table t1;
select avg(height) from t1;
drop table t1;
Теперь нам нужно сохранить этот файл с расширением .test, в моем случае я назвал его sergei.test
В этом тесте мы создаем таблицу с тремя строками и вычисляем среднюю высоту.
Запускаем наш тест командой:
mysql-test-run.pl sergei.test
Наш тест пройден успешно, потому что в MariaDB в этом тестовом сценарии нет ошибок и нет ошибок в тестовом скрипте.
Иногда нам нужно записывать наши результаты. Это сделать достаточно просто. Надо запустить тест с опцией записи:
mysql-test-run.pl sergei.test --record
При этом создастся другой файл с расширением .result
в том же каталоге, что и тестовый файл с тем же именем. В моем случае это sergei.result
Заключение
На самом деле тестирование базы данных может включать в себя множество проверок таких как:
Схема
Таблицы базы данных
Столбцы
Ключи и индексы
Хранимые процедуры
Триггеры
Проверка сервера базы данных
Проверка дублирования данных
И безусловно существует очень много вариантов для запуска наших тестов, даже в режиме отладки и контроля процесса. Все эти описания вы можете найти в базе знаний на официальном сайте MariaDB и уже основываясь на этих примерах, создавать свои уникальные тесты.
Какие нужны базовые знания, чтобы стать инженером по тестированию ПО? Что необходимо выучить, чтобы получить первую работу? У кого больше шансов сменить работу и попасть в IT? Приглашаю вас на бесплатный урок, где обсудим, кто и как приходит в технологии через профессию тестировщик программного обеспечения. Урок подойдет тем, кто желает стать тестировщиком, получить новую профессию, работать удаленно.
Комментарии (20)
poxvuibr
00.00.0000 00:00+3Я всё пытаюсь понять, какое отношение статья имеет к тестированию бекенда и у меня не выходит.
Для того, чтобы проверить коректность записи введенных данных на фронтенде в базу данных бэкенда метод, описанный в статье, не подойдёт. Для тестирования корректности схемы тоже.
Я вообще не могу представить, где в разработке веб сервисов могут встретиться такие тесты. Вы такое видели?
Впринципе необходимость делать дебаг сборку намекает, что таким образом можно отлаживать какие-то сложные запросы, чтобы понять как их оптимизировать, но это уже не тестирование.
OlegSpectr
00.00.0000 00:00+1Вот я тоже прочитал и первым делом подумал, а как это можно внедрить на проекте? Вот у меня есть уже БД, как это сделать на ней? Или можно тестировать только в дебаг режиме?
SergeiShaikin Автор
00.00.0000 00:00На самом деле вступления не совсем удачное. Статья о том как тестировать базы данных как сервис на примере MariaDB. Но это так же применимо и к другим типам баз данных. Ведь то чем мы пользуемся тоже необходимо сначала протестировать.
poxvuibr
00.00.0000 00:00+1На самом деле вступления не совсем удачное.
Тогда имеет смысл поправить текст
Статья о том как тестировать базы данных как сервис на примере MariaDB.
Ну вы где-нибудь видели, чтобы кто-то вот так тестировал базу данных как сервис? Если видели, то не могли бы вы описать, что это за компания, какого рода услуги она предоставляет, как использует такие тесты? Я не против, если вы эту компанию выдумаете, но хотелось бы понять, чем она может заниматься, что там нужны такие тесты.
Но это так же применимо и к другим типам баз данных.
Возможно в других базах данных тоже есть дебаг режим, в котором есть тулинг для вот таких тестов. Но кто, кроме разработчиков этих СУБД будет эти тесты запускать?
Ведь то чем мы пользуемся тоже необходимо сначала протестировать.
На что протестировать? На корректность реализации SQL? Такие тесты как правило делают сами разработчики СУБД. А если нужно протестировать подойдёт ли эта база данных для вашего приложения, то это делается совсем по другому.
SergeiShaikin Автор
00.00.0000 00:00Сомневаюсь что разработчики СУБД сами тестируют. Для этого существуют тестеры с совсем другой зарплатой.
poxvuibr
00.00.0000 00:00+2Сомневаюсь что разработчики СУБД сами тестируют.
Я правильно понимаю, что вы сомневатесь, что разработчики СУБД тестируют корректность реализации SQL в той СУБД, которую они разрабатывают?
Для этого существуют тестеры с совсем другой зарплатой.
А эти тестеры работают в той компании, которая разрабатывает СУБД?
SergeiShaikin Автор
00.00.0000 00:00Безусловно любой уважающий девелопер протестирует то, что написал. Но это совсем не тоже самое что делают тестеры, работающие в компании которая разрабатывает СУБД. Иначе они были бы тогда не нужны, от слова совсем.
petropavel
00.00.0000 00:00+2тестируют, не сомневайтесь. и, скажу вам по секрету, зарплата не совсем другая :)
Darth_Anjan
А где ассерты? Или тест заключается в том, что успешно все запросы выполнятся?
SergeiShaikin Автор
Спасибо за идею для следующей статьи.
Darth_Anjan
Нет, серьёзно, объясните про пример из статьи. В каком случае этот тест будет считаться упавшим?
SergeiShaikin Автор
Допустим, разработчик MariaDB внес изменения и сломал то, что раньше работало. В нашем примере это расчет среднего значения. И тест тогда упадет.
nik_savchenko
При всем уважении к Вам как автору, хотелось бы отметить, что если разработчик MariaDB внес изменения, которые сломали SQL-операции в его СУБД, и при этом выкатил это без тестов или со сломанными тестами, то: 1) на это нам с Вами тяжело повлиять, т.к. это внешний продукт, который разрабатываем совсем не мы 2) с высокой долей вероятности это заметят до того, как мы напишем\запустим тест, ибо у проекта достаточная аудитория 3) видимо, если разработчики допускают подобное, тем более настолько регулярно, что за ними надо перепроверять базовые вещи, то, кажется, имеет смысл задуматься о переходе на другую СУБД, с репутацией получше.
В целом, статья была бы значительно более интересной, если бы пример был посложнее, например, сравнительный тест поведения разных СУБД в одних и тех же условиях, тест какой-то из уникальных фич MariaDB, тест, покрывающий какие-то пограничные условия или история баги, которая нашлась случайно на каком-то кейсе и т.д.
Пока, к сожалению, полезности очень не хватает.
SergeiShaikin Автор
Статья как раз и предназначалась для тех кто хотел бы попробовать потестить именно саму базу данных, как сервис.
nik_savchenko
Опишите, пожалуйста, что для Вас "база данных как сервис".
Для меня DBaas это то, что предоставляют облачные провайдеры - готовая БД, которая за меня настроена и админится, а управление осуществляется кликами в интерфейсе, а не запросами в команду ДБА. Где с меня снимается головная боль, связанная с железом, стабильностью и прочее.
https://habr.com/ru/company/vk/blog/568478/ - здесь более подробно.
И в этих БД не надо тестить SQL-операции по причинам, которые я указал выше, это уже готовые, чужие решения, у которых есть свои тестеры.
SergeiShaikin Автор
Свои тестеры, вот о них как раз и речь.
nik_savchenko
Вы один из них? Моё почтение.
Неужели Вам не нашлось что рассказать, кроме достаточного простого SQL-кода и вольного осмысления документации?
Вот пример от Сергея Бронникова, который занимался тестированием СУБД Tarantool - https://habr.com/ru/company/vk/blog/584864/
Уверен, что и у Вас есть, что рассказать такого, что будет полезнее текущего материала.
Поставьте, пожалуйста, хотя бы тег "для начинающих" или вроде того. А database development лучше заменить.
И прошу простить за то, что мог показаться токсичным, просто достаточно много примеров статей ради статей, в которых минимум или ноль полезной информации, а заголовок Вашего материала задел за живое, т.к. близок к личному опыту и поэтому ожидалась чуть более интересная история.
SergeiShaikin Автор
Мне показалось это интересным и полезным. Захотелось поделиться. Сорри если хайпанул с заголовком.
petropavel
эти тесты работают путём сравнения результатов теста с заранее записанным эталонным результатом (тем самым
sergei.result
). если совпало — тест считается успешным.Darth_Anjan
Во, теперь понятно всё! Было бы неплохо добавить это в статью.