Faker: Gerando dados para testes
Você já se pegou precisando popular um banco de dados para testar sua aplicação? Ou talvez precise visualizar como os dados são exibidos sem usar os dados reais? Usar “Teste1”, “Teste2”, “teste1@gmail.com”, “123.123.123-12” não é a solução ideal, pois não representa a realidade dos dados que sua aplicação irá lidar. E usar seus próprios dados para testes? Nem pensar!
É aí que entra o Faker, uma biblioteca PHP que te salva de dores de cabeça! Com o Faker, você pode gerar dados fictícios realistas para seus testes, como nomes, endereços, emails, números de telefone, datas e muito mais.
Para começar a usar a biblioteca Faker, basta instalá-la com o Composer, o gerenciador de dependências do PHP.
composer require fakerphp/faker
Para usar o Faker, primeiro incluímos o arquivo de autoload do Composer em nosso script. Em seguida, criamos um objeto chamado $faker
que nos dará acesso a todos os métodos da biblioteca para gerar dados fictícios.
include('./vendor/autoload.php');
$faker = Faker\Factory::create();
echo $faker->name() . PHP_EOL;
// Dr. Emmie Harvey III
echo $faker->email(). PHP_EOL;
// christiansen.pearline@moore.net
echo $faker->streetName(). PHP_EOL;
// Kenneth Groves
echo $faker->company(). PHP_EOL;
// Lebsack, Turner and Hayes
O Faker permite personalizar a localização dos dados gerados. Para isso, basta adicionar o locale desejado ao criar o objeto $faker
usando o método create()
.
$faker = Faker\Factory::create('pt_BR');
echo $faker->name() . PHP_EOL;
// Fernanda Meireles Montenegro
echo $faker->email(). PHP_EOL;
// kesia29@hotmail.com
echo $faker->streetName(). PHP_EOL;
// Rua Lira
echo $faker->company(). PHP_EOL;
// Arruda e Saito
Gerando dados pessoais com Faker
Se você precisa gerar dados pessoais, como nomes, sobrenomes, etc., o Faker oferece diversos métodos para te ajudar:
name()
: retorna um nome completo (nome e sobrenome). Se você não passar nenhum argumento, o gênero do nome será aleatório. Para gerar um nome de um gênero específico é preciso passar um parâmetro para o método, use “male” para masculino e “female” para feminino.
firstName()
: funciona de forma similar ao name()
, gerando apenas o primeiro nome. Ele também permite especificar o gênero com os argumentos male
ou female
, caso contrário, o gênero será aleatório.
firstNameMale()
e firstNameFemale()
: O mesmo que fistName
mas com a especificação de gênero no nome do método.
lastName()
: retorna um sobrenome.
phoneNumber()
: um número de telefone com 8 ou 9 dígitos, incluindo o código de área
phone()
: retorna um número de telefone. Com 8 ou 9 digitos sem o código de área
email()
: retorna um endereço de e-mail.
freeEmail()
: retorna um endereço de e-mail de um servidor grátis.
companyEmail()
: retorna um e-mail “empresarial”.
userName()
: retorna um nome de usuário. Um “login“.
password()
: retorna uma senha. Por padrão, a senha será de no mínimo 6 caracteres e no máximo 20. Pode ser passado dois argumentos para especificar o tamanho mínimo e o máximo.
cpf()
: retorna um número de CPF com pontos e traços. Se for passado false como argumento será gerado um número sem os pontos e traços.
echo "Nome: " . $faker->name() . PHP_EOL;
// Nome: Dr. Ester Catarina Brito
echo "Nome Masculino: " . $faker->name('male') . PHP_EOL;
// Nome Masculino: Sr. Edilson Santiago
echo "Nome Feminino: " . $faker->name('female') . PHP_EOL;
// Nome Feminino: Sophia Rico Jr.
echo "Primeiro Nome: " . $faker->firstName() . PHP_EOL;
// Primeiro Nome: Eva
echo "Primeiro Nome Masculino: " . $faker->firstNameMale() . PHP_EOL;
// Primeiro Nome Masculino: Gustavo
echo "Primeiro Nome Feminino: " . $faker->firstNameFemale() . PHP_EOL;
// Primeiro Nome Feminino: Bianca
echo "Sobrenome: " . $faker->lastName() . PHP_EOL;
// Sobrenome: Vale
echo "Número de Telefone 1: " . $faker->phoneNumber() . PHP_EOL;
// Número de Telefone 1: (51) 4623-7238
echo "Número de Telefone 2: " . $faker->phone() . PHP_EOL;
// Número de Telefone 2: 99748-1167
echo "Número de Celular: " . $faker->cellphoneNumber() . PHP_EOL;
// Número de Celular: (95) 90822-8296
echo "E-mail: " . $faker->email() . PHP_EOL;
// E-mail: beltrao.eric@r7.com
echo "E-mail Grátis: " . $faker->freeEmail() . PHP_EOL;
// E-mail Grátis: sonia.feliciano@gmail.com
echo "E-mail de empresarial: " . $faker->companyEmail() . PHP_EOL;
// E-mail de empresarial: gil.joaquin@martines.com
echo "Nome de Usuário: " . $faker->userName() . PHP_EOL;
// Nome de Usuário: jeronimo69
echo "Senha: " . $faker->password() . PHP_EOL;
// Senha: P:}&$%7
echo "CPF: " . $faker->cpf() . PHP_EOL;
// CPF: 775.245.855-43
Gerando endereços Fake
address():
retorna um endereço com CEP, rua, e número.
streetName()
: retorna o nome de uma rua.
buildingNumber()
: retorna o número de uma casa ou prédio.
secondaryAddress()
: retorna o complemento de um endereço, como apto 502, Fundos, etc.
city()
: retorna o nome de uma cidade.
state()
: retorna o nome de um estado.
stateAbbr()
: retorna a abreviação de um estado. Ex.: RS, CE, BA.
country(): retorna o nome de um país.
postcode()
: retorna um número de CEP.
echo "Endereço Completo: " . $faker->address(). PHP_EOL;
// Endereço Completo: 16486-346, R. Maitê, 4951. Bc. 23 Ap. 46
echo "Nome da Rua: " .$faker->streetName(). PHP_EOL;
// São Fabrício do Sul - GO
echo "Endereço: " .$faker->streetAddress(). PHP_EOL;
// Nome da Rua: Av. Gabi Dominato
echo "Número da casa/prédio: " . $faker->buildingNumber(). PHP_EOL;
// Número da casa/prédio: 1979
echo "Complemento: " . $faker->secondaryAddress(). PHP_EOL;
// Complemento: Apto 7
echo "Cidade: " . $faker->city(). PHP_EOL;
// Cidade: São Estêvão
echo "Estado: " . $faker->state(). PHP_EOL;
// Estado: Maranhão
echo "Abreviação do Estado: ". $faker->stateAbbr(). PHP_EOL;
// Abreviação do Estado: MS
echo "País: " . $faker->country(). PHP_EOL;
// País: Namíbia
echo "CEP: " . $faker->postcode(). PHP_EOL;
// CEP: 10216-280
Gerando nomes de Empresas Fake
company()
: retorna o nome de uma empresa.
cnpj()
: retorna o número de CNPJ de uma empresa.
companySuffix()
: retorna o sufixo de uma empresa.
jobTitle()
: Retorna o nome de um cargo. Obs.: com o locale pt_BR não está funcionando corretamente.
echo "Nome da Empresa: " . $faker->company(). PHP_EOL;
// Nome da Empresa: Teles e Alcantara S.A.
echo "CNPJ: " . $faker->cnpj() . PHP_EOL;
// CNPJ: 94.956.376/0001-18
echo "Sufixo da Empresa: " . $faker->companySuffix() . PHP_EOL;
// Sufixo da Empresa: e Filhos
echo "Cargo: " . $faker->jobTitle() . PHP_EOL;
// Cargo: nihil
Gerando Números e Strings
randomDigit()
: retorna um dígito aleatório de 0 até 9.
randomNumber()
: retorna um inteiro aleatório com o número de dígitos entre 1 e 9. Se passado um argumento ($nDigits
) será gerado um número aleatório com o número de dígitos entre 1 e o $nDigits
. Se um segundo argumento($stric
) for passado como true, o número gerado terá $strict
números de dígitos.
randomFloat()
: retorna um número float (ponto flutuante) aleatório. Pode-se passar como primeiro argumento o número de casas decimais que o número gerado irá ter. Se um segundo e terceiro argumento for passado, o número gerado será neste intervalo.
numberBetween():
retorna um número inteiro entre o intervalo passado. O primeiro argumento será o início do intervalo e o segundo o final.
randomLetter()
: retorna uma letra aleatória.
randomElement()
: retorna um elemento aleatório de um array, transvesable ou enum.
randomKey()
: retorna uma chave aleatória de um array passado.
shuffle()
: retorna uma versão embaralhada do array passado.
numerify()
: retorna a string passada por parâmetro substituindo todos os caracteres “#” por dígitos aleatórios de 0 até 9. Se nenhuma string for passada por parâmetro “###” será utilizada.
lexify()
: retorna a string passada por parâmetro substituindo todos os caracteres “?” por letras aleatórias. Se nenhum parâmetro for passado “????” será utilizado.
bothify()
: Retorna uma string passada por parâmetro substituindo todos os caractes “#” por digitos aleatorios e “?” por letras aleatórias.
asciify()
: retorna uma string passada por parâmetro substituindo todos os caracteres “*” por caracteres da tabela ASCII.
regexify()
: retorna uma string aleatória seguindo a expressão regular passada.
echo "Digito Aleatório: " . $faker->randomDigit(). PHP_EOL;
// Digito Aleatório: 5
echo "Digito Aleatório entre 1 e 6: " . $faker->numberBetween(1, 6). PHP_EOL;
// Digito Aleatório entre 1 e 6: 6
echo "Inteiro Aleatório: " . $faker->randomNumber(). PHP_EOL;
// Inteiro Aleatório: 8005
echo "Inteiro Aleatório de até 5 dígitos: " . $faker->randomNumber(5). PHP_EOL;
// Inteiro Aleatório de até 5 dígitos: 9124
echo "Inteiro Aleatório com exatos 5 dígitos: " . $faker->randomNumber(5, true). PHP_EOL;
// Inteiro Aleatório com exatos 5 dígitos: 73700
echo "Float Aleatório: " . $faker->randomFloat(). PHP_EOL;
// Float Aleatório: 32.804686
echo "Float Aleatório com 3 casas decimais: " . $faker->randomFloat(3). PHP_EOL;
// Float Aleatório com 3 casas decimais: 1893285.594
echo "Float Aleatório com 2 casas decimais entre 10 e 100 : " . $faker->randomFloat(2, 10, 100). PHP_EOL;
// Float Aleatório com 2 casas decimais entre 10 e 100 : 53.32
echo "Letra Aleatória: " . $faker->randomLetter(). PHP_EOL;
// Letra Aleatória: v
echo "Elemento Aleatório: " . $faker->randomElement(['a1', 'b2', 'c3', 'd4', 'e5']). PHP_EOL;
// Elemento Aleatório: c3
enum Naipes: string
{
case OUROS = '♠';
case ESPADAS = '♣';
case PAUS = '♦';
case COPAS = '♥';
}
echo "Elemento Aleatório Enum: " . $faker->randomElement(Naipes::class)->value. PHP_EOL;
// Elemento Aleatório Enum: ♠
echo "Chave Aleatória: " . $faker->randomKey(['a' => 1, 'b' => 2, 'c' => 3]). PHP_EOL;
// Chave Aleatória: c
echo "Array Embaralhado: " . join(', ', $faker->shuffle(['a', 'b', 'c'] ) ). PHP_EOL;
// Array Embaralhado: b, a, c
echo "Numerify: ". $faker->numerify() . PHP_EOL;
// Numerify: 567
echo "Numerify : ". $faker->numerify('usuario-###') . PHP_EOL;
// Numerify : usuario-668
echo "Lexify: " . $faker->lexify() . PHP_EOL;
// Lexify: dciu
echo "Lexify: ". $faker->lexify('???-101') . PHP_EOL;
// Lexify: reb-101
echo "Bothify: " . $faker->bothify('???-####'). PHP_EOL;
// Bothify: mnq-1993
echo "Asciify: " .$faker->asciify('usuario-***') . PHP_EOL;
// Asciify: usuario-S"H
echo "Regexify: " . $faker->regexify('[A-Z]{3}-[0-9]{4}') . PHP_EOL;
// Regexify: RLJ-9688
Gerando Texto e Paragráfos
word
: retorna uma palavra.
words
: retorna um array contendo palavras. Opcionalmente pode-se passar um inteiro para estipular o número de palavras que o array irá conter. Se nenhum valor for passado, o array conterá 3 palavras. Se um terceiro parâmetro booleano true for passado, em vez de um array será retornada uma string.
sentence
: retorna uma frase com um determinado número de palavas. Por padrão o número de palavras é 6, pode-se passar um parâmetro para definir o número de palavras na frase. Por padrão o número de palavras, mesmo especificando por parâmetro, pode desviar cerca de 40%, para obrigar a gerar exatamente o número de palavras deve-se passar um segundo parâmetro booleano false.
sentences
: retorna um array de frases. O número de frases pode ser passado por parâmetro, sendo o padrão 3. Se um segundo parâmetro booleano true for passado ao invés de retornar um array será retornada uma string.
paragraph
: retorna um parágrafo contendo um determinado número de frases. Por padrão, o número de frases no parágrafo é 3, mas é possível passar um inteiro como parâmetro para definir um novo número. Mesmo especificando por parâmetro o número de frases, pode se desviar cerca de 40%, para obrigar a gerar exatamente o número de frases deve-se passar um segundo parâmetro booleano false.
paragraphs
: semelhante aos sentences
mas para parágrafos.
text
: retorna uma string com um texto. Por padrão, o número de caracteres é 200, mas é possível utilizar outro tamanho passando por parâmetro o número de caracteres desejado.
echo "Palavra: " . $faker->word() . PHP_EOL;
// Palavra: corporis
echo "Palavras: " . join(', ', $faker->words() ) . PHP_EOL;
// Palavras: ea, dicta, eveniet
echo "5 Palavras: " . join(', ', $faker->words(5) ) . PHP_EOL;
// 5 Palavras: ipsam, officiis, nisi, ea, explicabo
echo "5 Palavras string: " . $faker->words(5, true) . PHP_EOL;
// 5 Palavras string: aliquid nihil quis sed aperiam
echo "Frase: " . $faker->sentence() . PHP_EOL;
// Frase: Harum et distinctio et nihil ipsum cupiditate animi adipisci.
echo "Frase com 8 palavras: " . $faker->sentence(8) . PHP_EOL;
// Frase com 8 palavras: Vitae eos aut nihil et voluptatum maiores illo sequi maiores.
echo "Frase com exatamente 5 palavras: " . $faker->sentence(5, false) . PHP_EOL;
// Frase com exatamente 5 palavras: Neque saepe impedit rerum occaecati.
echo "Frases: " . join(', ', $faker->sentences() ) . PHP_EOL;
// Frases: Ipsa sed in at aperiam nostrum autem consectetur., Consequatur quidem sint atque., Et odit aut est recusandae nobis libero harum.
echo "5 Frases: " . join(', ', $faker->sentences(5) ). PHP_EOL;
// 5 Frases: Dolorem accusantium temporibus exercitationem soluta quibusdam veritatis necessitatibus., Error quis culpa ullam beatae quia sed nesciunt., Voluptatum cumque excepturi beatae tempore totam et., Consequatur tempora corporis distinctio atque nihil., Iste sunt quia optio numquam.
echo "5 Frases como uma string: " . $faker->sentences(5, true) . PHP_EOL;
// 5 Frases como uma string: Et molestiae eveniet consequatur aut excepturi. Amet expedita nostrum voluptatem perspiciatis assumenda. Sequi et nulla dolorum sint laudantium quaerat asperiores. Voluptatem est totam debitis quaerat tempore dignissimos. Harum excepturi non sint officia in.
echo "Parágrafo: " . $faker->paragraph() . PHP_EOL;
// Parágrafo: Accusamus nisi voluptate placeat eaque perferendis quam. Omnis quia vero qui nostrum expedita ipsam. Neque eum aperiam rerum labore quas.
echo "Parágrafo com 2 frases: " . $faker->paragraph(2) . PHP_EOL;
// Parágrafo com 2 frases: Hic quod eveniet illum eveniet. Ipsum aut est sequi nisi voluptatem. Iure corrupti dignissimos illum id nisi.
echo "Parágrafo com exatamente 2 frases: " . $faker->paragraph(2, false) . PHP_EOL;
// Parágrafo com exatamente 2 frases: Quis ab veniam dolorem quo quidem. Neque eveniet eum in dolorem.
echo "2 Parágrafos: " . join(', ', $faker->paragraphs(2) ) . PHP_EOL;
// 2 Parágrafos: Similique in quia deleniti blanditiis dignissimos. Eaque illum aliquid commodi ut et praesentium quo. Illum accusamus id quam architecto rerum blanditiis quaerat., Vitae qui quis sit dolore maiores velit sint. Expedita beatae fuga quam cumque sint dolores laboriosam. Sit quibusdam et eligendi maxime dignissimos reiciendis. Necessitatibus neque ab aperiam eligendi.
echo "Texto: " . $faker->text() . PHP_EOL;
// Texto: Quo repudiandae et ab eum rerum ad. Totam fuga aliquid voluptatem in. Voluptatem ipsam sit pariatur a nostrum dolor voluptate. Exercitationem esse expedita tempore et et.
echo "Texto com 50 caracteres: " . $faker->text(50) . PHP_EOL;
// Texto com 50 caracteres: Adipisci minus accusantium laborum optio nulla.
Gerando Datas
dateTime
: retorna um objeto DateTime
com uma data entre 01/01/1970 e uma data passada por parâmetro. Se nenhuma data for passada por parâmetro 'now'
(a data atual) será usado.
dateTimeAD
: Semelhante ao dateTime
anterior mas com a data inicial de 01/01/0001.
iso8601
: retorna uma data no formato iso8601. A data gerada será entre 01/01/1970 e uma data passada por parâmetro. Se nenhuma data for passada por parâmetro 'now'
(a data atual) será usado.
date
: retorna uma data no formato string. Por padrão, o formato gerado será “ano-mes-dia”, mas pode ser passado um parâmetro para se utilizar outro formato. A data gerada será entre 01/01/1970 e uma data passada por parâmetro. Se nenhuma data for passada por parâmetro 'now'
(a data atual) será usado.
dateTimeBetween
: retorna uma data(objeto DateTime
) entre duas datas fornecidas. Se nenhuma data for fornecida, a data inicial assumida será -30 anos e a final 'now'
(data atual).
dayOfMonth
: retorna o número do dia do mês de um DateTime
gerado.
dayOfWeek
: retorna o texto do dia da semana de um DateTime
gerado.
month
: retorna o número do mês de um DateTime
gerado.
monthName
: retorna o nome do mês de um DateTime
gerado.
year
: : retorna o ano de um DateTime
gerado.
echo "Data: " . $faker->dateTime()->format('d/m/Y h:i:s') .PHP_EOL;
// Data: 08/03/1996 04:51:28
echo "Data até um mês a mais: " . $faker->dateTime( new DateTime('+1 month') )->format('d/m/Y h:i:s') .PHP_EOL;
// Data até um mês a mais: 20/04/1988 12:23:57
echo "Data AD: " . $faker->dateTimeAD()->format('d/m/Y h:i:s') .PHP_EOL;
// Data AD: 09/12/1682 02:12:06
echo "Data iso8601: " . $faker->iso8601() . PHP_EOL;
// Data iso8601: 2008-05-23T22:37:15+0000
echo "Data date: " . $faker->date() . PHP_EOL;
// Data date: 2002-03-05
echo "Data date formato dia/mes/ano: " . $faker->date('d/m/Y') . PHP_EOL;
// Data date formato dia/mes/ano: 25/05/1996
echo "Data date formato dia/mes/ano até 2024-01-01: " . $faker->date('d/m/Y', '2024-01-01') . PHP_EOL;
// Data date formato dia/mes/ano até 2024-01-01: 18/03/2021
echo "Hora: " . $faker->time() . PHP_EOL;
// Hora: 20:57:22
echo "Hora formato hora_minuto_segundo: " . $faker->time('H_i_s') . PHP_EOL;
// Hora formato hora_minuto_segundo: 23_18_36
echo "Data entre duas data: " . $faker->dateTimeBetween('2024-01-01', '2024-12-31')->format('d/m/Y h:i:s') . PHP_EOL;
// Data entre duas data: 14/04/2024 12:05:14
echo "Dia do mês: " . $faker->dayOfMonth(). PHP_EOL;
// Dia do mês: 09
echo "Dia da semana: " . $faker->dayOfWeek(). PHP_EOL;
// Dia da semana: Thursday
echo "Mês: " . $faker->month(). PHP_EOL;
// Mês: 06
echo "Nome Mês: " . $faker->monthName(). PHP_EOL;
// Nome Mês: September
echo "Ano: " . $faker->year(). PHP_EOL;
// Ano: 1987
Outros dados interessantes
url
: retorna uma URL.
slug
: retorna um slug com um determinado número de palavras. Se nenhum parâmetro for passado é utilizado 6 como número de palavras. Por padrão, o número de palavras, mesmo especificando por parâmetro, pode desviar um pouco, para obrigar a gerar um slug com exatamente o número de palavras deve-se passar um segundo parâmetro booleano false.
ipv4
: retorna um endereço IPv4.
ipv6
: retorna um endereço IPv6.
creditCardType
: retorna um tipo de cartão de crédito. Ex. MasterCard, Visa …
creditCardNumber
: retorna um número de cartão de crédito. Se um parâmetro string do tipo de cartão de crédito ele irá gerar um número usando este formato. Se um segundo parâmetro booleano true for passado, será aplicada uma máscara no número.
hexColor
: retorna uma cor no formato hexadecimal.
mimeType
: retorna uma string com um mimeType aleatório.
fileExtension
: retorna uma extensão de arquivo aleatória.
uuid
: retorna um UUID aleatório.
echo "URL: " . $faker->url() . PHP_EOL;
// URL: http://www.quintana.com/
echo "Slug: " . $faker->slug() . PHP_EOL;
// Slug: magni-quibusdam-vitae-hic-necessitatibus-voluptatibus-dicta-quidem
echo "Slug 3 palavras: " . $faker->slug(3, false) . PHP_EOL;
// Slug 3 palavras: ut-vel-sed
echo "IPv4: " . $faker->ipv4() . PHP_EOL;
// IPv4: 123.71.175.204
echo "IPv6: " . $faker->ipv6() . PHP_EOL;
// IPv6: 8476:3171:de73:ee75:732f:ad01:e6b2:2b2
echo "Tipo de cartão de crédito: " . $faker->creditCardType() . PHP_EOL;
// Tipo de cartão de crédito: Visa
echo "Cartão de crédito: " . $faker->creditCardNumber() . PHP_EOL;
// Cartão de crédito: 5932105555112043
echo "Cartão de crédito Elo: " . $faker->creditCardNumber('Elo') . PHP_EOL;
// Cartão de crédito Elo: 4389350601656996
echo "Cartão de crédito: " . $faker->creditCardNumber('Elo', true) . PHP_EOL;
// Cartão de crédito: 5067-1188-2110-4634
echo "Cor Hexadecimal: " . $faker->hexColor() . PHP_EOL;
// Cor Hexadecimal: #81a6c4
echo "mimeType: " . $faker->mimeType() . PHP_EOL;
// mimeType: application/x-futuresplash
echo "Extensão de arquivo: " . $faker->fileExtension() . PHP_EOL;
// Extensão de arquivo: dmp
echo "uuid: " . $faker->uuid() . PHP_EOL;
// uuid: efd21d9a-9d61-38cd-a529-723d2a4cd378
Bom essa foi uma pequena introdução a biblioteca Faker que facilita muito a geração de dados para os mais diversos testes. No site da biblioteca ainda existem vários outros métodos de geração que você pode precisar.
Bom era isso T++