Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Testing
Code

Pemrograman Dengan Yii2: Pengujian Otomatis Dengan Codeception

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called How to Program With Yii2.
Programming With Yii2: Security
How to Program With Yii2: ActiveRecord

Indonesian (Bahasa Indonesia) translation by Ilham Saputra (you can also view the original English article)

Final product image
What You'll Be Creating

Jika Anda bertanya, "Apa itu Yii?" lihat tutorial saya sebelumnya, Pengantar Kerangka Yii, yang mengulas manfaat Yii dan menyertakan ikhtisar tentang apa yang baru di Yii 2.0, dirilis pada Oktober 2014.

Dalam seri Programming With Yii2 ini, saya membimbing pembaca dalam menggunakan Kerangka Yii2 untuk PHP. Dalam tutorial ini, saya akan mengeksplorasi pengujian otomatis menggunakan Codeception, yang terintegrasi dengan kerangka pengembangan Yii2.

Diakui, pengalaman saya menulis tes dengan kode saya langka. Saya sering menjadi bagian dari proyek solo atau proyek kecil dengan sumber daya terbatas. Selama waktu saya di Microsoft, kami memiliki tim uji yang berbeda yang melakukan ini. Tapi sejujurnya, ini sepertinya tipikal kamu juga, kan? Programmer suka kode, mereka tidak menulis tes—setidaknya programmer sekolah lama tidak.

Codeception adalah perpustakaan inovatif yang secara harfiah bertujuan untuk membuat tes menulis menjadi menyenangkan dan mudah. Dan, saya akan mengatakan mereka berhasil pada tingkat yang wajar. Ketika saya mencelupkan kaki saya ke dalam air "Lake Codeception", itu sebagian besar mudah dan menyenangkan. Namun, ketika saya mulai masuk lebih dalam, saya mengalami masalah konfigurasi dengan Yii dan modul spesifik yang digunakan dalam seri ini. Pasti ada tantangan. Secara keseluruhan, saya terkesan dan melihat manfaat dari belajar lebih banyak.

Sederhananya, Codeception dan integrasinya dengan Yii membuat saya ingin menulis lebih banyak tes, yang pertama bagi saya. Saya menduga Anda akan memiliki pengalaman serupa.

Sedikit pengingat sebelum memulai, saya berpartisipasi dalam rangkaian komentar di bawah ini. Saya terutama tertarik jika Anda memiliki pemikiran tambahan atau ingin menyarankan topik untuk tutorial selanjutnya. Jika Anda memiliki pertanyaan atau saran topik, silakan posting di bawah ini. Anda juga dapat menghubungi saya di Twitter @reifman secara langsung.

Mulai

Memasang Codeception

Untuk membimbing saya, saya menggunakan dokumentasi Pengaturan Lingkungan Pengujian Yii. Saya mulai dengan instalasi codeception global sehingga saya bisa menggunakannya dari proyek apa pun.

Anda juga perlu mensyaratkan codeception/specify:

Dan codeception/verify:

Selanjutnya, ada baiknya untuk menyiapkan alias untuk codecept menggunakan direktori penggubah global Anda:

Ini mengatur alias:

Yii juga mengharuskan Anda menginstal Faker, yang menghasilkan data pengujian palsu untuk aplikasi Anda:

Menyiapkan Codeception Dengan Aplikasi Anda

Codecept bootstrap menginisialisasi codeception untuk aplikasi Yii Anda, membuat berbagai file konfigurasi untuk membuat dan menjalankan pengujian terhadap aplikasi Anda. Kami menggunakan aplikasi Hello dari seri ini untuk tutorial ini. Lihat tautan GitHub di halaman ini untuk mendapatkan kodenya.

Untuk beberapa alasan, saya juga berakhir dengan duplikat pengujian direktori di hello/tests; hanya dengan menghapus hello/tests/functional, hello/tests/acceptance, dan hello/tests/unit membersihkan semuanya. Semua tes hidup di hello/tests/codeception/*.

Berbagai Jenis Tes yang Berbeda

Codeception difokuskan pada tiga jenis tes:

  1. Pengujian unit memverifikasi bahwa unit tertentu bekerja, seperti pengujian lengkap dari semua metode model Anda.
  2. Pengujian fungsional memverifikasi skenario aplikasi umum seolah-olah pengguna bertindak mereka, tetapi menggunakan emulasi web browser.
  3. Pengujian penerimaan identik dengan pengujian fungsional tetapi sebenarnya menjalankan pengujian melalui browser web.

Dan ini mendukung tiga jenis format pengujian untuk kode pengujian Anda:

  1. Cept: ini file tes skenario tunggal yang paling sederhana
  2. Cest: format berorientasi objek untuk menjalankan beberapa pengujian dalam satu file
  3. Tes: tes yang ditulis pada PHPUnit, kerangka pengujian PHP

Mari kita mulai dengan contoh tes penerimaan menggunakan format cept:

Pengujian Penerimaan

Kami akan menggunakan contoh uji Welcome Codeception pertama.

Ini menghasilkan tests/acceptance/WelcomeCept.php, yang akan kita edit di bawah ini.

Karena tes penerimaan memerlukan browser, kita harus mengedit /tests/acceptance.suite dalam proyek kami untuk menyediakan URL pengembangan kami, http://localhost:8888/hello:

Sekarang, kami siap untuk memodifikasi tes awal dalam tests/acceptance/WelcomeCept.php. Saya sedang menulis tes yang memuat halaman depan untuk memastikan bahwa itu berfungsi seperti yang diharapkan.

Tes Codeception memiliki konsep aktor, dalam hal ini, $I = new AcceptanceTester().

Berikut ini cara mendeskripsikan aktor dalam dokumentasi Codeception:

Kami memiliki UnitTester, yang menjalankan fungsi dan menguji kode. Kami juga memiliki FunctionalTester, penguji berkualifikasi, yang menguji aplikasi secara keseluruhan, dengan pengetahuan tentang internal. Dan AcceptanceTester, pengguna yang bekerja dengan aplikasi kami melalui antarmuka yang kami sediakan.

Anda dapat mengomentari tes Anda dengan kode, seperti $I->wantTo ('perform a certain test') atau 'ensure that the frontpage works'.

Dalam pengujian saya, saya ingin melihat $I->see teks untuk 'Congratulations!' dan 'Yii-powered':

Inilah halaman beranda Hello saat ini:

Programming with Yii - The Hello Home Page

Selanjutnya, mari kita jalankan tes, cukup codecept run:

Seperti yang Anda lihat, pengujian kami berlalu, dan kode untuk memverifikasi fungsi ini cukup mudah dibaca dan sederhana.

Catatan tentang Tes Default Yii

Untuk melangkah lebih jauh, saya mulai menggunakan uji default Yii. Pada titik ini, saya mengalami sejumlah masalah konfigurasi—sebagian besar karena saya menggunakan modul pengguna yii2 pada seri ini. Lainnya disebabkan oleh bug kecil dengan Yii, yang timnya telah cepat menanggapi dan memperbaiki ketika dilaporkan di GitHub; dalam beberapa kasus, masalah telah diperbaiki dalam rilis berikutnya dari pohon yii2-dasar.

Juga, karena saya memperbarui pohon yii2-dasar untuk seri ini, saya harus membuat perubahan kecil pada beberapa tes default.

Berikut ini contoh keluaran untuk menjalankan tes penerimaan standar setelah saya melakukan beberapa penyesuaian kecil:

Pengujian Fungsional

Agar tes berfungsi berfungsi, saya perlu menjalankan instance server bawaan Yii. Saya belum tahu tentang komponen ini sampai Yii Alex Markov menyebutkannya dalam pertukaran GitHub kami.

Saya membuat perubahan kecil pada tes fungsional di /tests/codeception/functional, sebagian besar untuk mencari string teks yang diperbarui khusus saya, yaitu "Login atau kata sandi tidak valid" menggantikan default Yii. Berikut ini lihat di LoginCept.php:

Pada dasarnya, kode mengakses model LoginForm dan menguji berbagai metode menggunakan layanan Yii.

Berikut ini kode pengujian /tests/codeception_pages/LoginPage.php yang memanfaatkannya (saya juga harus memodifikasinya untuk perubahan yang telah kami buat pada seri):

Anda dapat melihat bahwa kami mengkodekan aktor untuk fillFields dan click tombol untuk bidang formulir kami yang diperbarui.

Ketika memecahkan masalah integrasi Codeception saya dengan Yii, saya merasa berguna untuk menjalankan tes ini dalam mode verbose:

Berikut output verbose dari tes fungsional Login—di MacOS Terminal, PASSED dan FAILED berwarna merah atau merah muda dan terbalik untuk visibilitas:

Secara keseluruhan, ada sedikit belajar untuk memulai dengan Codeception dan benar kode tes Anda. Namun hasilnya mengesankan dan membantu.

Pengujian Unit

Pada dasarnya, tes unit adalah pengujian terprogram dari infrastruktur dan model kami. Idealnya, kami akan menulis tes untuk setiap metode dan variasi penggunaan model kami.

Sayangnya, saya tidak bisa mendapatkan tes unit untuk bekerja di dalam pohon kami karena bug Yii kecil yang belum dirilis atau masalah konfigurasi antara Codeception dan yii2-user yang kami integrasikan dalam Cara Memprogram Dengan Yii2: Mengintegrasikan Pendaftaran Pengguna.

Saya akan membahas pengujian unit lagi di seri Startup kami yang tidak menggunakan pengguna yii2 melainkan menggunakan integrasi pengguna bawaan Yii Advanced tree.

Mari kita lihat beberapa contoh dari pohon Yii2-aplikasi-dasar.

Menguji Email Formulir Kontak

hello/tests/codeception/unit/models/ContactFormTest.php mengirim email melalui penggunaan model terprogram:

Saya tidak berhasil menyelesaikan tes ini karena ada bug kecil di Yii yang belum diperbarui (atau setidaknya saya tidak dapat menemukan kode yang diperbarui). Tetesan saya dari basis kode Yii adalah penamaan email keluar dengan cap tanggal dan kode di atas sedang mencari nama file yang tetap. Jadi, selalu gagal. Namun, berguna untuk melihat bagaimana pengujian terprogram dapat menggunakan model untuk menghasilkan file dan kemudian mencari file itu dan memvalidasi kontennya untuk memverifikasi bahwa kode berfungsi.

Pengujian Login

Mari kita lihat hello/tests/codeception/unit/models/LoginFormTest.php. Sekali lagi, penggunaan saya dari pengguna-yii membuatnya terlalu sulit untuk diintegrasikan pada saat menulis tutorial ini; Namun, kita dapat melihat pendekatan konseptual untuk menguji unit fungsi model pengguna.

Berikut testLoginCorrect(), yang terlihat untuk melihat apakah proses masuk berhasil dengan kata sandi yang benar:

Ia menggunakan model LoginForm untuk login secara terprogram pada pengguna, dan kemudian secara terprogram terlihat untuk melihat apakah pengguna Yii saat ini sekarang tidak lagi menjadi tamu.

Apa Berikutnya?

Saya harap Anda menikmati belajar tentang Codeception dan integrasinya dengan Yii, meskipun ada beberapa hambatan yang saya hadapi. Instalasi standar yii2-basic hari ini harus berkinerja lebih baik.

Jika Anda ingin membaca lebih lanjut tentang memutuskan kapan dan apa yang harus diuji dan mengapa, saya sarankan membaca Ikhtisar Pengujian Yii. Pasti ada lebih banyak untuk belajar tentang Codeception dan menulis tes yang lebih lengkap.

Tonton tutorial mendatang dalam seri Pemrograman Dengan Yii2 kami karena kami terus menyelam ke dalam berbagai aspek kerangka. Jika Anda ingin tahu kapan tutorial Yii2 berikutnya tiba, ikuti saya @reifman di Twitter atau periksa halaman instruktur saya.

Anda mungkin juga ingin memeriksa seri Membangun Startup Anda Dengan PHP kami, yang menggunakan template canggih Yii2 saat kami membangun aplikasi dunia nyata. Bahkan, Anda bisa mencoba aplikasi startup, Meeting Planner, hari ini.

Link Terkait

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.