Pengujian basis data. Alat sumber terbuka untuk pengujian basis data Kesulitan dalam pengujian basis data

Laravel menyediakan banyak alat yang berguna untuk menguji aplikasi database Anda. Pertama, Anda bisa menggunakan metode pembantu PHP lihatInDatabase() untuk memeriksa apakah data dalam database memenuhi serangkaian kriteria tertentu. Misalnya, jika Anda ingin memeriksa apakah tabel pengguna memiliki catatan dengan bidang email sama dengan [dilindungi email], Anda dapat melakukan hal berikut:

PHP
{
// Membuat panggilan aplikasi...

$ini -> lihatInDatabase("pengguna" , [
"email" => " [dilindungi email]"
]);
}

Tentu saja metode seperti PHP lihatInDatabase() diciptakan untuk kenyamanan. Anda dapat menggunakan metode validasi bawaan PHPUnit mana pun untuk meningkatkan pengujian Anda.

Menyetel ulang database setelah setiap pengujian

Seringkali berguna untuk mereset database Anda setelah setiap pengujian sehingga data dari pengujian sebelumnya tidak mempengaruhi pengujian berikutnya.

Menggunakan Migrasi

Salah satu cara untuk mereset status database adalah dengan melakukan roll back database setelah setiap pengujian dan memigrasikannya sebelum pengujian berikutnya. Laravel menyediakan sifat DatabaseMigrations sederhana yang secara otomatis akan melakukan ini untuk Anda. Cukup gunakan sifat ini di kelas ujian Anda dan semuanya akan dilakukan untuk Anda:

PHP




{
gunakan DatabaseMigrations ;

/**
*
* @pengembalian batal
*/

{
$ini -> kunjungi ("/" )
-> lihat ("Laravel 5" );
}
}

Menggunakan Transaksi

Cara lain untuk mereset status DB adalah dengan menggabungkan setiap kasus uji dalam transaksi DB. Dan untuk ini, Laravel juga menyediakan sifat DatabaseTransactions yang berguna yang secara otomatis akan melakukan ini untuk Anda:

PHP

Gunakan Illuminate\Foundation\Testing\WithoutMiddleware;
gunakan Illuminate\Foundation\Testing\DatabaseMigrations;
gunakan Illuminate\Foundation\Testing\DatabaseTransactions;

kelas ContohTest memperluas TestCase
{
gunakan DatabaseTransactions ;

/**
*Contoh uji fungsional dasar.
*
* @pengembalian batal
*/
fungsi publik testBasicExample()
{
$ini -> kunjungi ("/" )
-> lihat ("Laravel 5" );
}
}

Secara default, sifat ini hanya akan menggabungkan koneksi database default dalam suatu transaksi. Jika aplikasi Anda menggunakan beberapa koneksi database, Anda perlu mendefinisikan properti PHP $koneksiToTransact di kelas ujianmu. Properti ini harus berupa serangkaian nama koneksi untuk melakukan transaksi.

Penciptaan pabrik

Saat menguji, Anda mungkin perlu memasukkan beberapa catatan ke dalam DB Anda sebelum menjalankan pengujian. Saat membuat data ini, alih-alih menentukan nilai setiap kolom secara manual, Laravel memungkinkan Anda menentukan kumpulan atribut standar untuk setiap model Eloquent Anda menggunakan pabrik. Pertama, lihat file database/factories/ModelFactory.php di aplikasi Anda. Awalnya, file ini berisi definisi satu pabrik:

PHP $pabrik -> tentukan (Aplikasi \ Pengguna ::kelas, fungsi (Faker \ Generator $faker ) (
statis $kata sandi;

Kembali [
"nama" => $pemalsu -> nama ,
"email" => $faker -> unik()-> safeEmail ,
"kata sandi" => $kata sandi ?: $kata sandi = bcrypt ("rahasia") ,
"ingat_token" => str_random (10 ),
];
});

Dalam penutupan yang berfungsi sebagai definisi pabrik, Anda dapat mengembalikan nilai pengujian standar untuk semua atribut model. Penutupan akan menerima instance dari perpustakaan Faker PHP, yang memungkinkan Anda dengan mudah menghasilkan berbagai data acak untuk pengujian.

Tentu saja, Anda dapat menambahkan pabrik tambahan Anda sendiri di file ModelFactory.php. Anda juga dapat membuat file pabrik tambahan untuk setiap model untuk pengaturan yang lebih jelas. Misalnya, Anda dapat membuat file UserFactory.php dan CommentFactory.php di folder database/pabrik Anda. Semua file yang ada di folder pabrik akan otomatis diunduh oleh Laravel.

Negara bagian pabrik

Status memungkinkan Anda menentukan perubahan individual yang dapat diterapkan ke pabrik model Anda dalam kombinasi apa pun. Misalnya, model Pengguna Anda mungkin memiliki status tunggakan yang mengubah nilai default salah satu atribut. Anda dapat menentukan transformasi keadaan Anda menggunakan metode PHP negara() :

PHP $pabrik -> status (Aplikasi \ Pengguna ::kelas, "nakal" , fungsi ($faker ) (
kembali [
"account_status" => "menunggak" ,
];
});

Menggunakan pabrik

Membuat Model

Setelah pabrik ditentukan, Anda dapat menggunakan fungsi global PHP pabrik() dalam pengujian atau file benih Anda untuk menghasilkan contoh model. Jadi mari kita lihat beberapa contoh pembuatan model. Pertama, kami menggunakan metode PHP membuat() untuk membuat model, tetapi tidak akan menyimpannya dalam database:

PHP fungsi publik testDatabase()
{
$pengguna = pabrik (Aplikasi\Pengguna::kelas)->make();

Anda juga dapat membuat kumpulan model atau membuat model dengan tipe tertentu:

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

Anda juga dapat menerapkannya pada model. Jika Anda ingin menerapkan beberapa perubahan negara bagian pada model, Anda perlu menentukan nama setiap negara bagian yang akan diterapkan:

PHP $users = pabrik (Aplikasi \ Pengguna ::kelas, 5 )-> menyatakan ( "nakal" ) -> make();

$users = pabrik (Aplikasi \ Pengguna ::kelas, 5 ) -> menyatakan ( "premium" , "nakal" ) -> make ();

Penggantian Atribut

Jika Anda ingin mengganti beberapa nilai default model Anda, Anda dapat meneruskan array nilai ke metode PHP membuat(). Hanya nilai yang ditentukan yang akan diganti, dan sisanya akan ditetapkan seperti yang ditentukan di pabrik:

PHP $pengguna = pabrik (Aplikasi\Pengguna::kelas)->buat ([
"nama" => "Abigail" ,
]);

Model permanen

metode PHP membuat() tidak hanya membuat instance model, tetapi juga menyimpannya dalam database menggunakan metode Eloquent PHP menyimpan() :

PHP fungsi publik testDatabase()
{
// Buat satu instance App\User...
$pengguna = pabrik (Aplikasi\Pengguna::kelas)->buat();

// Buat tiga instance App\User...
$users = pabrik (Aplikasi\Pengguna::kelas, 3)->buat();

// Menggunakan model dalam pengujian...
}

Anda dapat mengganti atribut model dengan meneruskan array ke metode PHP membuat():PHP membuat());
});

Hubungan Penutupan dan Atribut

Anda juga dapat melampirkan hubungan ke model menggunakan atribut penutupan dalam definisi pabrik Anda. Misalnya, jika Anda ingin membuat instance baru dari model Pengguna saat membuat Postingan, Anda dapat melakukan ini:

PHP $pabrik ->
kembali [
"judul" => $faker -> judul ,
"konten" => $faker -> paragraf ,
"user_id" => fungsi() (
kembalikan pabrik (App\User::class)->create()->id;
}
];
});

Penutupan ini juga menerima serangkaian atribut tertentu dari pabrik yang memuatnya:

PHP $pabrik -> tentukan (Aplikasi \ Posting ::kelas, fungsi ($faker ) (
kembali [
"judul" => $faker -> judul ,
"konten" => $faker -> paragraf ,
"user_id" => fungsi() (
kembalikan pabrik (App\User::class)->create()->id;
},
"user_type" => fungsi (array $post ) (
return App\User::find($post["user_id"])->type;
}
];
});

: Cara menguji dan men-debug database

Pengujian unit otomatis kode aplikasi sederhana dan mudah. Bagaimana cara menguji database? Atau aplikasi yang bekerja dengan database. Bagaimanapun, database bukan hanya sekedar kode program, database adalah objek yang menyimpan statusnya. Dan jika kita mulai mengubah data dalam database selama pengujian (dan tanpa ini, pengujian seperti apa yang akan kita lakukan?!), maka setelah setiap pengujian, database akan berubah. Hal ini dapat mengganggu pengujian selanjutnya dan merusak database secara permanen.

Kunci penyelesaian masalah tersebut adalah transaksi. Salah satu fitur dari mekanisme ini adalah selama transaksi belum selesai, Anda selalu dapat membatalkan semua perubahan dan mengembalikan database ke keadaan saat transaksi dimulai.

Algoritmanya seperti ini:

  1. membuka transaksi;
  2. jika perlu, kami melakukan langkah persiapan pengujian;
  3. melakukan pengujian unit (atau cukup menjalankan skrip yang operasinya ingin kita periksa);
  4. periksa hasil skrip;
  5. Kami membatalkan transaksi, mengembalikan database ke keadaan semula.

Bahkan jika ada transaksi yang belum ditutup dalam kode yang diuji, ROLLBACK eksternal akan tetap mengembalikan semua perubahan dengan benar.

Ada baiknya jika kita perlu menguji skrip SQL atau prosedur tersimpan. Bagaimana jika kita menguji aplikasi yang terhubung ke database, membuka koneksi baru? Selain itu, jika kita sedang melakukan debug, kita mungkin ingin melihat database melalui sudut pandang aplikasi yang sedang di-debug. Apa yang harus dilakukan dalam kasus ini?

Jangan terburu-buru membuat transaksi terdistribusi, ada solusi yang lebih sederhana! Dengan menggunakan alat server SQL standar, Anda dapat membuka transaksi di satu koneksi dan melanjutkannya di koneksi lain.

Untuk melakukan ini, Anda perlu terhubung ke server, membuka transaksi, mendapatkan token untuk transaksi tersebut, dan kemudian meneruskan token ini ke aplikasi yang sedang diuji. Ini akan bergabung dengan transaksi kita dalam sesinya dan sejak saat itu, dalam sesi debugging kita, kita akan melihat data (dan juga merasakan kuncinya) persis seperti yang dilihat oleh aplikasi yang sedang diuji.

Urutan tindakannya adalah sebagai berikut:

Setelah memulai transaksi dalam sesi debug, kita harus mengetahui pengidentifikasinya. Ini adalah string unik yang digunakan server untuk membedakan transaksi. Pengidentifikasi ini entah bagaimana harus diteruskan ke aplikasi yang sedang diuji.

Sekarang tugas aplikasi adalah mengikat transaksi kontrol kita sebelum mulai melakukan apa yang seharusnya dilakukan.

Kemudian aplikasi mulai bekerja, termasuk menjalankan prosedur tersimpannya, membuka transaksinya, mengubah mode isolasi... Namun sesi debugging kita selama ini akan berada di dalam transaksi yang sama dengan aplikasi.

Katakanlah sebuah aplikasi mengunci tabel dan mulai mengubah isinya. Saat ini, tidak ada koneksi lain yang dapat melihat ke dalam tabel yang terkunci. Tapi bukan sesi debugging kami! Dari sana kita dapat melihat database dengan cara yang sama seperti aplikasi, karena server SQL percaya bahwa kita berada dalam transaksi yang sama.

Sementara untuk semua sesi lainnya, tindakan aplikasi disembunyikan oleh kunci...

Sesi debugging kami melewati kunci (server mengira itu adalah kunci kami sendiri)!

Atau bayangkan aplikasi mulai bekerja dengan versi stringnya sendiri dalam mode SNAPSHOT. Bagaimana cara melihat versi ini? Bahkan ini mungkin terjadi jika Anda terhubung dengan transaksi yang sama!

Jangan lupa untuk mengembalikan transaksi kontrol di akhir proses menarik ini. Hal ini dapat dilakukan baik dari sesi debugging (jika proses pengujian selesai secara normal) dan dari aplikasi itu sendiri (jika terjadi sesuatu yang tidak terduga di dalamnya).

Anda dapat mempelajari lebih lanjut tentang ini di kursus

Pengujian basis data tidak biasa seperti menguji bagian lain dari aplikasi. Dalam beberapa tes basis data umumnya basah. Pada artikel ini saya akan mencoba melihat alat untuk menguji relasional dan TanpaSQL database.

Situasi ini disebabkan oleh kenyataan bahwa banyak database bersifat komersial dan seluruh rangkaian alat yang diperlukan untuk bekerja dengannya disediakan oleh organisasi yang mengembangkan database. Namun, semakin populernya NoSQL dan berbagai fork MySQL di masa depan dapat mengubah keadaan ini.

Tolok Ukur Basis Data

Tolok Ukur Basis Data adalah alat .NET yang dirancang untuk menguji basis data dengan aliran data besar. Aplikasi menjalankan dua skenario pengujian utama: memasukkan sejumlah besar catatan yang dihasilkan secara acak dengan kunci berurutan atau acak, dan membaca catatan yang disisipkan yang diurutkan berdasarkan kuncinya. Ia memiliki kemampuan luas untuk menghasilkan data, laporan grafis, dan mengonfigurasi kemungkinan jenis laporan.

Basis data yang didukung: MySQL, SQL Server, PostgreSQL, MongoDB dan banyak lainnya.

Pengendara Basis Data

Database Rider dirancang untuk memungkinkan pengujian ada database tidak lebih sulit daripada pengujian unit. Alat ini didasarkan pada Arquillian dan oleh karena itu proyek Java hanya memerlukan ketergantungan untuk DBUnit. Dimungkinkan juga untuk menggunakan anotasi, seperti padaJUnit, integrasi dengan CDI melalui interseptor, dukungan untuk JSON, YAML, XML, XLS dan CSV, konfigurasi melalui anotasi yang sama atau yml file, integrasi dengan Timun, dukungan untuk banyak database, bekerja dengan tipe sementara dalam kumpulan data.

DbFit

DbFit - kerangka pengembangan Basis data melalui pengujian. Itu tertulis di atas Kebugaran, yang merupakan alat yang matang dan kuat dengan komunitas besar. Tes ditulis berdasarkan tabel, sehingga lebih mudah dibaca dibandingkan tes biasa satuan - tes. Anda dapat menjalankannya dari IDE, menggunakan baris perintah, atau menggunakan alat CI.

Basis data yang didukung: Oracle, SQL Server, MySQL, DB2, PostgreSQL, HSQLDB dan Derby.

dbstress

dbstress adalah alat pengujian kinerja dan stres database yang ditulis dalam Scala dan Akka. Menggunakan khusus JDBC-driver, ia mengeksekusi permintaan secara paralel beberapa kali (bahkan mungkin ke beberapa host) dan menyimpan hasil akhirnya di csv mengajukan.

Basis data yang didukung: semuanya sama seperti di JDBC.

Unit Db

adalah perpanjangan JUnit (juga digunakan dengan Ant), yang dapat kembali di antara pengujian basis data ke keadaan yang diinginkan. Fitur ini memungkinkan Anda menghindari ketergantungan antar pengujian; jika satu pengujian gagal dan pada saat yang sama melanggar database, maka pengujian berikutnya akan dimulai dari awal. DbUnit memiliki kemampuan untuk mentransfer data antara database dan dokumen XML. Dimungkinkan juga untuk bekerja dengan kumpulan data besar dalam mode streaming. Anda juga dapat memeriksa apakah database yang dihasilkan sesuai dengan standar tertentu.

Basis data yang didukung: semuanya sama seperti di JDBC.

Tes DB Didorong

DB Test Driven adalah alat untuk satuan - pengujian Basis data. Utilitas ini sangat ringan, bekerja dengan SQL asli dan diinstal langsung ke database. Mudah diintegrasikan dengan alat integrasi berkelanjutan, dan versi SQL Server memiliki kemampuan untuk mengevaluasi cakupan kode melalui pengujian.

Basis data yang didukung: SQL Server, Oracle.

PaluDB

HammerDB - alat pengujian beban dan benchmark Basis data. Ini adalah aplikasi otomatis yang juga multi-thread dan memiliki kemampuan untuk menggunakan skrip dinamis. Java open source dan alat perbandingan. Ini otomatis, multi-utas, dan dapat diperluas dengan dukungan untuk skrip dinamis.

JdbcSlim

JdbcSlim menawarkan integrasi pertanyaan dan perintah yang mudah ke Slim FitNesse. Fokus proyek ini adalah menyimpan berbagai konfigurasi, data pengujian, dan SQL. Hal ini memastikan bahwa persyaratan ditulis secara independen dari penerapannya dan dapat dimengerti oleh pengguna bisnis. JdbcSlim tidak memiliki kode khusus database. Dia agnostik tentang spesifikasi sistem basis data dan tidak memiliki kode khusus untuk sistem basis data apa pun. Dalam kerangka itu sendiri, semuanya dijelaskan pada tingkat tinggi; implementasi hal-hal spesifik terjadi dengan mengubah satu kelas saja.

Basis data yang didukung: Oracle, SQL Server, PostgreSQL, MySQL dan lainnya.

JDBDT (Pengujian Delta Basis Data Java)

JDBDT adalah perpustakaan Java untuk menguji aplikasi database (berbasis SQL). Perpustakaan dirancang untuk instalasi otomatis dan pengujian pengujian database. JDBDT tidak memiliki ketergantungan pada perpustakaan pihak ketiga, yang menyederhanakan integrasinya. Dibandingkan dengan perpustakaan pengujian database yang ada, JDBDT secara konseptual berbeda dalam kemampuannya menggunakan pernyataan δ.

Basis data yang didukung: PostgreSQL, MySQL, SQLite, Apache Derby, H2 dan HSQLDB.

NBi

NBi pada dasarnya adalah tambahan untuk NUnit dan lebih ditujukan untuk Intelijen Bisnis bola. Selain bekerja dengan database relasional, dimungkinkan untuk bekerja dengannya OLAP platform (Layanan Analisis, Mondrian, dll.), DLL Dan sistem pelaporan(Teknologi Microsoft). Tujuan utama dari framework ini adalah untuk membuat pengujian menggunakan pendekatan deklaratif berdasarkan XML. Anda tidak perlu menulis tes dalam C# atau menggunakan Visual Studio untuk mengkompilasi tes. Anda hanya perlu membuat file xml dan menafsirkannya menggunakan NBi, lalu Anda dapat menjalankan tesnya. Selain NUnit, ini dapat di-porting ke kerangka pengujian lainnya.

Basis data yang didukung: SQL Server, MySQL, PostgreSQL, Neo4j, MongoDB, DocumentDB, dan lainnya.

Tidak adaSQLMap

NoSQLMap ditulis dengan Python untuk melakukan audit ketahanan sql - suntikan dan berbagai eksploitasi dalam konfigurasi database. Dan juga untuk menilai ketahanan aplikasi web yang menggunakan database NoSQL terhadap jenis serangan ini. Tujuan utama dari aplikasi ini adalah untuk menyediakan alat untuk menguji server MongoDB dan menghilangkan mitos bahwa aplikasi NoSQL tidak dapat ditembus oleh injeksi SQL.

Basis data yang didukung: MongoDB.

Tidak adaSQLUUnit

NoSQLUnit adalah ekstensi untuk JUnit yang dirancang untuk menulis tes dalam aplikasi Java yang menggunakan database NoSQL. Target Tidak adaSQLUUnit— mengelola siklus hidup NoSQL. Alat ini akan membantu Anda menjaga database yang Anda uji dalam kondisi yang diketahui dan menstandarkan cara Anda menulis pengujian untuk aplikasi menggunakan NoSQL.

Basis data yang didukung: MongoDB, Cassandra, HBase, Redis dan Neo4j.

spesifikasi ruby-plsql

kerangka ruby-plsql-spec untuk pengujian unit PL/SQL menggunakan Ruby. Ini didasarkan pada dua perpustakaan lain:

  • ruby-plsql – Ruby API untuk memanggil prosedur PL/SQL;
  • RSpec adalah kerangka kerja untuk BDD.

Basis data yang didukung: Oracle

SeLite

SeLite adalah perpanjangan dari keluarga Selenium. Ide utamanya adalah memiliki database berdasarkan SQLite, diisolasi dari aplikasi. Anda akan dapat mendeteksi kesalahan server web dan kesalahan skrip di antara pengujian, bekerja dengan snapshot, dll.

Basis data yang didukung: SQLite, MySQL, PostgreSQL.

peta sql

sqlmap adalah alat pengujian penetrasi yang dapat mengotomatiskan proses mendeteksi dan mengeksploitasi injeksi SQL dan mengambil alih server database. Ia dilengkapi dengan mesin pendeteksi yang kuat dan banyak fitur pentesting khusus.

Basis data yang didukung: MySQL, Oracle, PostgreSQL, SQL Server, DB2 dan lainnya.

    Alat sumber terbuka untuk pengujian basis data

    https://site/wp-content/uploads/2018/01/data-base-testing-150x150.png

    Pengujian basis data tidak sesering pengujian bagian lain dari aplikasi. Dalam beberapa pengujian, database sepenuhnya diolok-olok. Pada artikel ini saya akan mencoba menganalisis alat untuk menguji database relasional dan NoSQL. Situasi ini disebabkan oleh kenyataan bahwa banyak database bersifat komersial dan seluruh rangkaian alat yang diperlukan untuk bekerja dengannya disediakan oleh organisasi yang […]

1) Maksud dan tujuan…………………………………………………………... 3

2) Deskripsi database…………………………………………………... 4

3) Bekerja dengan database ……………………………………………………… 6

4) Pengujian beban database……………………………...11

5) Kesimpulan………………………………………………………………………....15

6) Sastra……………………………………………………………....16

Tujuan dan sasaran

Target: membuat database ramuan untuk game The Witcher 3, yang berisi informasi tentang jenis ramuan, sifat-sifatnya, terbuat dari apa, tempat ditemukannya, dan tentang monster yang dapat digunakan untuk ramuan tersebut. Buat kueri yang dioptimalkan untuk database ini dan uji bebannya.

Tugas:

· Buat skema database dengan setidaknya 5 entitas di MYSQL Workbench. Jelaskan entitas-entitas ini dan hubungannya.

· Jelaskan penggunaan database ini, jelaskan pertanyaan utama, lihat waktu eksekusinya dan tarik kesimpulan

· Optimalisasi basis data

· Lakukan pengujian beban menggunakan Apache-jmeter. Gunakan ekstensi untuk membuat grafik.

Deskripsi Basis Data

Pekerjaan kursus menggunakan database Witcher1 yang dibuat, entitas utamanya adalah tabel:

Gbr.1 Representasi skema dari database Witcher1

Tabel Bahan berisi bahan-bahan yang diperlukan untuk membuat ramuan dalam permainan, yang dijelaskan dalam tabel Ramuan. Beberapa bahan digunakan untuk membuat obat mujarab, tetapi masing-masing bahan memiliki keunikan pada obat mujarabnya. Karena alasan inilah hubungan 1:n (satu-ke-banyak) dibuat antara tabel-tabel ini, yang ditunjukkan dalam diagram database (Gbr. 1).

Tabel Bahan juga berisi informasi tentang nama bahan (Deskripsi) dan di mana bahan tersebut dapat ditemukan (WhereFind). Kolom idElixirs merupakan kolom penghubung tabel Ingridients dan Elixirs.

Tabel Elixir berisi informasi tentang cara menggunakan obat mujarab tertentu dan nama obat mujarab tersebut. Tabel ini merupakan tabel kunci dari tabel-tabel lainnya.

Tabel Lokasi berisi informasi tentang lokasi atau kota mana bahan tertentu dapat ditemukan.

Tabel IL berisi informasi gabungan tentang di mana dan bagaimana menemukan bahan tertentu di suatu area dan apa bahan tersebut. Hubungan n:m (banyak ke banyak) dibuat antara tabel Bahan dan Lokasi, karena banyak bahan dapat ditemukan di beberapa lokasi, seperti yang ditunjukkan dalam tabel anak IL.

Tabel Monster berisi informasi tentang jenis monster yang ada di dalamnya

“Witcher 3”, tentang cara mengenali monster ini atau itu dan nama-nama ciri khasnya.

Tabel ML adalah tabel anak dari gabungan n:m tabel Lokasi dan Monster dan berisi informasi spesifik tentang cara mengalahkan monster khusus ini dan ramuan apa yang dapat digunakan untuk ini, termasuk tanda penyihir khusus, serta di area mana. dan Tanda apa yang harus Anda gunakan untuk mencari monster jenis ini?

Bekerja dengan basis data

Basis data Witcher1 berisi informasi tentang ramuan mana yang harus digunakan untuk melawan monster mana, taktik khusus untuk monster yang sangat berbahaya, seperti: Pestilence Maiden, Devil, Imp, Goblin, dll. Menganalisis informasi dari setiap tabel secara berurutan akan memakan banyak waktu, jadi kami akan membuat query khusus ke database yang akan berguna bagi pengguna.

· Permintaan informasi tentang cara menemukan monster tertentu.

Kueri ini akan berisi kata kunci GABUNG, berkat tabel ML dan Monster di database Witcher1 yang akan diakses.

Permintaan ini akan terlihat seperti ini:

ml GABUNG monster DI monster.idMonsters=ml.idMonsters;

Setelah mengeksekusi query, kita akan menerima tabel yang cukup besar sebagai output, yang merupakan hasil penggabungan dua tabel. Agar tabel yang ditampilkan tidak terlalu besar, Anda bisa menentukan monster mana yang informasinya akan ditampilkan. Misalnya, Dia, permintaannya akan terlihat seperti ini:

monster.MonstersName, monster.MonstersDisscription,

ml.DiscriptionHowFind, ml.idLokasi

ml GABUNG monster DI monster.idMonsters=ml.idMonsters

dimana monster.MonstersName='Hym';

Monster mana yang sesuai dengan ID ini atau itu dapat ditemukan dengan menanyakan tabel Monster atau ML. Kuerinya akan terlihat seperti ini:

PILIH PILIH

IdMonsters, MonstersName idMonsters, MonstersName

DARI ml; DARI monster;

Untuk memeriksa kepatuhan, Anda dapat menanyakan tabel ML dan Monsters, terlebih dahulu menggabungkannya melalui idMonsters.

ml.idMonsters, monster.MonstersName

ml GABUNG monster AKTIF

ml.idMonsters=monster.idMonsters

DIPESAN OLEH monster.idMonster;

· Permintaan obat mujarab apa yang cocok untuk monster ini.

Untuk mengimplementasikan permintaan ini, JOIN akan digunakan. Permintaan akan ditujukan ke dua tabel Elixir dan Monster dan akan berisi informasi tentang kapan dan ramuan apa yang harus diminum dalam pertarungan melawan monster:

monster.MonstersName ,elixir.ElixirName, ramuans.ElixirDiskripsi

ramuan, GABUNG monster AKTIF

ramuan.idElixirs=monster.idElixir;

· Pertanyaan tentang bahan apa yang ditemukan di area tertentu.

Untuk mengimplementasikan permintaan ini, JOIN akan digunakan. Kueri akan ditujukan ke dua tabel Bahan dan Lokasi dan akan berisi informasi tentang bahan apa yang berada di lokasi mana dan informasi tentang jenisnya:

bahan.Diskripsi, lokasi.Diskripsi, bahan.DimanaTemukan

bahan GABUNG lokasi AKTIF

ingridients.idIngridients=lokasi.idIngridients

ORDER BERDASARKAN bahan.Diskripsi;

· permintaan PERBARUI

Kami menerapkan kueri ini untuk monster di tabel Monster bernama Hym. Katakanlah kita ingin mengubah namanya menjadi Dia:

monster

SET MonstersName="Dia"

dimana idMonster=1;

Tapi, karena Hym benar dalam versi bahasa Inggris, mari kita kembalikan semuanya:

monster

SET MonstersName="Nyanyian Rohani"

dimana idMonster=1;

Gambar.2. Menerapkan kueri UPDATE

· Kueri "Agregasi". JUMLAH dan JUMLAH(BERBEDA)

Fungsi COUNT menghitung jumlah baris yang tidak kosong (tanpa NULL di dalamnya) dalam tabel tertentu. COUNT memiliki versi yang dioptimalkan untuk menampilkan jumlah baris bila digunakan untuk 1 tabel. Misalnya:

Gambar.3. Hitung baris di tabel Elixir, Monster, dan Monster GABUNG Elixir.

Fungsi COUNT(DISTINCT) digunakan untuk menampilkan jumlah baris yang tidak berulang dalam tabel dan merupakan versi yang lebih optimal dari rangkaian fungsi COUNT:

Gambar.4. Menghitung ramuan yang tidak berulang di tabel Monster.

· fungsi HAPUS.

Mari tambahkan baris lain ke tabel Elixir menggunakan INSERT:

MASUKKAN KE NILAI ramuan (6,'ForDelete','DisscriptionDelete');

Gambar.5. Menambahkan baris ke tabel Elixir.

Sekarang kami akan membuat permintaan untuk menghapus baris ini, karena tidak diperlukan ramuan yang tidak akan membantu dengan cara apa pun dalam pertarungan melawan monster:

HAPUS DARI ramuan DI MANA idElixirs=6;

Gambar.6. Hapus baris yang ditambahkan.

Pengujian Beban Basis Data

Sekarang kueri telah diselesaikan dan akses ke database telah dibuat, maka dapat diuji menggunakan beberapa parameter:

· Waktu Respons Seiring Waktu atau Waktu Respons dari Waktu ke Waktu – pemeriksaan ini menampilkan informasi untuk setiap permintaan tentang waktu respons rata-rata dalam milidetik.

· Distribusi Waktu Respons atau Response Time Distribution - pemeriksaan ini menampilkan jumlah respons dalam interval waktu tertentu selama permintaan dieksekusi.

· Persentil Waktu Respons – Pemeriksaan ini menampilkan persentil untuk nilai waktu respons. Pada grafik, sumbu X adalah persentase, dan sumbu Y adalah waktu respons.

Untuk pengujian yang paling masuk akal, kami akan menetapkan yang pasti

pilihan:

Gambar.7. Parameter uji

Jumlah Thread(pengguna) – Jumlah pengguna virtual. Dalam kasus kami, kami akan mengaturnya menjadi 1000 untuk memuat database kami sebanyak mungkin.

Periode Ramp-Up – periode di mana semua pengguna akan terlibat.

Kami akan memeriksa semua permintaan GABUNG untuk kinerjanya ketika diaktifkan secara bersamaan oleh beberapa pengguna.

3 poin terakhir adalah plotter dari pemeriksaan yang akan kita gunakan untuk menguji database.

·
Memeriksa Waktu Respons Seiring Waktu

Gambar.7. Hasil dari mengeksekusi query selama pengujian Waktu Respon Seiring Waktu

Seperti yang dapat dilihat dari grafik, permintaan yang paling sulit untuk diselesaikan adalah “Monster & Lokasi” dan membutuhkan waktu respons yang paling lama. Anda dapat memverifikasi alasan lamanya eksekusi permintaan dengan menjalankan permintaan di konsol. Alasan utama penundaan ini adalah karena tabel Monster dan tabel ML berisi penjelasan panjang tentang monster atau di mana menemukannya. Oleh karena itu, permintaan tersebut membutuhkan waktu yang cukup lama untuk diselesaikan.

·
Penyelidikan Distribusi Waktu Respons

Gambar.8. Hasil dari mengeksekusi query selama pengujian Distribusi Waktu Respons.

Dari grafik tersebut kita dapat menyimpulkan bahwa jumlah respon untuk setiap permintaan kita dalam jangka waktu yang sama adalah sama.

·
Memeriksa Persentil Waktu Respons

Sumbu ordinat menunjukkan waktu pelaksanaan, dan sumbu absis menunjukkan persentase jumlah total. Berdasarkan grafik, kita dapat menyimpulkan bahwa 90% permintaan dieksekusi dalam interval waktu dari 0 hingga 340 milidetik, dan dari 5% hingga 15% jumlah permintaan meningkat secara linier, dan kemudian secara eksponensial dengan koefisien peningkatan yang sangat kecil.

10% sisanya dieksekusi dalam interval waktu dari 340 milidetik hingga 700 milidetik, yang mengarah pada kesimpulan bahwa terdapat beban yang sangat besar pada database.

Kesimpulan

Dalam tugas kursus ini, semua tugas telah diselesaikan. Basis data dirancang, diisi dengan data, kemungkinan utama penggunaannya dalam bentuk kueri dan hasil eksekusinya ditampilkan.

Pada akhirnya dilakukan pengujian dan analisis terhadap hasilnya, dengan kesimpulan selanjutnya.

Perlu dicatat bahwa database itu sendiri dibuat hanya sebagai database pendidikan, sehingga tidak terlalu banyak.

Karakteristik penting lainnya adalah keamanan: kata sandi, jika tabel tersebut dibuat, harus disimpan dalam bentuk terenkripsi dan dilindungi dari akses yang tidak sah.

literatur

1. http://phpclub.ru/mysql/doc/- Sumber daya internet "MySQL - panduan referensi"

2. Schwartz B., Zaitsev P., Tkachenko V. dkk - MySQL. Mengoptimalkan Kinerja (Edisi ke-2)

3. Thalmann L., Kindal M., Bell C. – “Memastikan ketersediaan tinggi sistem berbasis MySQL”

4. Andrzej Sapkowski – “The Witcher (koleksi besar)”, Jumlah halaman: 571

5. PROYEK CD MERAH, GOG COM. "The Witcher 3: Perburuan Liar."


Informasi terkait.


Pengujian basis data diperlukan untuk memastikan fungsionalitas basis data. Untuk melakukan ini, berbagai jenis kueri dibuat dalam database: untuk pengambilan sampel, dengan bidang terhitung, parametrik, dengan pengelompokan data, untuk memperbarui, untuk menghapus.

Contoh query: Menampilkan daftar buku yang diambil oleh siswa tertentu. Tetapkan nama lengkap Anda sebagai parameter.

Contoh kueri: Menampilkan daftar buku oleh penulis tertentu yang menunjukkan lokasi penyimpanan di perpustakaan. Tetapkan nama lengkap penulis sebagai parameter.

Contoh permintaan: Tentukan berdasarkan nomor kartu perpustakaan di kelas mana siswa yang bersangkutan berada dan siapa guru kelasnya.

Beras. 15. Pertanyaan 3. “Temukan siswa berdasarkan nomor kartu perpustakaan dan tentukan di kelas mana dia belajar”

Contoh permintaan: Tentukan berdasarkan Siswa_Nama Lengkap di kelas mana debitur belajar dan siapa wali kelasnya.

Untuk kenyamanan bekerja dengan catatan berbagai tabel, itu telah dibuat, yang dengannya Anda dapat membuka tabel apa pun yang diperlukan untuk melihat, memperbarui, dan mengubah informasi. Bentuk tombol ditunjukkan pada Gambar. 17.

Beras. 17. Formulir tombol basis data

KESIMPULAN

Pekerjaan kualifikasi akhir dilakukan dengan topik topikal “Pengembangan sistem informasi perpustakaan sekolah pedesaan”.

Tujuan dari desain diploma untuk mengembangkan sistem informasi untuk perpustakaan sekolah di wilayah Saratov, distrik Fedorovsky dari sekolah menengah lembaga pendidikan kota di desa Solnechny telah tercapai.

Selama proyek kelulusan, tugas-tugas berikut diselesaikan:

Anggaplah perpustakaan sebagai salah satu elemen lingkungan pendidikan;

Mempelajari konsep pemerintah dalam mendukung dan mengembangkan membaca anak;

Teknologi kerja perpustakaan lembaga pendidikan dianalisis;

Area subjek dijelaskan berdasarkan survei;

-spesifikasi teknis pengembangan sistem informasi perpustakaan sekolah pedesaan telah dikembangkan;

- dibangun model fungsional kegiatan perpustakaan sekolah;

- deskripsi arus informasi masukan dan keluaran;

sistem informasi berbasis DBMS telah dikembangkanACCess;

- database relasional yang dikembangkan diuji.

Dalam pekerjaan kualifikasi akhir untuk pembangunan sistem informasi yang menyediakan otomatisasi operasi manual untuk memastikan proses penyimpanan, pencarian, akuntansi penerbitan dan pengembalian oleh siswa, spesifikasi teknis dikembangkan berdasarkan analisis hasil survei. dari bidang subjek. Spesifikasi teknis (TOR) mencerminkan persyaratan pengguna sistem – pekerja perpustakaan.

Berdasarkan spesifikasi teknis, telah dikembangkan model fungsional kegiatan perpustakaan sekolah pedesaan. Model fungsional, pada gilirannya, berfungsi sebagai bahan untuk mengidentifikasi area non-otomatis dalam pekerjaan perpustakaan.

Pilihan DBMS sebagai lingkungan pengembangan ditentukan oleh kemampuan teknis perpustakaan pedesaan. Hasilnya, berdasarkan DBMS MengaksesInti dari sistem informasi – database – dibangun.

Untuk kenyamanan pengguna, antarmuka tombol telah dikembangkan.

Kueri yang sesuai telah dikembangkan untuk menguji database. Menyelesaikan pertanyaan ini memungkinkan kita untuk menilai kinerja normal sistem informasi untuk perpustakaan sekolah pedesaan.

DAFTAR BIBLIOGRAFI