Usando Faker Para Generar Información de Relleno para Pruebas Automatizadas
Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)



Faker es una librería de código abierto creada por Francois Zaninotto que genera información artificial de relleno para tu aplicación y sus necesidades de pruebas.
Faker puede ser usado un una aplicación vainilla PHP, un framework tal como Yii o Laravel, o dentro de una librería de pruebas como mencionamos con Codeception en este tutorial anterior Envato Tuts+.
En el tutorial de hoy, revisaré la instalación y usos básicos de Faker y sus capacidades. Como Zaninotto dice:
"Sea que necesites arrancar tu base de datos, creado documentos XML de buena apariencia, llenar tu persistencia para hacerle prueba de estrés o anonimizar datos tomados de un servicio de producción, Faker es para ti."
Y, sobre todo, entrega un amplio rango de capacidades simples útiles para cualquier régimen de pruebas.
Un pequeño recordatorio antes de que comencemos, participo en la sección de comentarios de abajo. Estoy especialmente interesado si tienes ideas adicionales o quieres sugerir temas para tutoriales futuros. Si tienes una pregunta o sugerencia de tema, por favor publícala abajo. También puedes contactarme en Twitter @reifman directamente.
Comenzando
Instalando Faker
Comencé creando un nuevo árbol de código y luego agregando fzaninotto/faker a composer.json abajo:
1 |
{
|
2 |
"name": "Faker Demonstration", |
3 |
"description": "for Envato Tuts+", |
4 |
"keywords": ["faker","php","jeff reifman"], |
5 |
"homepage": "https://www.lookahead.io/", |
6 |
"type": "project", |
7 |
"license": "BSD-3-Clause", |
8 |
"minimum-stability": "stable", |
9 |
"require": { |
10 |
"php": ">=5.6.0", |
11 |
"fzaninotto/faker" : "*" |
12 |
}
|
13 |
}
|
Después, actualicé composer:
1 |
$ composer update
|
2 |
Loading composer repositories with package information |
3 |
Updating dependencies (including require-dev) |
4 |
- Installing fzaninotto/faker (v1.6.0) |
5 |
Loading from cache |
6 |
|
7 |
Writing lock file |
8 |
Generating autoload files |
Faker es instalado en la carpeta de proveedor. Así, después cargué en la parte superior de un archivo index.php:
1 |
<?php
|
2 |
// require the Faker autoloader
|
3 |
require __DIR__ . '/vendor/autoload.php'; |
Después, quise intentar unos cuantos escenarios simples de ejemplo de generar datos.
Ejemplos Simples
Extendí los ejemplos Faker como sigue y los ejecuté desde http://localhost:8888/faker:
1 |
<?php
|
2 |
// require the Faker autoloader
|
3 |
require __DIR__ . '/vendor/autoload.php'; |
4 |
|
5 |
// use the factory to create a Faker\Generator instance
|
6 |
$faker = Faker\Factory::create(); |
7 |
|
8 |
// generate data by accessing properties
|
9 |
echo $faker->name; |
10 |
// 'Lucy Cechtelar';
|
11 |
spacer(); |
12 |
echo $faker->address; |
13 |
// "426 Jordy Lodge
|
14 |
// Cartwrightshire, SC 88120-6700"
|
15 |
spacer(); |
16 |
echo $faker->text; |
17 |
// Dolores sit sint laboriosam dolorem culpa et autem. Beatae nam sunt fugit
|
18 |
// et sit et mollitia sed.
|
19 |
// Fuga deserunt tempora facere magni omnis. Omnis quia temporibus laudantium
|
20 |
// sit minima sint.
|
21 |
spacer(); |
22 |
|
23 |
function spacer() { |
24 |
echo '<br />'; |
25 |
}
|
26 |
?>
|
Con refrescos rápidos, fui presentado con resultados variantes como:
1 |
Ruthie Beier |
2 |
37851 Gusikowski Flat Suite 594 Port Keithmouth, NM 06110 |
3 |
Reprehenderit eos suscipit sit modi architecto necessitatibus. Error maiores qui vero non omnis. Quaerat mollitia dolore deserunt quia quidem beatae. |
Y:
1 |
Darron Hessel |
2 |
657 Elijah Lock Suite 202 Nitzschemouth, AZ 11166 |
3 |
Culpa dolorum quidem distinctio eius necessitatibus. Mollitia ut nostrum et ut quas veniam et. Unde iure molestiae aperiam fuga voluptatibus quo. |
Y:
1 |
Fredy Fadel MD |
2 |
53328 Eldora Isle Apt. 634 West Eleanore, CA 95798-3025 |
3 |
Eligendi eos laudantium eveniet ad. Qui a voluptatibus est quia voluptatem. Dolorum pariatur quaerat nulla. |
Faker cumple lo que promete.
Proveedores Faker Por Defecto
Todos los métodos de generación de datos en Faker son creados desde la implementación de proveedores. Aquí está el código que registra los proveedores por defecto de Faker---está hecho por ti:
1 |
<?php
|
2 |
$faker = new Faker\Generator(); |
3 |
$faker->addProvider(new Faker\Provider\en_US\Person($faker)); |
4 |
$faker->addProvider(new Faker\Provider\en_US\Address($faker)); |
5 |
$faker->addProvider(new Faker\Provider\en_US\PhoneNumber($faker)); |
6 |
$faker->addProvider(new Faker\Provider\en_US\Company($faker)); |
7 |
$faker->addProvider(new Faker\Provider\Lorem($faker)); |
8 |
$faker->addProvider(new Faker\Provider\Internet($faker)); |
Así que arriba, cuando pedí una address desde Faker, esta buscó todos los proveedores para métodos que empataban, finalmente usando el proveedor Address().
También puedes escribir tus propios proveedores o navegar un número de extensiones para Faker que están disponibles en la web.
Modificadores
Faker también ofrece modificadores especiales para ayudarte a probar, tales como unique(), optional(), o valid(). Por ejemplo, puedes generar números únicos:
1 |
// unique() forces providers to return unique values
|
2 |
$values = array(); |
3 |
for ($i=0; $i < 10; $i++) { |
4 |
// get a random digit, but always a new one, to avoid duplicates
|
5 |
$values []= $faker->unique()->randomDigit; |
6 |
}
|
7 |
print_r($values); |
Aquí está la salida para valores únicos:
1 |
Array ( [0] => 7 [1] => 6 [2] => 0 [3] => 2 [4] => 5 [5] => 1 [6] => 8 [7] => 4 [8] => 9 [9] => 3 ) |
Si usas el método optional(), algunos números serán devueltos como NULL como si el usuario no hubiera ingresado un campo en tu formulario. Nota: Pude hacer funcionar correctamente este método.
Con valid(), puedes registrar funciones que determinen si la información de relleno cumple requerimientos específicos o podrían devolver un error o generar un mensaje de error en un formulario de usuario.
Explorando los Proveedores
Faker ofrece un amplio conjunto de métodos para generar información aleatoria para tu aplicación:
- Base: métodos simples para letras, números, cadenas procesadas y regex aleatorios
- Lorem Ipsum Text: texto en Latín aleatorio
- Person: nombres de personas
- Address: direcciones de envío
- Phone Number: números de teléfono
- Company: nombres de compañías
- Real Text: texto real escrito por seres humanos vs. cadenas en Latín sin sentido
- Date and Time: fechas y horarios aleatorios
- Internet: emails, dominios, etc.
- User Agent: cadenas de navegador
- Payment: cadenas y números de tarjetas de crédito y SWIFT
- Color: colores aleatorios
- File: extensiones de archivo, tipos de archivo y nombres de archivo
- Image: URLs de imágenes de relleno de distintos tipos
- Uuid: IDs únicos
- Barcode: varios tipos de códigos de barras, ej. ISBN13
- Miscellaneous: códigos de encriptación, códigos de país, etc.
- Biased: números aleatorios con parcialidad
Experimentemos con algunos cuántos más de estos métodos.
Información de Pago
El código de abajo genera diez personas, su información de tarjeta de crédito y códigos de seguridad:
1 |
$faker = Faker\Factory::create(); |
2 |
for ($i=0;$i<10;$i++) { |
3 |
$cc = $faker->creditCardDetails; |
4 |
$cc['security']=$faker->numberBetween(199,499); |
5 |
var_dump ($cc);spacer(2); |
6 |
}
|
Aquí hay alguna información de salida del código de arriba:



Imágenes



Aquí está un ejemplo simple de generación de imagen:
1 |
$faker = Faker\Factory::create(); |
2 |
$width=320; |
3 |
$height=240; |
4 |
echo '<img src="'.$faker->imageUrl($width, $height).'"/>'; |
Pero también puedes generar gatos:
1 |
echo '<img src="'.$faker->imageUrl($width, $height, 'cats', true, 'Faker', true) .'"/>'; |



Podría ser la capacidad de generación de gatos la que me convenció. No puedo esperar para que la impresión tridimensional y la activación de alma funcione con cosas como esta.
Información Internacionalizada
Con el código de abajo, creé una tabla con cuatro columnas de nombres de Francia, Rusia, América y China:
1 |
echo '<table> |
2 |
<thead>
|
3 |
<th>French</th>
|
4 |
<th>Russian</th>
|
5 |
<th>English</th>
|
6 |
<th>Chinese</th>
|
7 |
</thead>
|
8 |
<tr><td>'; |
9 |
$faker = Faker\Factory::create('fr_FR'); // create a French faker |
10 |
for ($i=0; $i < 10; $i++) { |
11 |
echo $faker->name; |
12 |
spacer(); |
13 |
}
|
14 |
spacer(2); |
15 |
echo '</td><td>'; |
16 |
$faker = Faker\Factory::create('Ru_RU'); // create Russian |
17 |
for ($i=0; $i < 10; $i++) { |
18 |
echo $faker->name; |
19 |
spacer(); |
20 |
}
|
21 |
spacer(2); |
22 |
echo '</td><td>'; |
23 |
$faker = Faker\Factory::create('En_US'); // create English |
24 |
for ($i=0; $i < 10; $i++) { |
25 |
echo $faker->name; |
26 |
spacer(); |
27 |
}
|
28 |
spacer(2); |
29 |
echo '</td><td>'; |
30 |
$faker = Faker\Factory::create('zh_CN'); // create Chinese |
31 |
for ($i=0; $i < 10; $i++) { |
32 |
echo $faker->name; |
33 |
spacer(); |
34 |
}
|
35 |
echo '</td></tr></table>'; |
Aquí está la salida:



Creando Direcciones Falsas de Email
Aquí hay un código de ejemplo para generar 25 direcciones de email desde proveedores gratuitos como Gmail y Yahoo:
1 |
$values = array(); |
2 |
for ($i=0; $i < 25; $i++) { |
3 |
// get a random digit, but also null sometimes
|
4 |
$values []= $faker->freeEmail(); |
5 |
}
|
6 |
print_r($values); |
7 |
exit; |
Aquí está la salida resultante:



Generando Documentos XML
Faker ofrece un ejemplo útil de generar XML; sin embargo, este requiere que estés trabajando con un framework y tener una arquitectura de vista:
1 |
<?php
|
2 |
require_once '/path/to/Faker/src/autoload.php'; |
3 |
$faker = Faker\Factory::create(); |
4 |
?>
|
5 |
<?xml version="1.0" encoding="UTF-8"?> |
6 |
<contacts>
|
7 |
<?php for ($i=0; $i < 10; $i++): ?> |
8 |
<contact firstName="<?php echo $faker->firstName ?>" lastName="<?php echo $faker->lastName ?>" email="<?php echo $faker->email ?>"/> |
9 |
<phone number="<?php echo $faker->phoneNumber ?>"/> |
10 |
<?php if ($faker->boolean(25)): ?> |
11 |
<birth date="<?php echo $faker->dateTimeThisCentury->format('Y-m-d') ?>" place="<?php echo $faker->city ?>"/> |
12 |
<?php endif; ?> |
13 |
<address>
|
14 |
<street><?php echo $faker->streetAddress ?></street> |
15 |
<city><?php echo $faker->city ?></city> |
16 |
<postcode><?php echo $faker->postcode ?></postcode> |
17 |
<state><?php echo $faker->state ?></state> |
18 |
</address>
|
19 |
<company name="<?php echo $faker->company ?>" catchPhrase="<?php echo $faker->catchPhrase ?>"> |
20 |
<?php if ($faker->boolean(33)): ?> |
21 |
<offer><?php echo $faker->bs ?></offer> |
22 |
<?php endif; ?> |
23 |
<?php if ($faker->boolean(33)): ?> |
24 |
<director name="<?php echo $faker->name ?>" /> |
25 |
<?php endif; ?> |
26 |
</company>
|
27 |
<?php if ($faker->boolean(15)): ?> |
28 |
<details>
|
29 |
<![CDATA[ |
30 |
<?php echo $faker->text(400) ?> |
31 |
]]> |
32 |
</details>
|
33 |
<?php endif; ?> |
34 |
</contact>
|
35 |
<?php endfor; ?> |
36 |
</contacts>
|
En Conclusión
Espero que esto haya servido como una introducción básica para ti a Faker, una librería PHP de código abierto gratuita e increíblemente útil.
Si quieres leer más, recomiendo Contenido de Relleno: Herramientas, Consejos y un Ejemplo Dinámico (Envato Tuts+) de Jim Nielsen, que proporciona una aproximación de diseñador de aplicación en generar datos. El sugiere que puedes ser más efectivo cuando aplicas datos falsos para crear una experiencia más realista durante tu proceso de diseño.
Si quisieras saber cuando llegue mi siguiente tutorial de Envato Tuts+, sígueme en @reifman en Twitter o revisa mi página de instructor. Actualmente, estoy trabajando en dos series que podrías apreciar:
- Serie Programando Con Yii2
- Construyendo Tu Startup con PHP sobre Planificador de Reuniones; ve a programar tu primera reunión ahí hoy.



