Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak generować dane testowe w SQL Server

Podczas testowania funkcjonalności aplikacji lub wydajności określonej procedury składowanej lub zapytania ad-hoc w środowisku programistycznym potrzebne są dane przechowywane w bazach programistycznych typowych lub podobnych do danych przechowywanych w bazach produkcyjnych. Dzieje się tak, ponieważ wydajność zapytania przetwarzającego 50 rekordów będzie się różnić od wydajności tego samego zapytania, które przetwarza 50 mln wierszy. Przywracanie kopii produkcyjnej bazy danych na serwer baz danych deweloperskich w celach testowych nie zawsze jest poprawną opcją, ze względu na krytyczne dane przechowywane w tych bazach danych i nie powinny być widoczne dla wszystkich pracowników, chyba że tworzysz nową aplikacji i nie ma jeszcze produkcyjnej bazy danych.

Najlepszą i najbezpieczniejszą alternatywą jest wypełnienie rozwojowych tabel bazy danych danymi testowymi. Generowanie danych testowych jest przydatne do testowania wydajności aplikacji lub nowej funkcjonalności bez zmiany danych produkcyjnych. Nie ma jednego prostego sposobu na wygenerowanie danych testowych, które będą pasować do wszystkich scenariuszy, zwłaszcza gdy trzeba wygenerować dużą ilość danych w celu przetestowania wydajności złożonych zapytań i transakcji, w których należy uwzględnić wszystkie możliwe kombinacje przypadków testowych.

Aby wypełnić tabelę dużą ilością danych, najprościej jest napisać prosty skrypt, który będzie wstawiał do tabeli bazy danych identyczne rekordy z potrzebną liczbą duplikatów. Problem polega jednak na tym, że SQL Server Query Optimizer utworzy inny plan na rozwojowej bazie danych niż ten zbudowany na produkcyjnej bazie danych ze względu na różnicę w dystrybucji danych. Na przykład poniższy skrypt wypełni tabelę Uczniowie 100 000 nadmiarowych rekordów testowych przy użyciu Numer GO oświadczenie:

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

Inną opcją jest generowanie losowych danych w zależności od typu danych każdej kolumny. Kolumna ID z właściwością IDENTITY automatycznie wygeneruje numery sekwencyjne bez potrzeby kodowania z Twojej strony. Ale jeśli planujesz generować losowe oceny dla uczniów, możesz skorzystać z funkcji RAND() funkcji T-SQL i rzutuj wynik jako wymagany numeryczny typ danych. Na przykład poniższy skrypt wygeneruje 100 000 losowych ocen dla ucznia od 1 do 100 z trzema różnymi typami danych:oceny INTEGER, oceny REAL i oceny DZIESIĘTNE, z możliwością kontrolowania zakresów tych wartości w zależności od umiejętności matematycznych i programistycznych , jak pokazano poniżej:

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

Generowanie losowych nazw można również uzyskać za pomocą testowych baz danych AdventureWorks i Northwind Microsoft . Musisz pobrać te bazy danych z witryny firmy Microsoft, dołączyć te bazy danych do instancji SQL Server i czerpać korzyści z danych przechowywanych w tych bazach danych, aby wygenerować losowe nazwy w swojej programistycznej bazie danych. Na przykład tabela DimCustomer z bazy danych AdventureworksDW2016CTP3 zawiera około 18 tys. imion, drugich imion i nazwisk, których możesz użyć. Możesz również użyć instrukcji CROSS JOIN, aby wygenerować dużą liczbę kombinacji tych nazw, aby przekroczyć wartość 18K. Poniższy skrypt może zostać użyty do wygenerowania 100 000 imion i nazwisk:

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

Z testowych baz danych firmy Microsoft można również generować losowe adresy e-mail i daty. Na przykład kolumna Data urodzenia i kolumna EmailAddress z tej samej tabeli DimCustomer mogą dostarczyć nam losowe daty i adresy e-mail. Poniższy skrypt może zostać użyty do wygenerowania kombinacji 100 000 dat urodzenia i adresów e-mail:

INSERT INTO StudentsGrades (BirthDate, EmailAddress)

SELECT TOP 100000 N.BirthDate,cN.EmailAddress

FROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] N

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

Wartości losowe kolumny Country można również wygenerować przy użyciu tabeli Person.CountryRegion z testowej bazy danych AdventureWorks2016CTP3. Może dostarczyć ponad 200 nazw i kodów krajów, z których możesz skorzystać w swojej programistycznej bazie danych. Na przykład możesz wziąć ją jako tabelę przeglądową do mapowania między nazwą kraju a kodem, jak w poniższym skrypcie:

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

Aby wygenerować losowe wartości Adresu, możesz czerpać korzyści z danych przechowywanych w Osobie. Tabela adresów z testowej bazy danych AdventureWorks2016CTP3. Zawiera ponad 19 tys. różnych adresów wraz z jego położeniem przestrzennym, które możesz łatwo wykorzystać w swojej programistycznej bazie danych i wybrać losową kombinację z tych wartości, tak jak zrobiliśmy to w poprzednim przykładzie. Poniższy skrypt może być łatwo użyty do wygenerowania losowych 100K adresów z tabeli 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

Aby wygenerować losowe hasła dla określonych użytkowników systemu, możemy skorzystać z CRYPT_GEN_RANDOM Funkcja T-SQL. Ta funkcja zwraca kryptograficzną, losowo wygenerowaną liczbę szesnastkową o długości określonej liczby bajtów, wygenerowaną przez Crypto API (CAPI). Wartość zwrócona z tej funkcji może zostać przekonwertowana na typ danych VARCHAR w celu uzyskania bardziej znaczących haseł, jak w poniższym skrypcie, który generuje 100K losowych haseł:

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

GO 100000

Generowanie danych testowych w celu wypełnienia rozwojowych tabel bazy danych można również łatwo i bez marnowania czasu na pisanie skryptów dla każdego typu danych lub korzystanie z narzędzi innych firm. Na rynku można znaleźć różne narzędzia, które można wykorzystać do generowania danych testowych. Jednym z tych wspaniałych narzędzi jest dbForge Data Generator dla SQL Server . Jest to potężne narzędzie GUI do szybkiego generowania znaczących danych testowych dla baz danych deweloperskich. Narzędzie do generowania danych dbForge zawiera ponad 200 predefiniowanych generatorów danych z rozsądnymi opcjami konfiguracyjnymi, które pozwalają na emulację losowych danych w inteligentnych kolumnach. Narzędzie umożliwia również generowanie danych demonstracyjnych dla baz danych SQL Server już wypełnionych danymi oraz tworzenie własnych, niestandardowych generatorów danych testowych. Generator danych dbForge dla SQL Server może zaoszczędzić czas i wysiłek poświęcony na generowanie danych demonstracyjnych, wypełniając tabele SQL Server milionami wierszy przykładowych danych, które wyglądają jak rzeczywiste dane. Generator danych dbForge dla SQL Server pomaga wypełniać tabele najczęściej używanymi typami danych, takimi jak Basic, Business, Health, IT, Location, Payment i Person. Poniższy rysunek pokazuje, jak łatwo działa to narzędzie:

Po zainstalowaniu narzędzia dbForge Data Generator for SQL Server i uruchomieniu tego narzędzia, należy określić nazwę serwera docelowego i nazwę bazy danych w oknie połączenia, jak pokazano poniżej:

W oknie Opcje możesz określić liczbę wierszy, które mają być wstawione do tabeli i inne różne opcje, które kontrolują generowane kryteria danych testowych, jak pokazano poniżej:

Po dostosowaniu opcji do wymagań dotyczących danych testowych, kliknij przycisk i pojawi się nowe okno z listą wszystkich tabel i kolumn pod wybraną bazą danych z pytaniem możesz wybrać tabelę do wypełnienia danymi testowymi, jak pokazano poniżej:

Po prostu wybierz tabelę, którą chcesz wypełnić danymi, a narzędzie automatycznie dostarczy sugerowane dane w sekcji Podgląd na dole okna oraz opcje dostosowywania dla każdej kolumny w tej tabeli, które możesz łatwo dostosować, jak pokazano poniżej:

Na przykład, możesz wybrać jeden z wbudowanych typów danych generatorów, których można użyć do wygenerowania wartości kolumn ID, jak opisano wcześniej:

Lub dostosuj właściwości tych wartości kolumny identyfikatora, takie jak unikalność, minimalna, maksymalna wartość i przyrost generowanych wartości, jak poniżej:

Ponadto kolumna Imię może być ograniczona do wartości męskiej lub żeńskiej lub kombinacji tych dwóch typów. Możesz także kontrolować procent wartości NULL lub pustych w tej kolumnie, jak pokazano poniżej:

Kolumnę Data urodzenia można również kontrolować, określając kategorię, do której będą należeć ci uczniowie, na przykład Studenci, Nastolatki, Dorośli lub Emeryci, jak pokazano poniżej:

Możesz także określić w pełni opisany generator, którego można użyć do wygenerowania wartości kolumny Kraj, jak pokazano poniżej:

I dostosuj równanie, które będzie używane do generowania wartości kolumny Adres e-mail w następujący sposób:

Oprócz złożoności równania, które można dostosować, generujemy wartości kolumny Hasło, jak pokazano poniżej:

I na koniec, dla mojego przykładu, a nie dla tego magicznego narzędzia, generatory i równania użyte do wygenerowania wartości kolumny Adres poniżej:

Po tej wycieczce możesz sobie wyobrazić, jak to magiczne narzędzie pomoże Ci w generowaniu danych i symulowaniu scenariuszy w czasie rzeczywistym w celu przetestowania funkcjonalności Twojej aplikacji. Zainstaluj go i ciesz się korzyściami ze wszystkich dostępnych funkcji i opcji.

Przydatne narzędzie:

Generator danych dbForge dla SQL Server – potężne narzędzie GUI do szybkiego generowania znaczących danych testowych dla baz danych SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używana wersja SQL Server nie obsługuje danych typu datetime2?

  2. Zapytanie SQL „LIKE” przy użyciu „%”, gdzie kryteria wyszukiwania zawierają „%”

  3. Badanie opcji oczekiwania na blokadę o niskim priorytecie w programie SQL Server 2014 CTP1

  4. Opanowanie wykorzystania list stop z wyszukiwaniem pełnotekstowym serwera SQL Server (FTS)

  5. Msg 8672, poziom 16, stan 1, wiersz 1 Instrukcja MERGE próbowała UPDATE lub DELETE tego samego wiersza więcej niż raz