使用Faker生成用于自动化测试的填充数据

最终产品图片
您将要创造的

Faker是由Francois Zaninotto创建的开源库,可为您的应用程序及其测试需求生成人工填充数据。

Faker可以在普通的PHP应用程序,Yii或Laravel等框架中使用,也可以在测试库中使用,例如我们在此早期的Envato Tuts +教程中与Codeception一起提到的库中。

在今天的教程中,我将回顾Faker的基本安装和使用及其功能。 正如Zaninotto所说:

“无论您是需要引导数据库,创建美观的XML文档,填充持久性以进行压力测试还是匿名化从生产服务中获取的数据,Faker都是您的理想选择。”

总体而言,它提供了适用于任何测试方案的各种简单功能。

提醒我们开始之前,我确实参加了下面的评论主题。 如果您有其他想法或想为以后的教程提出建议,我特别感兴趣。 如果您有任何问题或建议,请在下面发布。 您也可以直接通过Twitter @reifman与联系

入门

安装Faker

我首先创建一个新的代码树,然后将fzaninotto/faker添加到下面的composer.json中:

{
    "name": "Faker Demonstration",
    "description": "for Envato Tuts+",
    "keywords": ["faker","php","jeff reifman"],
    "homepage": "http://www.lookahead.io/",
    "type": "project",
    "license": "BSD-3-Clause",
    "minimum-stability": "stable",
    "require": {
        "php": ">=5.6.0",
        "fzaninotto/faker" : "*"
            }    
}

然后,我更新了作曲家:

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing fzaninotto/faker (v1.6.0)
    Loading from cache

Writing lock file
Generating autoload files

Faker已安装到供应商目录中。 因此,然后我将其加载到index.php文件的顶部:

<?php
    // require the Faker autoloader
    require __DIR__ . '/vendor/autoload.php';

接下来,我想尝试一些简单的生成数据的示例场景。

简单的例子

我将Faker示例扩展如下,并从http:// localhost:8888 / faker运行它们:

<?php
// require the Faker autoloader
require __DIR__ . '/vendor/autoload.php';

// use the factory to create a Faker\Generator instance
$faker = Faker\Factory::create();

// generate data by accessing properties
echo $faker->name;
  // 'Lucy Cechtelar';
  spacer();
echo $faker->address;
  // "426 Jordy Lodge
  // Cartwrightshire, SC 88120-6700"
  spacer();
echo $faker->text;
  // Dolores sit sint laboriosam dolorem culpa et autem. Beatae nam sunt fugit
  // et sit et mollitia sed.
  // Fuga deserunt tempora facere magni omnis. Omnis quia temporibus laudantium
  // sit minima sint.
  spacer();

  function spacer() {
    echo '<br />';
  }
?>

快速刷新后,我看到了各种各样的结果,例如:

Ruthie Beier
37851 Gusikowski Flat Suite 594 Port Keithmouth, NM 06110
Reprehenderit eos suscipit sit modi architecto necessitatibus. Error maiores qui vero non omnis. Quaerat mollitia dolore deserunt quia quidem beatae.

和:

Darron Hessel
657 Elijah Lock Suite 202 Nitzschemouth, AZ 11166
Culpa dolorum quidem distinctio eius necessitatibus. Mollitia ut nostrum et ut quas veniam et. Unde iure molestiae aperiam fuga voluptatibus quo.

和:

Fredy Fadel MD
53328 Eldora Isle Apt. 634 West Eleanore, CA 95798-3025
Eligendi eos laudantium eveniet ad. Qui a voluptatibus est quia voluptatem. Dolorum pariatur quaerat nulla.

Faker兑现了诺言。

Faker的默认提供程序

Faker中的所有数据生成方法都是从提供程序的实现中创建的。 这是注册Faker的默认提供程序的代码-已为您完成:

<?php
$faker = new Faker\Generator();
$faker->addProvider(new Faker\Provider\en_US\Person($faker));
$faker->addProvider(new Faker\Provider\en_US\Address($faker));
$faker->addProvider(new Faker\Provider\en_US\PhoneNumber($faker));
$faker->addProvider(new Faker\Provider\en_US\Company($faker));
$faker->addProvider(new Faker\Provider\Lorem($faker));
$faker->addProvider(new Faker\Provider\Internet($faker));

所以上面,当我向Faker请求一个address时,它在所有提供程序中搜索了匹配的方法,最终使用了Address()提供程序。

您还可以编写自己的提供程序或浏览Web上可用的Faker扩展

修饰符

Faker还提供了特殊的修饰符来帮助您进行测试,例如unique(),optional()或valid() 。 例如,您可以生成唯一的数字:

// unique() forces providers to return unique values
$values = array();
for ($i=0; $i < 10; $i++) {
  // get a random digit, but always a new one, to avoid duplicates
  $values []= $faker->unique()->randomDigit;
}
print_r($values);

这是唯一值的输出:

Array ( [0] => 7 [1] => 6 [2] => 0 [3] => 2 [4] => 5 [5] => 1 [6] => 8 [7] => 4 [8] => 9 [9] => 3 )

如果使用optional()方法,则某些数字将作为NULL返回,就像用户未在表单上输入字段一样。 注意:我无法使此方法正常工作。

使用valid() ,可以注册确定填充数据是否满足特定要求的函数,或者将在用户表单上返回错误或生成错误消息的函数。

探索提供者

Faker提供了广泛的方法来为您的应用程序生成随机数据:

  • 基础:用于随机字母,数字,已处理字符串和正则表达式的简单方法
  • Lorem Ipsum Text:随机的拉丁文字
  • 人员:人员名称
  • 地址:邮寄地址
  • 电话号码:电话号码
  • 公司:公司名称
  • 真实文本:人类写的实际文本与无意义的拉丁字符串
  • 日期和时间:随机日期和时间
  • 互联网:电子邮件,域名等。
  • 用户代理:浏览器字符串
  • 付款:信用卡和SWIFT字符串和数字
  • 颜色:颜色随机
  • 文件:文件扩展名,文件类型和文件名
  • 图片:各种填充图片的网址
  • Uuid:唯一ID
  • 条形码:各种条形码类型,例如ISBN13
  • 杂项:加密代码,国家/地区代码等。
  • 偏差:带有偏差的随机数

让我们尝试更多这些方法。

支付信息

以下代码可生成十个人,其信用卡信息和安全代码:

$faker = Faker\Factory::create();
for ($i=0;$i<10;$i++) {
  $cc = $faker->creditCardDetails;
  $cc['security']=$faker->numberBetween(199,499);
  var_dump ($cc);spacer(2);
}

这是上面代码的一些输出:

使用Faker生成付款或信用卡详细信息

图片

使用Faker图片

这是一个简单的图像生成示例:

$faker = Faker\Factory::create();
$width=320;
$height=240;
echo '<img src="'.$faker->imageUrl($width, $height).'"/>';

但是您也可以生成猫:

echo '<img src="'.$faker->imageUrl($width, $height, 'cats', true, 'Faker', true) .'"/>';
使用猫的Faker图片

猫的发电能力可能使我胜过。 我迫不及待地要进行三维打印和激活灵魂来处理类似这样的事情。

国际化数据

使用下面的代码,我创建了一个表,其中包含四列来自法国,俄罗斯,美国和中国的名称:

echo '<table>
<thead>
<th>French</th>
<th>Russian</th>
<th>English</th>
<th>Chinese</th>
</thead>
<tr><td>';
$faker = Faker\Factory::create('fr_FR'); // create a French faker
for ($i=0; $i < 10; $i++) {
  echo $faker->name;
  spacer();
}
spacer(2);
echo '</td><td>';
$faker = Faker\Factory::create('Ru_RU'); // create Russian
for ($i=0; $i < 10; $i++) {
  echo $faker->name;
  spacer();
}
spacer(2);
echo '</td><td>';
$faker = Faker\Factory::create('En_US'); // create English
for ($i=0; $i < 10; $i++) {
  echo $faker->name;
  spacer();
}
spacer(2);
echo '</td><td>';
$faker = Faker\Factory::create('zh_CN'); // create Chinese
for ($i=0; $i < 10; $i++) {
  echo $faker->name;
  spacer();
}
echo '</td></tr></table>';

这是输出:

使用Faker国际能力-四个国家/地区的名称表

创建伪造的电子邮件地址

以下示例代码可从免费提供商(例如Gmail和Yahoo)生成25个伪造的电子邮件地址:

$values = array();
for ($i=0; $i < 25; $i++) {
  // get a random digit, but also null sometimes
  $values []= $faker->freeEmail();
}
print_r($values);
exit;

这是结果输出:

使用Faker-25个免费电子邮件地址

生成XML文档

Faker提供了一个有用的XML生成示例。 但是,它要求您使用的是框架并拥有视图架构:

<?php
require_once '/path/to/Faker/src/autoload.php';
$faker = Faker\Factory::create();
?>
<?xml version="1.0" encoding="UTF-8"?>
<contacts>
<?php for ($i=0; $i < 10; $i++): ?>
  <contact firstName="<?php echo $faker->firstName ?>" lastName="<?php echo $faker->lastName ?>" email="<?php echo $faker->email ?>"/>
    <phone number="<?php echo $faker->phoneNumber ?>"/>
<?php if ($faker->boolean(25)): ?>
    <birth date="<?php echo $faker->dateTimeThisCentury->format('Y-m-d') ?>" place="<?php echo $faker->city ?>"/>
<?php endif; ?>
    <address>
      <street><?php echo $faker->streetAddress ?></street>
      <city><?php echo $faker->city ?></city>
      <postcode><?php echo $faker->postcode ?></postcode>
      <state><?php echo $faker->state ?></state>
    </address>
    <company name="<?php echo $faker->company ?>" catchPhrase="<?php echo $faker->catchPhrase ?>">
<?php if ($faker->boolean(33)): ?>
      <offer><?php echo $faker->bs ?></offer>
<?php endif; ?>
<?php if ($faker->boolean(33)): ?>
      <director name="<?php echo $faker->name ?>" />
<?php endif; ?>
    </company>
<?php if ($faker->boolean(15)): ?>
    <details>
<![CDATA[
<?php echo $faker->text(400) ?>
]]>
    </details>
<?php endif; ?>
  </contact>
<?php endfor; ?>
</contacts>

结论

我希望这对您来说是Faker的基本介绍,Faker是一个非常有用的免费开放源代码PHP库。

如果您想进一步阅读,我建议您使用Jim Nielsen的Filler Content:工具,技巧和动态示例(Envato Tuts +) ,它为应用程序设计师提供了生成数据的方法。 他建议您在设计过程中应用虚假数据来创建更真实的体验时,您可以提高效率。

如果您想知道我的下一个Envato Tuts +教程何时到达, 在Twitter上关注我@reifman检查我的讲师页面 。 目前,我正在研究两个系列,您可能会喜欢:

翻译自: https://code.tutsplus.com/tutorials/using-faker-to-generate-filler-data-for-automated-testing--cms-26824

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值