اذهب إلى المحتوى

استخدام مكتبة Faker لتوليد بيانات للاختبار في Laravel 5


محمد أحمد العيل

يُعدّ بذر قواعد البيانات إحدى الميزات الجميلة التي يقدمها Laravel؛ إلا أن إضافة تسجيلات بيانات كثيرة، الواحدة تلو الأخرى أمر مملّ ويأخذ الكثير من الوقت الثمين. تأتي مكتبة Faker لتدارك هذا الأمر.

هذا الدرس جزء من سلسلة تعلم Laravel والتي تنتهج مبدأ "أفضل وسيلة للتعلم هي الممارسة"، حيث ستكون ممارستنا عبارة عن إنشاء تطبيق ويب للتسوق مع ميزة سلة المشتريات. يتكون فهرس السلسلة من التالي:

laravel5-faker-lib.thumb.png.bbf7ed4588b

تُستخدَم Faker، وهي مكتبة PHP، لتوليد بيانات وهمية لأغراض اختبار التطبيقات. ويمكنها توليد بيانات من أنواع متعدّدة.

يغطي هذا الدرس المواضيع التالية:

  • كيفية تثبيت Faker في Laravel.
  • أساسيات استخدام Faker في Laravel.
  • بذر قواعد البيانات باستخدام Faker.

كيفية تثبيت Faker في Laravel

يأتي Laravel مضمّنا بمكتبة Faker مبدئيا ولا تحتاج لتثبيتها يدويّا. المكتبة تصبح جاهزة للاستخدام فور تثبيت Laravel. يمكن استخدام Faker لتوليد بيانات من الأنواع التالية:

  • الأعداد.
  • نصوص Lorem (نصوص لمَلء الفراغ في الصفحات).
  • بيانات الأشخاص مثل الألقاب، الأسماء، الجنس وغيرها.
  • العناوين.
  • أرقام الهواتف.
  • الشركات.
  • النصوص.
  • الوقت والزمن.
  • أسماء النطاقات، روابط URL، عناوين البريد الإلكتروني، … إلخ.
  • وكيل مستخدم User agent.
  • بطاقات الدفع الإلكتروني.
  • الألوان.
  • الملفات.
  • الصور.
  • الرموز الشريطية Barcodes.

وأنواع متفرقة أخرى.

أساسيات استخدام Faker

نستخدم في هذا الدرس مشروع Laravel الذي أنشأناه في درس استخدام AngularJS واجهةً أمامية Frontend لتطبيق Laravel 5 لتجربة عمل مكتبة Faker. يمكنك إن أردت إنشاء مشروع خاص للتجربة عبره، درس تثبيت Laravel 5 وإعداده على Windows وUbuntu يشرح الكيفية.

نفتح ملف المسارات routes.php ونضيف الشفرة التالية:

Route::get('/customers',function(){
    $faker = Faker\Factory::create();

    $limit = 10;

    for ($i = 0; $i < $limit; $i++) {
        echo $faker->name . ', Email Address: ' . $faker->unique()->email . ', Contact No' . $faker->phoneNumber . '<br>';
    }
});

ننشئ كائنا من صنف Faker بالتعليمة

$faker = Faker\Factory::create();

ثم نضع حدّا لعدد التسجيلات التي نريد إنشاءها limit$، يُستخدَم هذا الحد في الحلقة التكرارية for لإنشاء عدد التسجيلات التي نريد (عشرة في حالتنا). نستخدم كائن faker$ داخل الحلقة التكرارية لتوليد بيانات أشخاص (الاسم name، البريد الإلكتروني email ورقم الهاتف phoneNumber). بالنسبة للبريد الإلكتروني فقد اخترنا أن يكون فريدا لكل شخص (لا يوجد اثنان في الجدول لديهما نفس العنوان البريدي). ثم نعرض هذه البيانات في المتصفّح.

افتح الرابط customers/ في المتصفح ولاحظ النتيجة.

Prof. Aiden Ebert, Email Address: Katharina69@hotmail.com, Contact No398-903-1148x26227
Candido Franecki, Email Address: Carlos.Dach@Gleichner.com, Contact No1-892-092-4346x13604
Isaiah Hand, Email Address: Bode.Claudie@Dickinson.biz, Contact No1-622-989-4414x2096
Faustino Hammes, Email Address: Emmerich.Anika@Hickle.net, Contact No(466)750-0869
Mrs. Deborah Weissnat Jr., Email Address: qHoppe@gmail.com, Contact No+39(0)3577406367
Ms. Harmony Homenick I, Email Address: Crist.Makenna@Monahan.com, Contact No04666426522
Delmer Hackett DDS, Email Address: hHilpert@Buckridge.info, Contact No210.397.7833x719
Hayley Hegmann PhD, Email Address: Genoveva14@hotmail.com, Contact No(780)054-8492x5869
Jarvis Tremblay, Email Address: pLakin@gmail.com, Contact No037.786.6464
Cecelia Rice, Email Address: Willms.Darrell@gmail.com, Contact No587-993-1770

رأينا كيف تعمل Faker؛ سنرى الآن كيف نزاوج بينها وبذر قاعدة البيانات.

بذر قاعدة البيانات باستخدام Faker

ننشئ الآن جدول قاعدة بيانات عبر التهجيرات ثم نملأها ببيانات تولّدها مكتبة Faker.

ننشئ ملف التهجيرات:

php artisan make:migration customers

افتح ملف التهجيرات الذي أنشأناه للتو وعدّله ليصبح على النحو التالي:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class Customers extends Migration
{
    /**
    * Run the migrations.
    *
    * @return void
    */
    public function up()
    {
        Schema::create('customers', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('contact_number');
            $table->timestamps();
        });
    }

    /**
    * Reverse the migrations.
    *
    * @return void
    */
    public function down()
    {
        Schema::drop('customers');
    }
}

ثم ننفذ التهجير:

php artisan migrate

إن فحصت قاعدة البيانات فستجد أن جدولا جديدا باسم customers قد أضيف إلى القاعدة.

ننتقل إلى الخطوة التالية وهي إنشاء ملف للبذر:

php artisan make:seeder CustomersTableSeeder

ثم نفتح ملف البذر CustomersTableSeeder.php الذي أنشأناه للتو ونعدّل عليه ليصبح كالتالي:

<?php

use Illuminate\Database\Seeder;

class CustomersTableSeeder extends Seeder
{
    /**
    * Run the database seeds.
    *
    * @return void
    */
    public function run()
    {
        $faker = Faker\Factory::create();

        $limit = 33;

        for ($i = 0; $i < $limit; $i++) {
            DB::table('customers')->insert([ //,
                'name' => $faker->name,
                'email' => $faker->unique()->email,
                'contact_number' => $faker->phoneNumber,
            ]);
        }
    }
}

تُدرج الشفرة أعلاه 33 تسجيلة جديدة في جدول البيانات customers باستخدام البيانات التي ولّدتها مكتبة Faker.

ثم ننفذ أمر البذر:

php artisan db:seed --class=CustomersTableSeeder

يدل عدم ظهور رسائل في سطر الأوامر أن الأمر نُفّذ دون مشاكل.

إن تحققت من قاعدة البيانات فستجد أن الجدول customers يحوي الآن 33 تسجيلة.

01_faker_seed.thumb.png.f6298b0bacde20ce

لاحظ الحقول المولّدة؛ مثلا في حقل البريد الإلكتروني توجد عناوين بريدية صالحة من حيث الصيغة.

ترجمة -وبتصرّف- لمقال Laravel 5 Faker Tutorial لصاحبه Rodrick Kazembe.


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...