Тестування бази даних. Опенсорсні інструменти для тестування баз даних Проблеми при тестуванні баз даних

Laravel надає безліч корисних інструментів для тестування ваших програм, що використовують БД. По-перше, ви можете використати допоміжний метод PHP seeInDatabase()для перевірки того, що дані БД відповідають певному набору критеріїв. Наприклад, якщо ви хочете перевірити, що в таблиці users є запис із полем email рівним [email protected], Ви можете зробити наступне:

PHP
{
// Здійснення виклику програми...

$this -> seeInDatabase ("users" , [
"email" => " [email protected]"
]);
}

Само собою, такі методи як PHP seeInDatabase()створені для зручності. Ви можете використовувати будь-які вбудовані методи PHPUnit перевірки для доповнення своїх тестів.

Скидання БД після кожного тесту

Найчастіше корисно скидати вашу БД після кожного тесту, щоб дані з попереднього тесту не впливали на наступні тести.

Використання міграцій

Один із способів скидання стану БД - відкочувати БД після кожного тесту та мігрувати її перед наступним тестом. Laravel надає простий типаж DatabaseMigrations, який автоматично зробить це для вас. Просто використовуйте цей типаж на класі вашого тесту і все буде зроблено за вас:

PHP




{
use DatabaseMigrations;

/**
*
* @return void
*/

{
$this -> visit ("/" )
-> See ("Laravel 5");
}
}

Використання транзакцій

Інший спосіб скидання стану БД - обернути кожен тест-кейс транзакцію БД. І для цього Laravel також надає зручний типаж Database Transactions, який автоматично зробить це для вас:

PHP

Use Illuminate \ Foundation \ Testing \ WithoutMiddleware ;
use Illuminate \ Foundation \ Testing \ DatabaseMigrations ;
use Illuminate \ Foundation \ Testing \ DatabaseTransactions ;

class ExampleTest extends TestCase
{
use DatabaseTransactions ;

/**
* Приклад базового функціонального тесту.
*
* @return void
*/
public function testBasicExample()
{
$this -> visit ("/" )
-> See ("Laravel 5");
}
}

За замовчуванням цей типаж обертатиме у транзакції лише підключення до БД за замовчуванням. Якщо ваш додаток використовує кілька підключень до БД, вам потрібно визначити властивість PHP $connectionsToTransactу класі вашого тесту. Ця властивість має бути масивом імен підключень до виконання транзакцій з них.

Створення фабрик

При тестуванні вам може знадобитися вставити кілька записів у вашу базу даних перед виконанням тесту. При створенні даних Laravel дозволяє вам замість вказівки значень кожного стовпця вручну визначити стандартний набір атрибутів для кожної з ваших моделей Eloquent за допомогою фабрик. Спочатку погляньте на файл database/factories/ModelFactory.php у вашому додатку. Спочатку цей файл містить визначення однієї фабрики:

PHP $factory -> define (App \ User ::class, function (Faker \ Generator $faker ) (
static $password;

Return [
"name" => $faker -> name ,
"email" => $faker -> unique ()-> safeEmail ,
"password" => $password?: $password = bcrypt ("secret" ),
"remember_token" => str_random (10 ),
];
});

У замиканні, яке є визначенням фабрики, ви можете повернути стандартні тестові значення всіх атрибутів моделі. Замикання отримає екземпляр PHP-бібліотеки Faker, яка дозволяє зручно генерувати різні випадкові дані для тестування.

Зрозуміло, ви можете додати свої власні додаткові фабрики у файл ModelFactory.php . Також можна створити додаткові файли фабрик для кожної моделі для більш зрозумілої організації. Наприклад, ви можете створити файли UserFactory.php та CommentFactory.php у вашій папці database/factories . Всі файли в папці factories будуть автоматично завантажені Laravel.

Стану фабрик

Стани дозволяють визначити окремі зміни, які можна застосовувати до ваших фабрик моделей в будь-яких комбінаціях. Наприклад, ваша модель User може мати стан delinquent (порушник), який змінює стандартне значення одного з атрибутів. Ви можете визначити свої перетворення стану за допомогою методу PHP state() :

PHP $factory -> state (App \ User ::class, "delinquent" , function ($faker ) (
return [
"account_status" => "delinquent" ,
];
});

Використання фабрик

Створення моделей

Після визначення фабрик можна використовувати глобальну функцію PHP factory ()у своїх тестах чи файлах початкових даних для генерування екземплярів моделі. Отже, розглянемо кілька прикладів створення моделей. По-перше, ми використовуємо метод PHP make ()для створення моделей, але не збережемо їх у БД:

PHP public function testDatabase()
{
$user = factory (App\User::class)->make();

Також можна створити колекцію моделей або створити моделі певного типу:

PHP $users = factory (App \ User :: class, 3) -> make ();

Також ви можете застосувати будь-які моделі. Якщо ви хочете застосувати до моделей кілька змін стану, вам потрібно вказати ім'я кожного стану для застосування:

PHP $users = factory (App\User::class, 5)->states("delinquent")->make();

$users = factory (App \ User ::class, 5 )-> states ("premium" , "delinquent" )-> make();

Перевизначення атрибутів

Якщо ви хочете перевизначити деякі зі стандартних значень ваших моделей, ви можете передати масив значень метод PHP make (). Будуть замінені лише зазначені значення, а решта буде задана відповідно до зазначених у фабриці:

PHP $user = factory (App\User::class)-> make ([
"name" => "Abigail" ,
]);

Постійні моделі

Метод PHP create ()не тільки створює екземпляри моделей, але також зберігає їх у БД за допомогою методу Eloquent PHP save() :

PHP public function testDatabase()
{
// Створення одного екземпляра App\User...
$user = factory (App\User::class)->create();

// Створення трьох екземплярів App\User...
$users = factory (App \ User :: class, 3) -> create ();

// Використання моделі у тестах...
}

Ви можете перевизначити атрибути моделі, передавши масив метод PHP create (): PHP make ());
});

Відносини та атрибути замикання

Також ви можете прикріплювати стосунки до моделей за допомогою атрибутів замикання у визначеннях ваших фабрик. Наприклад, якщо ви хочете створити новий екземпляр моделі User при створенні Post, то можете зробити так:

PHP $factory ->
return [
"title" => $faker -> title ,
"content" => $faker -> paragraph ,
"user_id" => function () (
return factory (App\User::class)->create()->id;
}
];
});

Це замикання також отримує певний масив атрибутів фабрики, що містить:

PHP $factory -> define (App \ Post ::class, function ($faker ) (
return [
"title" => $faker -> title ,
"content" => $faker -> paragraph ,
"user_id" => function () (
return factory (App\User::class)->create()->id;
},
"user_type" => function (array $post ) (
return App \ User :: find ($post ["user_id"])-> type;
}
];
});

: Як тестувати та налагоджувати бази даних

Автоматичне модульне тестування (unit test) коду програми – справа проста і зрозуміла. Як тестувати базу даних? Або додаток, який працює з базою даних. Адже база – це не просто програмний код, база даних – це об'єкт, що зберігає свій стан. І якщо ми почнемо в процесі тестування змінювати дані в базі (а без цього, яке ж у нас буде тестування?!), то після кожного тесту база буде змінюватися. Це може стати на заваді наступним тестам і необоротно зіпсувати базу даних.

Ключ до вирішення проблеми – транзакції. Одна з особливостей цього механізму полягає в тому, що доки транзакція не завершена, ви завжди можете скасувати всі зміни і повернути базу в стан на момент початку транзакції.

Алгоритм такий:

  1. відкриваємо транзакцію;
  2. якщо потрібно, виконуємо підготовчі дії для тестування;
  3. виконуємо модульний тест (або просто запускаємо сценарій, роботу якого хочемо перевірити);
  4. перевіряємо результат роботи сценарію;
  5. скасовуємо транзакцію, повертаючи базу даних у вихідний стан.

Навіть якщо в коді, що тестується, залишаться незакриті транзакції, зовнішній ROLLBACK все одно відкотить всі зміни коректно.

Добре, якщо нам потрібно протестувати SQL-сценарій або процедуру, що зберігається. А якщо ми тестуємо додаток, який сам підключається до бази, відкриваючи нове з'єднання? Крім того, якщо ми займаємося налагодженням, то нам напевно захочеться подивитися на базу очима програми, що налагоджується. Як бути у такому разі?

Не поспішайте складати розподілені транзакції, є простіше рішення! Штатними засобами SQL-сервера ви можете відкрити транзакцію на одному з'єднанні, а продовжити її на іншому.

Для цього потрібно підключитися до сервера, відкрити транзакцію, отримати маркер цієї транзакції, а потім передати цей маркер додатку, що тестується. Воно у своєму сеансі приєднається до нашої транзакції і з цього моменту ми у своєму налагоджувальному сеансі будемо бачити дані (а також відчувати блокування) точно так, як їх бачить додаток, що тестується.

Послідовність дій така:

Почавши транзакцію у сеансі налагодження ми повинні дізнатися її ідентифікатор. Це унікальний рядок, за яким сервер розрізняє транзакції. Цей ідентифікатор треба якимось чином передати в додаток, що тестується.

Тепер завдання додатку - перш, ніж воно почне робити те, що йому належить, прив'язатися до нашої контрольної транзакції.

Потім додаток починає працювати, в тому числі запускати свої процедури, що зберігаються, відкривати свої транзакції, змінювати режим ізоляції ... Але наш налагоджувальний сеанс весь цей час буде знаходитися всередині тієї ж транзакції, що і додаток.

Допустимо, програма блокує таблицю і починає змінювати її вміст. У цей момент ніякі інші з'єднання заглянути до заблокованої таблиці не можуть. Але тільки не наш сеанс налагодження! З нього ми можемо дивитися на базу точно так, як це робить додаток, тому що SQL-сервер вважає, що ми знаходимося в одній транзакції.

У той час як для решти сеансів дії програми приховані блокуваннями...

Наш сеанс налагодження спокійно проходить крізь блокування (сервер думає, що це наші власні блокування)!

Або уявіть, що програма починає працювати зі своїми версіями рядків у режимі SNAPSHOT. Як заглянути у ці версії? Навіть це можливо, якщо ви пов'язані спільною транзакцією!

Не забудьте наприкінці цього захоплюючого процесу відкотити контрольну транзакцію. Це можна зробити як з сеансу налагодження (якщо процес тестування завершиться нормально), так і з самого додатка (якщо в ньому трапиться щось непередбачене).

Докладніше про це Ви зможете дізнатися на курсах

Тестування баз данихнегаразд поширене, як тестування інших частин програми. У деяких тестах базу данихвзагалі мокають. У цій статті я постараюся розібрати інструменти для тестування реляційних та NoSQLбаз даних.

Така ситуація пов'язана з тим, що багато баз даних є комерційними і весь необхідний набір інструменту для роботи з ними поставляється організацією, яка розробила цю базу. Однак зростання популярності NoSQL і різних форків MySQL у майбутньому, можливо, змінить такий стан справ.

Database Benchmark

Database Benchmark - це .NET інструмент, призначений для стрес-тестування баз даних великими потоками даних. Додаток виконує два основні тестові сценарії: вставку великої кількості випадково згенерованих записів з послідовними або випадковими ключами та читання вставлених записів, упорядкованих за їх ключами. Він має широкі можливості щодо генерації даних, графічними звітами та конфігуруванням можливих видів звітів.

Підтримувані бази: MySQL, SQL Server, PostgreSQL, MongoDB та багато інших.

Database Rider

Database Rider призначений, щоб тестування бази даних булобуло не складніше юніт-тестування. Ця тула базується на Arquillianі тому Java проекті потрібна лише залежність для DBUnit. Також можливе використання анотацій, як уJUnit, інтеграція з CDIчерез інтерсептори, підтримка JSON, YAML, XML, XLS та CSV, конфігурація через ті ж анотації або ymlфайли, інтеграція з Cucumber, підтримка кількох баз даних, робота з тимчасовими типами в датасетах.

DbFit

DbFit - фреймворк для розробки бази данихчерез тестування. Написаний він поверх FitNesse, який є зрілим та потужним інструментом з великою спільнотою. Тести пишуться на основі таблиць, що робить їх більш читабельними, ніж звичайні юніт - тести. Запустити їх можна з IDE, за допомогою командного рядка або засобами CI - інструментів.

Підтримувані бази: Oracle, SQL Server, MySQL, DB2, PostgreSQL, HSQLDB та Derby.

dbstress

dbstress — інструмент для перформансу та стрес-тестування баз даних, написаний на Scala та Akka. Використовуючи спеціальний JDBC-драйвер, він виконує паралельно запити певну кількість разів (можливо навіть і до кількох хостів) і зберігає підсумковий результат у csvфайл.

Підтримувані бази: ті ж, що й у JDBC .

DbUnit

- це розширення JUnit (також використовуване з Ant), яке між тестами може повертати базу даниху потрібний стан. Дана можливість дозволяє уникнути залежності між тестами, якщо один тест не пройде і при цьому порушить базу, наступний тест почнеться з чистого листа. DbUnit має можливість трансферу даних між базою даних та XML документом. Є й можливість роботи з великими датасетами в потоковому режимі. Також можна перевірити чи збігається отримана база даних певному стандарту.

Підтримувані бази: ті ж, що й у JDBC .

DB Test Driven

DB Test Driven є інструментом для unit - тестуваннябази даних. Ця утиліта дуже легка, працює з нативним SQL і встановлюється прямо в базу. Легко інтегрується з інструментами безперервної інтеграції, а версія для SQL Server може оцінити покриття коду тестами.

Бази, що підтримуються: SQL Server, Oracle.

HammerDB

HammerDB - інструмент для навантажувального та еталонного тестування бази даних.Це автоматизована програма, яка також мультипоточна і має можливість використання динамічних скриптів. яв з відкритим вихідним кодом та інструмента порівняння.Він автоматизований, багатопоточний та розширюємо за допомогою динамічних скриптів.

JdbcSlim

JdbcSlim пропонує легку інтеграцію запитів та команд у Slim FitNesse. Основна увага в проекті приділяється зберіганню рядом конфігурацій, тестових даних та SQL.Це гарантує, що вимоги написані незалежно від реалізації та зрозумілі бізнес-користувачам. У JdbcSlim немає коду специфічного для будь-якої бази даних. Він є агностиком специфіки системи баз даних і не має спеціального коду для будь-якої системи баз даних. У самому фреймворку все описано високорівнево, використання будь-яких специфічних речей відбувається за рахунок зміни всього одного класу.

Підтримувані бази: Oracle, SQL Server, PostgreSQL, MySQL та інші.

JDBDT (Java DataBase Delta Testing)

JDBDT – це Java-бібліотека для тестування (на базі SQL) додатків баз даних.Бібліотека призначена для автоматизованої установки та перевірки бази даних тестів. JDBDTнемає залежностей від сторонніх бібліотек, що спрощує її інтеграцію. Порівняно з існуючими бібліотеками для тестування баз даних, JDBDT концептуально відрізняється можливістю використання δ-затверджень.

Підтримувані бази: PostgreSQL, MySQL, SQLite, Apache Derby, H2 та HSQLDB.

NBi

NBi по суті є аддоном для NUnit і призначений більше для Business Intelligenceсфери. Крім роботи з реляційними базами даних можлива робота з OLAPплатформами (Analysis Services, Mondrian і т.д.), ETLі системами звітів(Microsoft технології). Основна мета даного фреймворку - створення тестів за допомогою декларативного підходу на основі XML. Вам не доведеться писати тести на C# і використовувати Visual Studio для компіляції тестів. Вам лише треба створити xml-файл і інтерпретувати за допомогою NBi, далі тести можна запускати. Крім NUnit можна портувати і інші тестові фреймворки.

Підтримувані бази: SQL Server, MySQL, PostgreSQL, Neo4j, MongoDB, DocumentDB та інші.

NoSQLMap

NoSQLMap написано на Python, щоб проводити аудит на стійкість sql - ін'єкційта різним експлойтам у конфігурації бази даних. А також для оцінки стійкості інтернет-додатки, що використовує NoSQL бази, до такого роду атак. Основними цілями програми є надання інструменту для тестування серверів MongoDB тарозвіювання міфу, що програми NoSQL неприступні для SQL-ін'єкції.

Бази, що підтримуються: MongoDB.

NoSQLUnit

NoSQLUnit - це розширення для JUnit, призначене для написання тестів в Java - додатках, які використовують NoSQL бази даних. Ціль NoSQLUnit- керувати життєвим циклом NoSQL. Даний інструмент допоможе вам підтримувати тестовані бази даних у відомому стані і стандартизувати спосіб написання тестів для програм, що використовують NoSQL.

Підтримувані бази: MongoDB, Cassandra, HBase, Redis та Neo4j.

ruby-plsql-spec

ruby-plsql-spec фреймворк для юніт – тестування PL/SQL за допомогою Ruby. Він базується на двох інших бібліотеках:

  • ruby-plsql – Ruby API для виклику процедур PL/SQL;
  • RSpec – фреймворк для BDD.

Підтримувані бази: Oracle

SeLite

SeLite є розширенням із сімейства Selenium. Основна суть - мати базу даних, що базується на SQLite, ізольовано від програми. Ви зможете виявляти помилки web-сервера і нишпорити скрипти між тестами, працювати зі снепшотами і т.д.

Підтримувані бази: SQLite, MySQL, PostgreSQL.

sqlmap

sqlmap - інструмент для тестування на проникнення, за допомогою якого можна автоматизувати процес виявлення та використання SQL-ін'єкцій та захоплення серверів баз даних. Він оснащений потужним механізмом виявлення та безліччю нішевих функцій пентестерування.

Підтримувані бази: MySQL, Oracle, PostgreSQL, SQL Server, DB2 та інші.

    Опенсорсні інструменти для тестування баз даних

    https://сайт/wp-content/uploads/2018/01/data-base-testing-150x150.png

    Тестування баз даних негаразд поширене, як тестування інших частин програми. У деяких тестах базу даних взагалі мокають. У цій статті я постараюся розібрати інструменти для тестування реляційних та NoSQL баз даних. Така ситуація пов'язана з тим, що багато баз даних є комерційними і весь необхідний набір інструменту для роботи з ними поставляється організацією, яка [...]

1) Цілі та завдання ……………………………………………………………... 3

2) Опис бази даних …………………………………………………... 4

3) Робота з базою даних …………………………………………………… 6

4) Навантажувальне тестування бази даних ………………………………...11

5) Висновок ……………………………………………………………………....15

6) Література ………………………………………………………………....16

Цілі і завдання

Ціль:створити базу даних еліксирів по грі Відьмак 3, яка міститиме в собі інформацію про вид еліксирів, їх властивості, з чого вони виготовляються, місцях де їх можна знайти і про чудовиськи, проти яких їх можна застосовувати. Створити оптимізовані запити до бази даних і протестувати її на навантаження.

Завдання:

· Створити в MySQL Workbench схему бази даних мінімум з 5 сутностями. Описати ці сутності та їх зв'язки.

· Описати використання цієї БД, розписати основні запити, подивитися на їх час виконання та зробити висновки

· Оптимізація БД

· Виконати тестування навантаження за допомогою apache-jmeter. Використовувати для нього розширення для побудови графіків.

Опис бази даних

У роботі використовується створена база даних Witcher1, основними сутностями якої є таблиці:

Рис.1 Схематичне відображення бази даних Witcher1

У таблиці Ingridients містяться необхідні інгредієнти для створення еліксирів у грі, які описані у таблиці Elixirs. Для створення еліксиру використовується кілька інгредієнтів, але кожен з них є унікальним для свого еліксиру. Саме з цієї причини між цими таблицями було встановлено зв'язок 1: n (один до багатьох), що показано на схемі бази даних (Рис.1).

Так само в таблиці Ingridients міститься інформація про назви інгредієнтів (Discription) та про те, де можна знайти даний інгредієнт (WhereFind). Колонка idElixirs є сполучною колонкою для таблиць Ingridients та Elixirs.

У таблиці Elixirs міститься інформація про те, як використовувати конкретний еліксир та назву даного еліксиру. Ця таблиця є ключовою для інших таблиць.

У таблиці Locations міститься інформація про те, в якому місці або біля якого міста можна знайти конкретний інгредієнт.

Таблиця IL містить об'єднану інформацію про те, де і як знайти конкретний інгредієнт у цій місцевості і що він являє собою. Між таблицями Ingridients і Locations було встановлено зв'язок n: m (багато до багатьох), оскільки кілька інгредієнтом може бути знайдено кількох локаціях, що і зазначено у дочірній таблиці IL.

У таблиці Monsters міститься інформація про види чудовиськ в

«Witcher 3», про те, як розпізнати ту чи іншу чудовисько та характерні для них імена.

Таблиця ML є дочірньою таблицею до об'єднання зв'язком n: m таблиць Location і Monsters і містить конкретну інформацію про те, як перемогти саме дане чудовисько і які еліксири для цього можуть бути використані, включаючи спеціальні відьмачі знаки, а так само в якій місцевості і за якими ознаками шукати саме цей вид чудовиська.

Робота з базою даних

База даних Witcher1 містить у собі інформацію про те, які еліксири проти яких чудовиськ необхідно використовувати, спеціальну тактику для особливо небезпечних чудовиськ, таких як: Морова діва, Чорт, Біс, Лісовик і т.д. Аналізувати інформацію з кожної таблиці по порядку займе багато часу, тому створимо спеціальні запити до бази даних, які максимально будуть корисні для користувача.

· Запит про те, як знайти конкретну чудовисько.

Цей запит міститиме в собі ключове слово JOIN, завдяки якому і буде здійснюватися звернення до таблиць ML та Monsters бази даних Witcher1.

Цей запит буде виглядати так:

ml JOIN monsters ON monsters.idMonsters=ml.idMonsters;

Після виконання запиту ми отримаємо на виході досить об'ємну таблицю, яка є результатом об'єднання двох таблиць. Щоб таблиця, що виводиться, не була настільки величезною, можна задати за яким саме чудовиськом виводити інформацію. Тобто, для, наприклад, Хіма, запит буде виглядати так:

monsters.MonstersName, monsters.MonstersDiscription,

ml.DiscriptionHowFind, ml.idLocations

ml JOIN monsters ON monsters.idMonsters=ml.idMonsters

where monsters.MonstersName='Hym';

Якому чудовиську відповідає той чи інший ID можна дізнатися із запиту до таблиць Monsters чи ML. Запити виглядатимуть так:

SELECT SELECT

IdMonsters, MonstersName idMonsters, MonstersName

FROM ml; FROM monsters;

Для перевірки відповідності можна зробити запит до обох таблиць ML і Monsters, попередньо об'єднавши їх за idMonsters.

ml.idMonsters, monsters.MonstersName

ml JOIN monsters ON

ml.idMonsters=monsters.idMonsters

ORDER BY monsters.idMonsters;

· Запит про те, який еліксир підходить до цього чудовиська.

Для реалізації цього запиту буде використано JOIN. Запит буде звернений до двох таблиць Elixirs і Monsters і міститиме інформацію про те, коли і який еліксир випити у боротьбі з чудовиськом:

monsters.MonstersName ,elixirs.ElixirName, elixirs.ElixirDiscription

elixirs JOIN monsters ON

elixirs.idElixirs=monsters.idElixirs;

· Запит про те, який інгредієнт знаходиться у тій чи іншій місцевості.

Для реалізації цього запиту буде використано JOIN. Запит буде звернений до двох таблиць Ingridients і Locations і міститиме інформацію про те, який інгредієнт в якій локації знаходиться і інформацію про його вид:

ingridients.Discription, locations.Discription, ingridients.WhereFind

ingridients JOIN locations ON

ingridients.idIngridients=locations.idIngridients

ORDER BY ingridients.Discription;

· Запити UPDATE

Даний запит реалізуємо для чудовиська у таблиці Monsters на ім'я Хім (Hym). Допустимо, ми хочемо поміняти йому ім'я на Him:

monsters

SET MonstersName="Him"

where idMonsters=1;

Але, тому що в англійському варіанті правильно Hym то повернемо все назад:

monsters

SET MonstersName="Hym"

where idMonsters=1;

Рис.2. Реалізація запитів UPDATE

· Запити "агрегації". COUNT та COUNT(DISTINCT)

Функція COUNT підраховує кількість не порожніх рядків (всередині них не NULL) у цій таблиці. COUNT має оптимізовану версію для виведення кількості рядків, якщо вона використовується для 1 таблиці. Наприклад:

Рис.3. Підрахунок рядків у таблицях Elixirs, Monsters та об'єднаній таблиці Monsters JOIN elixirs.

Функція COUNT(DISTINCT) використовується для виведення кількості рядків, що не повторюються, в таблицях і є більш оптимізованою версією сімейства функцій COUNT:

Рис.4. Підрахунок неповторних еліксирів у таблиці Monsters.

· Функція DELETE.

Додамо до таблиці Elixirs ще один рядок, використовуючи INSERT:

INSERT INTO elixirs VALUES (6, 'ForDelete', 'DiscriptionDelete');

Рис.5. Додавання рядка до таблиці Elixirs.

Тепер зробимо запит на видалення цього рядка, тому що немає необхідності в еліксирі, який ніяк не допоможе у боротьбі з чудовиськами:

DELETE FROM elixirs WHERE idElixirs=6;

Рис.6. Видалення доданого рядка.

Навантажувальне тестування бази даних

Тепер, коли виконані запити та звернення до бази даних налагоджено, її можна протестувати за кількома параметрами:

· Response Times Over Time або Часи відгуку залежно від часу – ця перевірка відображає інформацію для кожного запиту його середній час відгуку в мілісекундах.

· Response Times Distribution або Розподіл часу відгуку - ця перевірка відображає кількість відповідей у ​​певний інтервал часу, під час якого виконувався запит.

· Response Time Percentiles або Відсоток часу відгуку – ця перевірка відображає процентили для значень часу відгуку. На графіці по осі X розташовуватимуться відсотки, по осі Y-час відгуку.

Для максимально правдоподібних тестів поставимо певні

параметри:

Рис.7. Параметри тестування

Number of Threads(users) – Число віртуальних користувачів. У нашому випадку поставимо 1000, щоб максимально навантажити нашу базу даних.

Ramp-Up Period – період, протягом якого всі користувачі будуть задіяні.

Перевірятимемо всі запити JOIN на їхню швидкодію при одночасної їх активації кількома користувачами.

Останні 3 пункти – це графобудівники тих перевірок, за якими ми тестуватимемо базу даних.

·
Перевірка Response Times Over Time

Рис.7. Результат виконання запитів під час тесту Response Times Over Time

Як видно з графіка, найважчий запит був «Monsters&Locations» і зажадав найбільше часу на його відгук. Переконайтеся, що запит запитав тривалий час, виконавши запит у консолі. Основна причина такої затримки пояснюється тим, що і в таблиці Monsters, і в таблиці ML містяться об'ємні пояснення до чудовиськ або місць, де їх знайти. Через це запит виконується досить тривалий час.

·
Перевірка Response Times Distribution

Рис.8. Результат виконання запитів під час тесту Response Times Distribution.

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

·
Перевірка Response Time Percentiles

По осі ординат зазначено час виконання, а по осі абсцис розміщені відсотки від загальної кількості. За графіком можна зробити висновок, що 90% запитів виконуються в інтервал часу від 0 до 340 мілісекунд, причому з 5% до 15% кількість запитів зростає лінійно, а далі по експоненті з дуже малим коефіцієнтом ступеня зростання.

10%, що залишилися, виконуються в інтервал часу від 340 мілісекунд до 700 мілісекунд, завдяки чому можна зробити висновок, що здійснюється дуже велике навантаження на базу даних.

Висновок

У цій роботі були виконані всі завдання. База даних була спроектована, заповнена даними, показано основні можливості її використання у вигляді запитів та їх результати виконання.

Наприкінці, було виконано тестування та аналіз його результатів, з наступними висновками.

Необхідно відзначити, що сама БД була створена як лише навчальна, тому вона не настільки об'ємна.

Ще однією важливою характеристикою є безпека: паролі, якщо буде створено таку таблицю, потрібно зберігати у зашифрованому вигляді та оберігати від неправомірного доступу.

Література

1. http://phpclub.ru/mysql/doc/- інтернет ресурс «MySQL – довідкове керівництво»

2. Шварц Б., Зайцев П., Ткаченко В. та ін. – MySQL. Оптимізація продуктивності (2-ге видання)

3. Талман Л., Кіндал М., Белл Ч. - «Забезпечення високої доступності систем на основі MySQL»

4. Сапковський Анджей – «Відьмак (велика збірка)», Кількість сторінок: 571

5. CD PROJECT RED, GOG COM. «Відьмак 3: Дике Полювання».


Подібна інформація.


Тестування бази даних необхідно у тому, щоб у працездатності БД. Для цього складаються запити в БД різних видів: на вибірку, з розрахунковими полями, параметричні, з групуванням даних, на оновлення, видалення.

Приклад запиту: Вивести перелік книжок, взятих конкретним учнем. ПІБ задати як параметр.

Приклад запиту: Вивести список книг конкретного автора із зазначенням місць зберігання у бібліотеці. ПІБ автора задати як параметр.

Приклад запиту: Визначити за номером квитка читача в якому класі навчається відповідний учень і хто його класний керівник.

Мал. 15. Запит 3. «Знайти учня за номером читацького квитка і визначити в якому класі він навчається»

Приклад запиту: Визначити по ПІБ_Учня в якому класі навчається заборговець і хто його класний керівник.

Для зручності роботи із записами різних таблиць була створена, за допомогою якої можна відкрити будь-яку таблицю, необхідну для перегляду, оновлення та зміни інформації. Кнопкова форма представлена ​​на рис. 17.

Мал. 17. Кнопкова форма бази даних

ВИСНОВОК

Випускну кваліфікаційну роботу виконано на актуальну тему «Розробка інформаційної системи для сільської шкільної бібліотеки».

Мета дипломного проектування розробити інформаційну систему для шкільної бібліотеки Саратівської області Федорівського району МОУ ЗОШ п. Сонячний досягнуто.

У ході виконання дипломного проекту було вирішено такі завдання:

Розглянути бібліотеку як елемент освітнього середовища;

Вивчити урядову концепцію підтримки та розвитку дитячого читання;

Проаналізовано технології роботи бібліотек загальноосвітніх закладів;

Описано предметну область на основі проведеного обстеження;

-розроблено технічне завдання розроблення інформаційної системи для бібліотеки сільської школи;

-побудовано функціональну модель діяльності шкільної бібліотеки;

- опис вхідних та вихідних потоків інформації;

розроблено інформаційну систему на основі СУБДAccеss;

- протестовано розроблену реляційну базу даних.

У випускній кваліфікаційній роботі для побудови інформаційної системи, що забезпечує автоматизацію ручних операцій із забезпечення процесів зберігання, пошуку, обліку видачі та повернення учнями, на основі аналізу результатів обстеження предметної галузі було розроблено технічне завдання. У технічному завданні (ТЗ) відбилися вимоги користувачів системи – бібліотечних працівників.

На основі ТЗ розроблено функціональну модель діяльності сільської шкільної бібліотеки. Функціональна модель, своєю чергою, послужила матеріалом виявлення неавтоматизованих ділянок у роботі бібліотеки.

Вибір СУБД як середовища розробки визначався технічними здібностями сільської бібліотеки. В результаті на основі СУБД Accessзбудовано ядро ​​інформаційної системи – база даних.

Для зручності роботи користувачів розроблено інтерфейс кнопки.

Для тестування бази даних розроблено відповідні запити. Виконання цих запитів дозволяє будувати висновки про нормальної працездатності інформаційної системи для сільської шкільної бібліотеки.

БІБЛІОГРАФІЧНИЙ СПИСОК