Вступление

Современные приложения в основном состоят из фронтенда и бэкенда. Что касается тестирования бэкенда, то оно в основном ассоциируется с тестированием базы данных. В частности происходит проверка корректности записи введенных данных на фронтенде в базу данных бэкенда. Но не только. Также проверяется корректность схем, таблиц, ключей и многого другого. И вот об этом то мы с вами сегодня и поговорим на примере 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)


  1. Darth_Anjan
    00.00.0000 00:00
    +2

    А где ассерты? Или тест заключается в том, что успешно все запросы выполнятся?


    1. SergeiShaikin Автор
      00.00.0000 00:00

      Спасибо за идею для следующей статьи.


      1. Darth_Anjan
        00.00.0000 00:00
        +1

        Нет, серьёзно, объясните про пример из статьи. В каком случае этот тест будет считаться упавшим?


        1. SergeiShaikin Автор
          00.00.0000 00:00

          Допустим, разработчик MariaDB внес изменения и сломал то, что раньше работало. В нашем примере это расчет среднего значения. И тест тогда упадет.


          1. nik_savchenko
            00.00.0000 00:00
            +1

            При всем уважении к Вам как автору, хотелось бы отметить, что если разработчик MariaDB внес изменения, которые сломали SQL-операции в его СУБД, и при этом выкатил это без тестов или со сломанными тестами, то: 1) на это нам с Вами тяжело повлиять, т.к. это внешний продукт, который разрабатываем совсем не мы 2) с высокой долей вероятности это заметят до того, как мы напишем\запустим тест, ибо у проекта достаточная аудитория 3) видимо, если разработчики допускают подобное, тем более настолько регулярно, что за ними надо перепроверять базовые вещи, то, кажется, имеет смысл задуматься о переходе на другую СУБД, с репутацией получше.

            В целом, статья была бы значительно более интересной, если бы пример был посложнее, например, сравнительный тест поведения разных СУБД в одних и тех же условиях, тест какой-то из уникальных фич MariaDB, тест, покрывающий какие-то пограничные условия или история баги, которая нашлась случайно на каком-то кейсе и т.д.
            Пока, к сожалению, полезности очень не хватает.


            1. SergeiShaikin Автор
              00.00.0000 00:00

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


              1. nik_savchenko
                00.00.0000 00:00

                Опишите, пожалуйста, что для Вас "база данных как сервис".

                Для меня DBaas это то, что предоставляют облачные провайдеры - готовая БД, которая за меня настроена и админится, а управление осуществляется кликами в интерфейсе, а не запросами в команду ДБА. Где с меня снимается головная боль, связанная с железом, стабильностью и прочее.
                https://habr.com/ru/company/vk/blog/568478/ - здесь более подробно.

                И в этих БД не надо тестить SQL-операции по причинам, которые я указал выше, это уже готовые, чужие решения, у которых есть свои тестеры.


                1. SergeiShaikin Автор
                  00.00.0000 00:00

                  Свои тестеры, вот о них как раз и речь.


                  1. nik_savchenko
                    00.00.0000 00:00
                    +3

                    Вы один из них? Моё почтение.
                    Неужели Вам не нашлось что рассказать, кроме достаточного простого SQL-кода и вольного осмысления документации?
                    Вот пример от Сергея Бронникова, который занимался тестированием СУБД Tarantool - https://habr.com/ru/company/vk/blog/584864/
                    Уверен, что и у Вас есть, что рассказать такого, что будет полезнее текущего материала.

                    Поставьте, пожалуйста, хотя бы тег "для начинающих" или вроде того. А database development лучше заменить.

                    И прошу простить за то, что мог показаться токсичным, просто достаточно много примеров статей ради статей, в которых минимум или ноль полезной информации, а заголовок Вашего материала задел за живое, т.к. близок к личному опыту и поэтому ожидалась чуть более интересная история.


                    1. SergeiShaikin Автор
                      00.00.0000 00:00

                      Мне показалось это интересным и полезным. Захотелось поделиться. Сорри если хайпанул с заголовком.


    1. petropavel
      00.00.0000 00:00
      +2

      эти тесты работают путём сравнения результатов теста с заранее записанным эталонным результатом (тем самым sergei.result). если совпало — тест считается успешным.


      1. Darth_Anjan
        00.00.0000 00:00

        Во, теперь понятно всё! Было бы неплохо добавить это в статью.


  1. poxvuibr
    00.00.0000 00:00
    +3

    Я всё пытаюсь понять, какое отношение статья имеет к тестированию бекенда и у меня не выходит.

    Для того, чтобы проверить коректность записи введенных данных на фронтенде в базу данных бэкенда метод, описанный в статье, не подойдёт. Для тестирования корректности схемы тоже.

    Я вообще не могу представить, где в разработке веб сервисов могут встретиться такие тесты. Вы такое видели?

    Впринципе необходимость делать дебаг сборку намекает, что таким образом можно отлаживать какие-то сложные запросы, чтобы понять как их оптимизировать, но это уже не тестирование.


    1. OlegSpectr
      00.00.0000 00:00
      +1

      Вот я тоже прочитал и первым делом подумал, а как это можно внедрить на проекте? Вот у меня есть уже БД, как это сделать на ней? Или можно тестировать только в дебаг режиме?


    1. SergeiShaikin Автор
      00.00.0000 00:00

      На самом деле вступления не совсем удачное. Статья о том как тестировать базы данных как сервис на примере MariaDB. Но это так же применимо и к другим типам баз данных. Ведь то чем мы пользуемся тоже необходимо сначала протестировать.


      1. poxvuibr
        00.00.0000 00:00
        +1

        На самом деле вступления не совсем удачное.

        Тогда имеет смысл поправить текст

        Статья о том как тестировать базы данных как сервис на примере MariaDB.

        Ну вы где-нибудь видели, чтобы кто-то вот так тестировал базу данных как сервис? Если видели, то не могли бы вы описать, что это за компания, какого рода услуги она предоставляет, как использует такие тесты? Я не против, если вы эту компанию выдумаете, но хотелось бы понять, чем она может заниматься, что там нужны такие тесты.

        Но это так же применимо и к другим типам баз данных.

        Возможно в других базах данных тоже есть дебаг режим, в котором есть тулинг для вот таких тестов. Но кто, кроме разработчиков этих СУБД будет эти тесты запускать?

        Ведь то чем мы пользуемся тоже необходимо сначала протестировать.

        На что протестировать? На корректность реализации SQL? Такие тесты как правило делают сами разработчики СУБД. А если нужно протестировать подойдёт ли эта база данных для вашего приложения, то это делается совсем по другому.


        1. SergeiShaikin Автор
          00.00.0000 00:00

          Сомневаюсь что разработчики СУБД сами тестируют. Для этого существуют тестеры с совсем другой зарплатой.


          1. poxvuibr
            00.00.0000 00:00
            +2

            Сомневаюсь что разработчики СУБД сами тестируют.

            Я правильно понимаю, что вы сомневатесь, что разработчики СУБД тестируют корректность реализации SQL в той СУБД, которую они разрабатывают?

            Для этого существуют тестеры с совсем другой зарплатой.

            А эти тестеры работают в той компании, которая разрабатывает СУБД?


            1. SergeiShaikin Автор
              00.00.0000 00:00

              Безусловно любой уважающий девелопер протестирует то, что написал. Но это совсем не тоже самое что делают тестеры, работающие в компании которая разрабатывает СУБД. Иначе они были бы тогда не нужны, от слова совсем.


          1. petropavel
            00.00.0000 00:00
            +2

            тестируют, не сомневайтесь. и, скажу вам по секрету, зарплата не совсем другая :)