Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да генерирате тестови данни в SQL Server

Когато тествате функционалността на вашето приложение или изпълнението на конкретна съхранена процедура или ad-hoc заявка в средата за разработка, трябва да имате данни, съхранявани във вашите бази данни за разработка, типични или подобни на данните, съхранявани в производствените бази данни. Това е така, защото производителността на заявка, която обработва 50 записа, ще бъде различна от производителността на същата заявка, която обработва 50 милиона реда. Възстановяването на копие на производствената база данни към сървъра на базата данни за разработка за целите на тестване не винаги е валидна опция, поради критичните данни, които се съхраняват в тези бази данни и не трябва да бъдат отворени за всички служители, освен ако не разработвате нов приложение и все още няма производствена база данни.

Най-добрата и най-сигурната алтернатива е да попълните таблиците на базата данни за разработка с данни за тестване. Генерирането на тестови данни е полезно за тестване на производителността на приложението или нова функционалност без промяна на производствените данни. Няма единен ясен начин за генериране на тестови данни, които да отговарят на всички сценарии, особено когато трябва да генерирате голямо количество данни, за да тествате ефективността на сложни заявки и транзакции, в които трябва да покриете всички възможни комбинации от тестови случаи.

За да запълните таблица с голямо количество данни, най-лесният начин е да напишете прост скрипт, който непрекъснато вмъква идентични записи в таблицата на базата данни с броя на дубликатите, от които се нуждаете. Но проблемът е, че SQL Server Query Optimizer ще изгради различен план върху базата данни за разработка от този, изграден върху производствената база данни, поради разликата в разпределението на данните. Например скриптът по-долу ще запълни таблицата на Студентите със 100 000 излишни тестови записи с помощта на GO Number изявление:

INSERT INTO Students (First Name, Lastname, BirthDate, STDAddress) VALUES ('John','Horold','2005-10-01','London, St15')GO 25000INSERT INTO Students (FirstName, LastDate, Birthname, STDAадрес) СТОЙНОСТИ ('Mike','Zikle','2005-06-08','London, St18')ПРИ 25000 ВЪВЕТЕ ВЪВ Студенти (собствено име, фамилия, рождена дата, STDA адрес) СТОЙНОСТИ ('Faruk','Cedrik',' 2005-03-15','London, St24')GO 25000INSERT INTO Students (First Name, Lastname, BirthDate, STDAddress) VALUES ('Faisal','Ali','2005-12-05','London, St41') GO 25 000

Друга възможност е да генерирате произволни данни в зависимост от типа данни на всяка колона. Колоната ID със свойство IDENTITY автоматично ще генерира последователни номера без необходимост от усилие за кодиране от ваша страна. Но ако планирате да генерирате произволни оценки за учениците, можете да се възползвате от RAND() T-SQL функция и прехвърля резултата като необходимия числов тип данни. Например, скриптът по-долу ще генерира 100K произволни оценки за ученика между 1 и 100 с три различни типа данни:INTEGER оценки, REAL оценки и DECIMAL оценки, с възможност да контролирате диапазоните на тези стойности в зависимост от вашите математически и програмни умения , както е показано по-долу:

INSERT INTO StudentsGrades (STDGrade) STOJI (CAST(RAND(CHECKSUM(NEWID()))*100 as int)) КАТО INT_GrageGO 100000INSERT INTO StudentsGrades (STDGrade) STOJI (CAST(RAND(CHECKSUM(NEWID)) 100 като реално)) КАТО Real_GrageGO 100000INSERT INTO StudentsGrades (STDGrade) STOJI (CAST(RAND(CHECKSUM(NEWID()))*100 като десетична(6,2))) AS Decimal_GrageGO 100000

Генерирането на произволни имена може да се постигне и с помощта на базите данни за тестване на Microsoft на AdventureWorks и Northwind . Трябва да изтеглите тези бази данни от уебсайта на Microsoft, да прикачите тези бази данни към вашия екземпляр на SQL Server и да се възползвате от данните, съхранявани в тези бази данни, за да генерирате произволни имена във вашата база данни за разработка. Например таблицата DimCustomer от базата данни AdventureworksDW2016CTP3 съдържа около 18K собствени, бащини и фамилни имена, които можете да използвате. Можете също да използвате израз CROSS JOIN, за да генерирате голям брой комбинации от тези имена, за да надхвърлите стойността от 18K. Следният скрипт може да се използва за генериране на 100K собствени и фамилни имена:

INSERT INTO StudentsGrades (First_Name, Last_Name)ИЗБЕРЕТЕ ТОП 100000 N.[FirstName],cN.[LastName]ОТ AdventureworksDW2016CTP3.[dbo].[DimCustomer] NCROSS ПРИСЪЕДИНЕТЕ се AdventureworksDW2016.> 

Случайни имейл адреси и дати също могат да бъдат генерирани от тестовите бази данни на Microsoft. Например колоната BirthDate и колоната EmailAddress от същата таблица DimCustomer могат да ни предоставят произволни дати и имейл адреси. Скриптът по-долу може да се използва за генериране на 100K комбинация от рождени дати и имейл адреси:

ВЪВЕТЕ ВЪВ StudentsGrades (Дата на раждане, имейл адрес)ИЗБЕРЕТЕ ТОП 100000 N.BirthDate,cN.EmailAddressFROM AdventureworksDW2016CTP3.[dbo].[DimCustomer] NCROSS ПРИСЪЕДИНЕТЕ се AdventureworksDW2016CTP[3].[3] 

Случайни стойности на колоната Country могат също да бъдат генерирани с помощта на таблицата Person.CountryRegion от тестовата база данни AdventureWorks2016CTP3. Той може да ви предостави повече от 200 имена и кодове на държави, от които можете да се възползвате във вашата база данни за разработка. Например, можете да го вземете като справочна таблица, за да съпоставите името на държавата и кода, както е в скрипта по-долу:

INSERT INTO MappedConutries (CountryRegionCode, Name)ИЗБЕРЕТЕ [CountryRegionCode],[Име]ОТ [AdventureWorks2016CTP3].[Person].[CountryRegion]След това вмъкнете произволно име или код на държава от тези държави, който има ID, равен на случаен идентификатор. генерирано между 1 и 238, като скрипта по-долу:INSERT INTO StudentsGrades (Country_Name) values( (ИЗБЕРЕТЕ ИМЕ ОТ MappedConutries WHERE ID=CAST(RAND(CHECKSUM(NEWID()))*238 като int)))GO 10000

За да генерирате произволни стойности на адреса, можете да се възползвате от данните, съхранявани в лицето. Адресна таблица от тестовата база данни на AdventureWorks2016CTP3. Той съдържа повече от 19K различни адреса със своето пространствено местоположение, които можете лесно да използвате във вашата база данни за разработка и да вземете произволна комбинация от тези стойности, по същия начин, по който направихме в предишния пример. Скриптът по-долу може лесно да се използва за генериране на произволни 100K адреси от таблицата Person.Address:

INSERT INTO StudentsGrades (STD_Address) стойности( (ИЗБЕРЕТЕ ИМЕ ОТ [AdventureWorks2016CTP3].[Person].[Адрес] WHERE [AddressID]=CAST(RAND(CHECKSUM(NEWID()))*19614 като int)))GO 100 000

За да генерираме произволни пароли за конкретни потребители на системата, можем да се възползваме от CRYPT_GEN_RANDOM T-SQL функция. Тази функция връща криптографско, произволно генерирано шестнадесетично число с дължина от определен брой байтове, генерирано от Crypto API (CAPI). Стойността, върната от тази функция, може да бъде преобразувана в тип данни VARCHAR, за да имате по-смислени пароли, както е в скрипта по-долу, който генерира 100K произволна парола:

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

Генерирането на тестови данни за попълване на таблиците на базата данни за разработка може също да се извърши лесно и без загуба на време за писане на скриптове за всеки тип данни или използване на инструменти на трети страни. Можете да намерите различни инструменти на пазара, които могат да се използват за генериране на тестови данни. Един от тези прекрасни инструменти е dbForge Data Generator за SQL Server . Това е мощен GUI инструмент за бързо генериране на смислени тестови данни за базите данни за разработка. Инструментът за генериране на данни dbForge включва 200+ предварително дефинирани генератора на данни с разумни опции за конфигуриране, които ви позволяват да емулирате произволни данни за колона. Инструментът също така позволява генериране на демонстрационни данни за бази данни на SQL Server, които вече са пълни с данни, и създаване на ваши собствени генератори на тестови данни. dbForge Data Generator за SQL Server може да спести вашето време и усилия, изразходвани за генериране на демонстрационни данни, като попълва таблици на SQL Server с милиони редове примерни данни, които изглеждат точно като реални данни. dbForge Data Generator за SQL Server помага да се попълват таблици с най-често използваните типове данни като основни, бизнес, здраве, ИТ, местоположение, плащане и тип данни за хора. Фигурата по-долу показва колко лесно работи този инструмент:

След като инсталирате инструмента dbForge Data Generator за SQL Server и стартирате този инструмент, трябва да посочите името на целевия сървър и името на базата данни в прозореца Connection, както е показано по-долу:

В прозореца Опции можете да посочите броя на редовете, които да бъдат вмъкнати във вашата таблица, и други различни опции, които контролират генерираните критерии за тестови данни, както е показано по-долу:

След като персонализирате опциите, за да отговарят на вашите изисквания за данни за тестване, щракнете върху и ще се покаже нов прозорец със списък на всички таблици и колони в избраната база данни, който пита вие да изберете коя таблица да попълните с тестови данни, както е показано по-долу:

Просто изберете таблицата, която трябва да попълните с данни, и инструментът автоматично ще ви предостави предложените данни в секцията Визуализация в долната част на прозореца и опции за персонализиране за всяка колона в тази таблица, които можете лесно да персонализирате, както е показано по-долу:

Например, можете да избирате от вградените типове данни за генератори, които могат да се използват за генериране на стойностите на колоната за ID, както е описано по-горе:

Или персонализирайте характеристиките на стойностите на тази колона с идентификатор, като уникалност, мин., макс. и увеличение на генерираните стойности, както е по-долу:

Освен това колоната First_Name може да бъде ограничена да бъде мъжка или женска или комбинация от тези два типа. Освен това можете да контролирате процента на NULL или празни стойности в тази колона, както е показано по-долу:

Колоната „Дата на раждане“ също може да се контролира чрез посочване на категорията, в която ще попаднат тези студенти, като студенти, тийнейджъри, възрастни или пенсионирани, както е показано по-долу:

Можете също така да посочите напълно описания генератор, който може да се използва за генериране на стойностите на колоната за държава, както е показано по-долу:

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

В допълнение към сложността на адаптивното уравнение, ние генерираме стойностите на колоната Password, както е показано по-долу:

И накрая, за моя пример, а не за този магически инструмент, генераторите и уравненията, използвани за генериране на стойностите на колоната Адрес по-долу:

След тази обиколка можете да си представите как този магически инструмент ще ви помогне при генерирането на данни и симулирането на сценарии в реално време, за да тествате функционалността на вашето приложение. Инсталирайте го и се наслаждавайте да се възползвате от всички налични функции и опции.

Полезен инструмент:

dbForge Data Generator за SQL Server – мощен GUI инструмент за бързо генериране на смислени тестови данни за бази данни на 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. TAN() Примери в SQL Server

  2. SQL Server 2008:как да дам привилегии на потребителско име?

  3. Driver.getConnection виси с помощта на драйвер на SQLServer и Java 1.6.0_29

  4. Актуализирайте статистиката на SQL Server с помощта на план за поддръжка на база данни

  5. PHP фатална грешка:Извикване на недефинирана функция mssql_connect()