Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como gerar dados de teste no SQL Server


Ao testar a funcionalidade do seu aplicativo ou o desempenho de um procedimento armazenado específico ou uma consulta ad-hoc no ambiente de desenvolvimento, você precisa ter dados armazenados em seus bancos de dados de desenvolvimento típicos ou semelhantes aos dados armazenados nos bancos de dados de produção. Isso ocorre porque o desempenho de uma consulta que está processando 50 registros será diferente do desempenho da mesma consulta que está processando 50 milhões de linhas. Restaurar uma cópia do banco de dados de produção para o servidor de banco de dados de desenvolvimento para fins de teste nem sempre é uma opção válida, devido aos dados críticos que são armazenados nesses bancos de dados e não devem estar abertos para todos os funcionários verem, a menos que você esteja desenvolvendo um novo aplicativo e ainda não há banco de dados de produção.

A melhor e mais segura alternativa é preencher as tabelas do banco de dados de desenvolvimento com dados de teste. A geração de dados de teste é útil para testar o desempenho do aplicativo ou de uma nova funcionalidade sem alterar os dados de produção. Não existe uma maneira simples e direta de gerar dados de teste que se ajustem a todos os cenários, especialmente quando você precisa gerar uma grande quantidade de dados para testar o desempenho de consultas e transações complexas nas quais você deve cobrir todas as combinações possíveis de casos de teste.

Para preencher uma tabela com uma grande quantidade de dados, a maneira mais fácil é escrever um script simples que continue inserindo registros idênticos na tabela do banco de dados com o número de duplicatas que você precisa. Mas o problema é que o SQL Server Query Optimizer construirá um plano diferente no banco de dados de desenvolvimento daquele construído no banco de dados de produção devido à diferença na distribuição de dados. Por exemplo, o script abaixo preencherá a tabela Alunos com 100 mil registros de teste redundantes usando o Número GO demonstração:
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

Outra opção é gerar dados aleatórios dependendo do tipo de dados de cada coluna. A coluna ID com a propriedade IDENTITY gerará automaticamente números de sequência sem a necessidade de qualquer esforço de codificação de sua parte. Mas se você planeja gerar notas aleatórias para os alunos, pode aproveitar os benefícios do RAND() Função T-SQL e converta o resultado como o tipo de dados numérico necessário. Por exemplo, o script abaixo gerará 100 mil notas aleatórias para o aluno entre 1 e 100 com três tipos de dados diferentes:notas INTEGER, notas REAIS e notas DECIMAL, com a capacidade de controlar os intervalos desses valores dependendo de suas habilidades matemáticas e de programação , como mostrado abaixo:
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

A geração de nomes aleatórios também pode ser obtida usando os bancos de dados de teste da Microsoft AdventureWorks e Northwind . Você precisa baixar esses bancos de dados do site da Microsoft, anexar esses bancos de dados à sua instância do SQL Server e aproveitar os dados armazenados nesses bancos de dados para gerar nomes aleatórios em seu banco de dados de desenvolvimento. Por exemplo, a tabela DimCustomer do banco de dados AdventureworksDW2016CTP3 contém cerca de 18 mil nomes, nomes do meio e sobrenomes que você pode usar. Você também pode usar uma instrução CROSS JOIN para gerar um grande número de combinações desses nomes para exceder o valor de 18 K. O script a seguir pode ser usado para gerar 100 mil nomes e sobrenomes:
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

Endereços de e-mail aleatórios e datas também podem ser gerados a partir dos bancos de dados de teste da Microsoft. Por exemplo, a coluna BirthDate e a coluna EmailAddress da mesma tabela DimCustomer podem nos fornecer datas e endereços de e-mail aleatórios. O script abaixo pode ser usado para gerar 100 mil combinações de datas de nascimento e endereços de 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

Os valores aleatórios da coluna Country também podem ser gerados usando a tabela Person.CountryRegion do banco de dados de teste AdventureWorks2016CTP3. Ele pode fornecer mais de 200 nomes e códigos de países dos quais você pode se beneficiar em seu banco de dados de desenvolvimento. Por exemplo, você pode tomá-lo como uma tabela de pesquisa para mapear entre o nome e o código do país, como no script abaixo:
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

Para gerar valores de Endereço aleatórios, você pode se beneficiar dos dados armazenados no Person. Tabela de endereços do banco de dados de teste AdventureWorks2016CTP3. Ele contém mais de 19K endereços diferentes com sua localização espacial, que você pode usar facilmente em seu banco de dados de desenvolvimento e obter combinações aleatórias desses valores, da mesma forma que fizemos no exemplo anterior. O script abaixo pode ser facilmente usado para gerar endereços aleatórios de 100K da tabela 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

Para gerar senhas aleatórias para usuários específicos do sistema, podemos aproveitar os benefícios do CRYPT_GEN_RANDOM Função T-SQL. Essa função retorna um número hexadecimal criptográfico gerado aleatoriamente com um comprimento de um número especificado de bytes, gerado pela Crypto API (CAPI). O valor retornado dessa função pode ser convertido para um tipo de dado VARCHAR para ter senhas mais significativas, como no script abaixo, que gera 100K de senhas aleatórias:
INSERT INTO SystemUsers (User_Password) SELECT CONVERT(varchar(20), CRYPT_GEN_RANDOM(20))

GO 100000

A geração de dados de teste para preenchimento das tabelas do banco de dados de desenvolvimento também pode ser realizada de forma fácil e sem perda de tempo para escrever scripts para cada tipo de dado ou usar ferramentas de terceiros. Você pode encontrar várias ferramentas no mercado que podem ser usadas para gerar dados de teste. Uma dessas ferramentas maravilhosas é o dbForge Data Generator for SQL Server . É uma ferramenta GUI poderosa para uma geração rápida de dados de teste significativos para os bancos de dados de desenvolvimento. A ferramenta de geração de dados dbForge inclui mais de 200 geradores de dados predefinidos com opções de configuração sensatas que permitem emular dados aleatórios inteligentes em colunas. A ferramenta também permite gerar dados de demonstração para bancos de dados SQL Server já preenchidos com dados e criar seus próprios geradores de dados de teste personalizados. O dbForge Data Generator for SQL Server pode economizar seu tempo e esforço gastos na geração de dados de demonstração, preenchendo as tabelas do SQL Server com milhões de linhas de dados de exemplo que se parecem com dados reais. O dbForge Data Generator for SQL Server ajuda a preencher tabelas com os tipos de dados usados ​​com mais frequência, como os tipos de dados Basic, Business, Health, IT, Location, Payment e Person. A figura abaixo mostra a facilidade com que esta ferramenta funciona:



Depois de instalar a ferramenta dbForge Data Generator for SQL Server e executá-la, você precisa especificar o nome do servidor de destino e o nome do banco de dados na janela Connection, conforme mostrado abaixo:



Na janela Opções, você pode especificar o número de linhas a serem inseridas em sua tabela e outras opções diferentes que controlam os critérios de dados de teste gerados, conforme mostrado abaixo:



Depois de personalizar as opções para atender aos seus requisitos de dados de teste, clique no botão e uma nova janela com uma lista de todas as tabelas e colunas sob o banco de dados selecionado será exibida, perguntando você escolher qual tabela preencher com dados de teste, conforme mostrado abaixo:



Basta escolher a tabela que você precisa preencher com dados e a ferramenta fornecerá automaticamente os dados sugeridos na seção Visualização na parte inferior da janela e opções personalizáveis ​​para cada coluna dessa tabela que você pode personalizar facilmente, conforme mostrado abaixo de:



Por exemplo, você pode escolher entre os tipos de dados de geradores integrados que podem ser usados ​​para gerar os valores da coluna de ID conforme descrito anteriormente:



Ou personalize as características dos valores dessa coluna de ID, como Uniqueness, Min, Max e o Increment dos valores gerados, conforme abaixo:



Além disso, a coluna First_Name pode ser limitada para ser masculina ou feminina ou uma combinação desses dois tipos. Além disso, você pode controlar a porcentagem de valores NULL ou vazios nessa coluna, conforme mostrado abaixo:



A coluna BirthDate também pode ser controlada especificando a categoria em que esses alunos se enquadram, como Estudantes, Adolescentes, Adultos ou Aposentados, conforme mostrado abaixo:



Você também pode especificar o gerador totalmente descrito que pode ser usado para gerar os valores da coluna País, conforme mostrado abaixo:



E personalize a equação que será usada para gerar os valores da coluna Endereço de e-mail da seguinte forma:



Além da complexidade da equação personalizável, geramos os valores da coluna Senha, conforme mostrado abaixo:



E por fim, para o meu exemplo e não para esta ferramenta mágica, os geradores e equações usados ​​para gerar os valores da coluna Address abaixo:



Após este tour, você pode imaginar como essa ferramenta mágica o ajudará na geração de dados e na simulação de cenários em tempo real para testar a funcionalidade de sua aplicação. Instale-o e aproveite os benefícios de todos os recursos e opções disponíveis.


Ferramenta útil:


dbForge Data Generator for SQL Server – ferramenta GUI poderosa para uma geração rápida de dados de teste significativos para bancos de dados SQL Server.