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++