sql >> Databáze >  >> RDS >> Sqlserver

Jak generovat testovací data v SQL Server

Při testování funkčnosti vaší aplikace nebo výkonu konkrétní uložené procedury nebo ad-hoc dotazu ve vývojovém prostředí potřebujete mít data uložená ve vývojových databázích typická nebo podobná datům uloženým v produkčních databázích. Důvodem je, že výkon dotazu, který zpracovává 50 záznamů, se bude lišit od výkonu stejného dotazu, který zpracovává 50 milionů řádků. Obnovení kopie produkční databáze na vývojový databázový server pro testovací účely není vždy platnou možností kvůli kritickým datům, která jsou uložena v těchto databázích, a neměla by být přístupná všem zaměstnancům, aby je viděli, pokud nevyvíjíte nový aplikace a zatím neexistuje žádná produkční databáze.

Nejlepší a nejbezpečnější alternativou je naplnit tabulky vývojové databáze testovacími daty. Generování testovacích dat je užitečné pro testování výkonu aplikace nebo nové funkce beze změny produkčních dat. Neexistuje žádný jednoduchý způsob, jak generovat testovací data, která by vyhovovala všem scénářům, zvláště když potřebujete generovat velké množství dat pro testování výkonu složitých dotazů a transakcí, ve kterých byste měli pokrýt všechny možné kombinace testovacích případů.

Pro naplnění tabulky velkým množstvím dat je nejjednodušší napsat jednoduchý skript, který do databázové tabulky neustále vkládá identické záznamy s počtem duplikátů, jaký potřebujete. Problém je však v tom, že SQL Server Query Optimizer vybuduje na vývojové databázi jiný plán, než je plán vytvořený na produkční databázi, kvůli rozdílu v distribuci dat. Skript níže například vyplní tabulku Studenti 100 000 redundantními testovacími záznamy pomocí Čísla GO prohlášení:

INSERT INTO Students (FirstName, LastName, BirthDate, STDAaddress) VALUES ('John','Horold','2005-10-01','Londýn, St15')GO 25000INSERT INTO Students (FirstName, LastName, BirthDate STDAadresa) VALUES ('Mike','Zikle','2005-06-08','London, St18')GO 25000INSERT INTO Students (Jméno, Příjmení, Datum narození, STDAadresa) VALUES ('Faruk','Cedrik',' 2005-03-15','London, St24')GO 25000INSERT INTO Students (Jméno, Příjmení, Datum narození, STDAadresa) VALUES ('Faisal','Ali','2005-12-05','Londýn, St41') GO 25 000

Další možností je generování náhodných dat v závislosti na datovém typu každého sloupce. Sloupec ID s vlastností IDENTITY automaticky vygeneruje pořadová čísla, aniž by bylo z vaší strany potřeba jakékoli kódovací úsilí. Pokud ale plánujete generovat náhodná hodnocení pro studenty, můžete využít výhod RAND() T-SQL funkci a přetypovat výsledek jako požadovaný číselný datový typ. Například níže uvedený skript vygeneruje 100 000 náhodných známek pro studenta mezi 1 a 100 se třemi různými datovými typy:INTEGER známky, REAL známky a DECIMAL známky, se schopností ovládat rozsahy těchto hodnot v závislosti na vašich matematických a programovacích dovednostech. , jak je uvedeno níže:

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as int)) AS INT_GrageGO 100000INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(NEWID(WIDSCHECKSUM))* 100 jako skutečný)) AS Real_GrageGO 100000INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as decimal(6,2))) AS Decimal_GrageGO 100000

Generování náhodných jmen lze také provést pomocí AdventureWorks a Northwind testovacích databází Microsoft . Tyto databáze si musíte stáhnout z webu společnosti Microsoft, připojit tyto databáze k instanci SQL Serveru a využít výhod dat uložených v těchto databázích ke generování náhodných jmen ve vaší vývojové databázi. Například tabulka DimCustomer z databáze AdventureworksDW2016CTP3 obsahuje asi 18 tisíc křestních jmen, druhých jmen a příjmení, která můžete použít. Můžete také použít příkaz CROSS JOIN ke generování velkého počtu kombinací těchto názvů, které překročí hodnotu 18 kB. Následující skript lze použít ke generování 100 000 křestních jmen a příjmení:

INSERT INTO StudentsGrades (First_Name, Last_Name) VYBERTE NEJLEPŠÍCH 100 000 N.[Jméno],cN.[LastName]FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] NCROSS JOIN AdventureworksDW2016CTP3.[dNbo]preom][dCust].[dCust][DWROM AdventureworksDW2016CTP3.[dbo].[DimCustomer]> 

Z testovacích databází společnosti Microsoft lze také generovat náhodné e-mailové adresy a data. Například sloupce BirthDate a EmailAddress ze stejné tabulky DimCustomer nám mohou poskytnout náhodná data a e-mailové adresy. Níže uvedený skript lze použít ke generování 100 000 kombinace dat narození a e-mailových adres:

INSERT INTO StudentsGrades (Datum narození, E-mailová adresa)VYBRAT NEJLEPŠÍCH 100 000 N.Datum narození,cN.EmailAddressFROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] NCROSS JOIN AdventureworksDW2016CTPim][dbo]>.[dbo][dbo]>.[DimCustomer]. 

Náhodné hodnoty sloupce Země lze také generovat pomocí tabulky Person.CountryRegion z testovací databáze AdventureWorks2016CTP3. Může vám poskytnout více než 200 názvů zemí a kódů, které můžete využít ve své vývojové databázi. Můžete to například vzít jako vyhledávací tabulku pro mapování mezi názvem země a kódem, jako ve skriptu níže:

INSERT INTO MappedConutries (CountryRegionCode, Name)SELECT [CountryRegionCode],[Name]FROM [AdventureWorks2016CTP3].[Person].[CountryRegion]Poté vložte náhodný název nebo kód země z těchto zemí, který má ID rovné náhodnému ID vygenerováno mezi 1 a 238, jak je uvedeno níže:INSERT INTO StudentsGrades (Country_Name) values( (SELECT NAME FROM MappedConutries WHERE ID=CAST(RAND(CHECKSUM(NEWID()))*238 as int)))GO 10000

Chcete-li generovat náhodné hodnoty adresy, můžete využít výhod dat uložených v osobě. Tabulka adres z testovací databáze AdventureWorks2016CTP3. Obsahuje více než 19 tisíc různých adres s prostorovým umístěním, které můžete snadno použít ve své vývojové databázi a vzít z těchto hodnot náhodné kombinace, stejně jako v předchozím příkladu. Níže uvedený skript lze snadno použít ke generování náhodných 100 000 adres z tabulky Person.Address:

INSERT INTO StudentsGrades (STD_Address) values( (SELECT NAME FROM [AdventureWorks2016CTP3].[Person].[Address] WHERE [AddressID]=CAST(RAND(CHECKSUM(NEWID()))*19614 as int)))GO 100 000

Pro generování náhodných hesel pro konkrétní uživatele systému můžeme využít výhod CRYPT_GEN_RANDOM funkce T-SQL. Tato funkce vrací kryptografické, náhodně vygenerované hexadecimální číslo o délce zadaného počtu bajtů, vygenerované rozhraním Crypto API (CAPI). Hodnotu vrácenou z této funkce lze převést na datový typ VARCHAR, abyste získali smysluplnější hesla, jako ve skriptu níže, který generuje 100 kB náhodných hesel:

INSERT INTO SystemUsers (User_Password) SELECT CONVERT(varchar(20), CRYPT_GEN_RANDOM(20))GO 100000

Generování testovacích dat pro naplnění tabulek vývojové databáze lze také provádět snadno a bez plýtvání časem psaním skriptů pro každý typ dat nebo pomocí nástrojů třetích stran. Na trhu můžete najít různé nástroje, které lze použít ke generování testovacích dat. Jedním z těchto úžasných nástrojů je dbForge Data Generator pro SQL Server . Je to výkonný nástroj GUI pro rychlé generování smysluplných testovacích dat pro vývojové databáze. Nástroj pro generování dat dbForge obsahuje více než 200 předdefinovaných generátorů dat s rozumnými možnostmi konfigurace, které vám umožňují emulovat náhodná data s inteligentními sloupci. Nástroj také umožňuje generování ukázkových dat pro databáze SQL Server již naplněné daty a vytváření vlastních generátorů testovacích dat. dbForge Data Generator pro SQL Server může ušetřit váš čas a úsilí vynaložené na generování ukázkových dat tím, že naplní tabulky serveru SQL Server miliony řádků vzorových dat, která vypadají jako skutečná data. dbForge Data Generator pro SQL Server pomáhá naplnit tabulky nejčastěji používanými datovými typy, jako jsou základní datové typy, obchodní, zdravotní, IT, umístění, platby a osoby. Obrázek níže ukazuje, jak snadno tento nástroj funguje:

Poté, co nainstalujete nástroj dbForge Data Generator pro SQL Server a spustíte tento nástroj, musíte zadat název cílového serveru a název databáze v okně Připojení, jak je uvedeno níže:

V okně Možnosti můžete zadat počet řádků, které se mají vložit do tabulky, a další různé možnosti, které řídí vygenerovaná kritéria testovacích dat, jak je uvedeno níže:

Po přizpůsobení možností tak, aby vyhovovaly vašim požadavkům na testovací data, klikněte na a zobrazí se nové okno se seznamem všech tabulek a sloupců ve vybrané databázi s dotazem můžete si vybrat, která tabulka se má vyplnit testovacími daty, jak je znázorněno níže:

Stačí si vybrat tabulku, kterou potřebujete vyplnit daty, a nástroj vám automaticky poskytne navrhovaná data v části Náhled ve spodní části okna a přizpůsobitelné možnosti pro každý sloupec v této tabulce, které si můžete snadno přizpůsobit, jak je znázorněno níže:

Můžete si například vybrat z datových typů vestavěných generátorů, které lze použít ke generování hodnot sloupců ID, jak bylo popsáno výše:

Nebo přizpůsobte charakteristiky hodnot tohoto sloupce ID, jako je Jedinečnost, Min, Max a přírůstek generovaných hodnot, jak je uvedeno níže:

Kromě toho lze sloupec First_Name omezit na muže nebo ženu nebo na kombinaci těchto dvou typů. Můžete také ovládat procento hodnot NULL nebo prázdných hodnot v tomto sloupci, jak je znázorněno níže:

Sloupec Datum narození lze také ovládat zadáním kategorie, do které tito studenti budou spadat, například Studenti, Teenageři, Dospělí nebo Důchodci, jak je uvedeno níže:

Můžete také určit plně popsaný generátor, který lze použít ke generování hodnot sloupce Země, jak je uvedeno níže:

A upravte rovnici, která bude použita ke generování hodnot sloupce E-mailová adresa, následovně:

Kromě složitosti přizpůsobitelné rovnice generujeme hodnoty sloupce Heslo, jak je uvedeno níže:

A konečně, pro můj příklad a ne pro tento magický nástroj, generátory a rovnice použité ke generování hodnot sloupce Adresa níže:

Po této prohlídce si dokážete představit, jak vám tento kouzelný nástroj pomůže při generování dat a simulaci scénářů v reálném čase pro testování funkčnosti vaší aplikace. Nainstalujte si jej a užívejte si výhody všech dostupných funkcí a možností.

Užitečný nástroj:

dbForge Data Generator pro SQL Server – výkonný nástroj GUI pro rychlé generování smysluplných testovacích dat pro databáze SQL Server.


  1. MySQL pořadí podle před seskupit podle

  2. Jak odstranit hlavní mezery v SQL Server – LTRIM()

  3. Vložit obrázek do pole obrázku serveru SQL Server 2005 pouze pomocí SQL

  4. Jak identifikovat problémy s výkonem MySQL s pomalými dotazy