sql >> Database >  >> RDS >> Sqlserver

Testgegevens genereren in SQL Server

Bij het testen van de functionaliteit van uw applicatie of de prestaties van een specifieke opgeslagen procedure of een ad-hocquery in de ontwikkelomgeving, moet u gegevens hebben opgeslagen in uw ontwikkelingsdatabases die typerend of vergelijkbaar zijn met de gegevens die zijn opgeslagen in de productiedatabases. Dit komt doordat de prestatie van een query die 50 records verwerkt, anders zal zijn dan de prestatie van dezelfde query die 50 miljoen rijen verwerkt. Het herstellen van een kopie van de productiedatabase naar de ontwikkelingsdatabaseserver voor testdoeleinden is niet altijd een geldige optie, vanwege de kritieke gegevens die in deze databases zijn opgeslagen en die niet voor alle werknemers zichtbaar zouden moeten zijn, tenzij u een nieuwe applicatie en er is nog geen productiedatabase.

Het beste en veiligste alternatief is om de ontwikkelingsdatabasetabellen te vullen met testgegevens. Het genereren van testgegevens is handig om de prestaties van de applicatie of een nieuwe functionaliteit te testen zonder de productiegegevens te wijzigen. Er is geen enkele eenvoudige manier om testgegevens te genereren die in alle scenario's passen, vooral wanneer u een grote hoeveelheid gegevens moet genereren om de prestaties van complexe query's en transacties te testen, waarbij u alle mogelijke combinaties van testgevallen moet dekken.

Om een ​​tabel met een grote hoeveelheid gegevens te vullen, is de eenvoudigste manier om een ​​eenvoudig script te schrijven dat steeds identieke records in de databasetabel invoegt met het aantal duplicaten dat u nodig hebt. Maar het probleem is dat de SQL Server Query Optimizer een ander plan op de ontwikkelingsdatabase zal bouwen dan op de productiedatabase vanwege het verschil in de gegevensdistributie. Het onderstaande script zal bijvoorbeeld de tabel Studenten vullen met 100K overtollige testrecords met behulp van het GO-nummer verklaring:

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('John','Horold','2005-10-01','London, St15')

GO 25000

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Mike','Zikle','2005-06-08','London, St18')

GO 25000

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Faruk','Cedrik','2005-03-15','London, St24')

GO 25000

INSERT INTO Students (FirstName, LastName, BirthDate, STDAddress) VALUES ('Faisal','Ali','2005-12-05','London, St41')

GO 25000

Een andere optie is om willekeurige gegevens te genereren, afhankelijk van het gegevenstype van elke kolom. De ID-kolom met IDENTITY-eigenschap genereert automatisch volgnummers zonder dat u enige coderingsinspanning van uw kant nodig heeft. Maar als u van plan bent willekeurige cijfers voor de studenten te genereren, kunt u profiteren van de RAND() T-SQL-functie en cast het resultaat als het vereiste numerieke gegevenstype. Het onderstaande script genereert bijvoorbeeld 100.000 willekeurige cijfers voor de student tussen 1 en 100 met drie verschillende gegevenstypen:INTEGER-cijfers, ECHTE cijfers en DECIMALE cijfers, met de mogelijkheid om het bereik van deze waarden te regelen, afhankelijk van uw wiskundige en programmeervaardigheden , zoals hieronder weergegeven:

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as int)) AS INT_Grage

GO 100000

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as real)) AS Real_Grage

GO 100000

INSERT INTO StudentsGrades (STDGrade) VALUES (CAST(RAND(CHECKSUM(NEWID()))*100 as decimal(6,2))) AS Decimal_Grage

GO 100000

Het genereren van willekeurige namen kan ook worden bereikt met behulp van de AdventureWorks en Northwind Microsoft-testdatabases . U moet deze databases downloaden van de Microsoft-website, deze databases koppelen aan uw SQL Server-instantie en profiteren van de gegevens die in deze databases zijn opgeslagen om willekeurige namen in uw ontwikkelingsdatabase te genereren. De DimCustomer-tabel uit de AdventureworksDW2016CTP3-database bevat bijvoorbeeld ongeveer 18K voornamen, middelste namen en achternamen die u kunt gebruiken. U kunt ook een CROSS JOIN-instructie gebruiken om een ​​groot aantal combinaties van deze namen te genereren om de 18K-waarde te overschrijden. Het volgende script kan worden gebruikt om 100.000 voornamen en achternamen te genereren:

INSERT INTO StudentsGrades (First_Name, Last_Name)

SELECT TOP 100000 N.[FirstName],cN.[LastName]

FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] N

CROSS JOIN AdventureworksDW2016CTP3.[dbo].[DimCustomer] cN

Willekeurige e-mailadressen en datums kunnen ook worden gegenereerd uit de testdatabases van Microsoft. De kolom Geboortedatum en de kolom E-mailadres uit dezelfde DimCustomer-tabel kunnen ons bijvoorbeeld willekeurige datums en e-mailadressen geven. Het onderstaande script kan worden gebruikt om 100K combinaties van geboortedata en e-mailadressen te genereren:

INSERT INTO StudentsGrades (BirthDate, EmailAddress)

SELECT TOP 100000 N.BirthDate,cN.EmailAddress

FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] N

CROSS JOIN AdventureworksDW2016CTP3.[dbo].[DimCustomer] c

Willekeurige waarden van de kolom Land kunnen ook worden gegenereerd met behulp van de tabel Person.CountryRegion uit de AdventureWorks2016CTP3-testdatabase. Het kan u voorzien van meer dan 200 landnamen en codes waarvan u kunt profiteren in uw ontwikkelingsdatabase. U kunt het bijvoorbeeld als een opzoektabel gebruiken om tussen de landnaam en de code in kaart te brengen, zoals in het onderstaande script:

INSERT INTO MappedConutries (CountryRegionCode, Name)

SELECT [CountryRegionCode],[Name]

FROM [AdventureWorks2016CTP3].[Person].[CountryRegion]

Then insert a random name or country code from these countries that has ID equal to a random ID generated between 1 and 238, as the script below:

INSERT INTO StudentsGrades (Country_Name) values

( (SELECT NAME FROM MappedConutries WHERE ID=CAST(RAND(CHECKSUM(NEWID()))*238 as int)))

GO 10000

Om willekeurige adreswaarden te genereren, kunt u profiteren van de gegevens die zijn opgeslagen in de Persoon. Adrestabel uit de AdventureWorks2016CTP3-testdatabase. Het bevat meer dan 19K verschillende adressen met zijn ruimtelijke locatie, die u gemakkelijk in uw ontwikkelingsdatabase kunt gebruiken en willekeurige combinaties van deze waarden kunt nemen, op dezelfde manier als in het vorige voorbeeld. Het onderstaande script kan eenvoudig worden gebruikt om willekeurige 100K-adressen te genereren uit de tabel Person.Address:

INSERT INTO StudentsGrades (STD_Address) values

( (SELECT NAME FROM [AdventureWorks2016CTP3].[Person].[Address] WHERE [AddressID]=CAST(RAND(CHECKSUM(NEWID()))*19614 as int)))

GO 100000

Om willekeurige wachtwoorden voor specifieke systeemgebruikers te genereren, kunnen we profiteren van de CRYPT_GEN_RANDOM T-SQL-functie. Deze functie retourneert een cryptografisch, willekeurig gegenereerd hexadecimaal getal met een lengte van een opgegeven aantal bytes, gegenereerd door de Crypto API (CAPI). De waarde die door die functie wordt geretourneerd, kan worden geconverteerd naar een VARCHAR-gegevenstype om zinvollere wachtwoorden te hebben, zoals in het onderstaande script, dat een willekeurig wachtwoord van 100.000 genereert:

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

GO 100000

Het genereren van testgegevens om de ontwikkelingsdatabasetabellen te vullen, kan ook eenvoudig worden uitgevoerd zonder tijd te verspillen aan het schrijven van scripts voor elk gegevenstype of het gebruik van tools van derden. Er zijn verschillende tools op de markt die kunnen worden gebruikt om testgegevens te genereren. Een van deze geweldige tools is de dbForge Data Generator voor SQL Server . Het is een krachtige GUI-tool voor het snel genereren van zinvolle testgegevens voor de ontwikkelingsdatabases. De tool voor het genereren van gegevens van dbForge bevat meer dan 200 vooraf gedefinieerde gegevensgenerators met verstandige configuratie-opties waarmee u kolomintelligente willekeurige gegevens kunt emuleren. De tool maakt het ook mogelijk om demogegevens te genereren voor SQL Server-databases die al met gegevens zijn gevuld en om uw eigen aangepaste testgegevensgeneratoren te maken. dbForge Data Generator voor SQL Server kan u tijd en moeite besparen die u besteedt aan het genereren van demogegevens door SQL Server-tabellen te vullen met miljoenen rijen voorbeeldgegevens die er net zo uitzien als echte gegevens. dbForge Data Generator voor SQL Server helpt bij het vullen van tabellen met de meest gebruikte datatypes zoals Basic, Business, Health, IT, Location, Payment en Person datatypes. De onderstaande afbeelding laat zien hoe gemakkelijk deze tool werkt:

Nadat u het hulpprogramma dbForge Data Generator voor SQL Server hebt geïnstalleerd en dat hulpprogramma hebt uitgevoerd, moet u de naam van de doelserver en de database opgeven in het verbindingsvenster, zoals hieronder wordt weergegeven:

In het venster Opties kunt u het aantal rijen specificeren dat in uw tabel moet worden ingevoegd en andere verschillende opties die de gegenereerde testgegevenscriteria bepalen, zoals hieronder weergegeven:

Nadat u de opties hebt aangepast aan uw vereisten voor testgegevens, klikt u op de -knop, en een nieuw venster met een lijst van alle tabellen en kolommen onder de geselecteerde database zal worden weergegeven, waarin wordt gevraagd u kunt kiezen welke tabel u wilt vullen met testgegevens, zoals hieronder weergegeven:

Kies gewoon de tabel die u met gegevens moet vullen en de tool geeft u automatisch de voorgestelde gegevens in het gedeelte Voorbeeld onder aan het venster en aanpasbare opties voor elke kolom in die tabel die u eenvoudig kunt aanpassen, zoals weergegeven hieronder:

U kunt bijvoorbeeld kiezen uit de ingebouwde gegevenstypen van generatoren die kunnen worden gebruikt om de ID-kolomwaarden te genereren, zoals eerder beschreven:

Of pas de kenmerken van die ID-kolomwaarden aan, zoals de uniciteit, min, max en de toename van de gegenereerde waarden, zoals hieronder:

Bovendien kan de kolom Voornaam worden beperkt tot mannelijk of vrouwelijk of een combinatie van deze twee typen. U kunt ook het percentage NULL of lege waarden binnen die kolom bepalen, zoals hieronder weergegeven:

De kolom Geboortedatum kan ook worden beheerd door de categorie op te geven waaronder deze studenten vallen, zoals studenten, tieners, volwassenen of gepensioneerd, zoals hieronder weergegeven:

U kunt ook de volledig beschreven generator specificeren die kan worden gebruikt om de waarden in de kolom Land te genereren, zoals hieronder weergegeven:

En pas de vergelijking die wordt gebruikt om de kolomwaarden voor het e-mailadres te genereren als volgt aan:

Naast de complexiteit van de aanpasbare vergelijking, genereren we de wachtwoordkolomwaarden, zoals hieronder weergegeven:

En tot slot, voor mijn voorbeeld en niet voor dit magische hulpmiddel, de generatoren en vergelijkingen die worden gebruikt om de onderstaande adreskolomwaarden te genereren:

Na deze rondleiding kunt u zich voorstellen hoe deze magische tool u zal helpen bij het genereren van gegevens en het simuleren van realtime scenario's om de functionaliteit van uw applicatie te testen. Installeer het en profiteer van alle beschikbare functies en opties.

Handig hulpmiddel:

dbForge Data Generator voor SQL Server – krachtige GUI-tool voor het snel genereren van zinvolle testgegevens voor SQL Server-databases.


  1. Groepeer DateTime in intervallen van 5,15,30 en 60 minuten

  2. PostgreSQL 9.2.1 verbinden met Hibernate

  3. Een PostgreSQL-database opzetten in Django

  4. PostgreSQL implementeren voor hoge beschikbaarheid