Advertisement
  1. Code
  2. Web Development

Dasar pengujian dengan Symfony 2 Crawler fungsional

by
Read Time:12 minsLanguages:

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

Pengujian aplikasi web Anda adalah salah satu hal terbaik yang dapat Anda lakukan untuk memastikan kesehatan, keselamatan, dan keamanan, baik untuk aplikasi dan aplikasi Anda pengunjung. Symfony 2 menawarkan suite pengujian integrasi yang lengkap yang dapat Anda gunakan untuk memastikan bahwa aplikasi Anda berjalan seperti yang Anda harapkan. Hari ini kita akan melihat bagaimana kita dapat menggunakan Symfony 2 dan PHPUnit, kerangka pengujian yang mempekerjakan, untuk menulis tes fungsional dasar menggunakan Crawler.

Instalasi

Sebelum kita dapat mulai jenis pengujian, mari kita setup proyek kami dengan men-download kerangka Symfony 2, mengkonfigurasi dan kemudian juga download PHPUnit.

Instalasi Symfony 2

Cara terbaik untuk men-download Symfony 2 adalah dengan menggunakan komposer. Jika Anda belum tahu apa yang komposer itu, pastikan untuk checkout beberapa awesome Tuts + artikel dan kursus itu, mereka akan membawa Anda sampai dengan kecepatan cepat.

Kita akan pertama ingin membuka Terminal atau antarmuka baris perintah kami sehingga kami dapat mengeluarkan beberapa perintah komposer. Sekali di Terminal Anda, mengubah direktori ke webroot pengembangan lokal Anda. Bagi saya, di OS X, ini akan menjadi direktori ~/Sites saya:

Sekali dalam direktori yang tepat, kita sekarang dapat menggunakan komposer untuk membuat sebuah proyek Symfony 2 baru yang akan men-download dan menginstal kerangka ditambah salah satu dari dependensi.

Perintah ini memberitahu komposer untuk membuat sebuah proyek baru yang menggunakan kerangka Symfony 2 di nama direktori baru merangkak, dan kemudian kami juga sedang menentukan versi yang tepat untuk men-download, versi ~ 2.5. Jika ini adalah pertama kali Anda mengunduh kerangka, ini mungkin memerlukan waktu karena ada banyak perpustakaan didownload untuk semua vendor. Sehingga Anda mungkin ingin mengambil istirahat sebentar dan kembali dalam beberapa menit.

Setelah download selesai, Terminal Anda harus sekarang akan menampilkan wizard interaktif yang akan membantu Anda setup konfigurasi. Sudah sangat diri jelas, hanya masukkan kredensial Anda sendiri atau mengambil default seperti yang saya lakukan:

Configuring CrawlerConfiguring CrawlerConfiguring Crawler

Setelah memasukkan informasi konfigurasi Anda, Symfony 2 download, diinstal dan siap untuk digunakan. Sekarang kita hanya perlu untuk mendapatkan PHPUnit sehingga kita dapat menguji kode kita.

Instalasi PHPUnit

Untuk men-download PHPUnit kita dapat menggunakan wget perintah di Terminal kami untuk mengambil berkas .phar atau hanya men-download dari situs web mereka, itu terserah kepada Anda:

Dengan .phar download, sekarang kita perlu untuk menyesuaikan izin yang dan memindahkannya ke lokasi mana Terminal atau baris perintah dan PHP kami akan memiliki akses ke sana. Pada mesin saya menggunakan OS X, saya pindah ini ke direktori /usr/local/bin saya. Saya juga mengganti nama file harus phpunit hanya sehingga saya tidak perlu khawatir tentang ekstensi ketika mencoba untuk menjalankan tes, menyelamatkan saya sedikit waktu:

Kita sekarang harus dapat memverifikasi bahwa PHPUnit dipasang dan dapat diakses melalui Terminal dengan menjalankan perintah phpunit. Anda harus melihat sesuatu seperti ini:

Running PHPUnitRunning PHPUnitRunning PHPUnit

Menciptakan bundel merangkak

Sekarang kita perlu bundel untuk menahan aplikasi kita dan menguji kode. Mari kita membuat satu menggunakan Symfony 2 konsol, dari dalam Terminal kami:

Di sini, kita terlebih dahulu mengubah direktori ke kami merangkak proyek dan kemudian menggunakan konsol untuk menghasilkan seikat baru. Kita juga menspesifikasi bundel ini Vendor dan nama bundel, dipisahkan dengan sebuah slash (/). Terakhir, kita mengatakan itu menggunakan YAML sebagai format untuk konfigurasi kami. Sekarang Anda dapat menggunakan format apa pun Anda akan seperti jika Anda tidak ingin menggunakan YAML dan Anda juga bisa nama bundel Anda namun Anda suka, asalkan Anda pertama kali memberinya nama Penjual dan mengakhiri nama bundel dengan akhiran bundel.

Setelah menjalankan perintah di atas, kita lagi mendapatkan seorang penyihir yang bagus untuk membantu lengkap instalasi bundel. Hanya memukul masukkan untuk setiap prompt untuk mengambil default seperti ini membuat seluruh proses bagus dan sederhana dan menghaluskan keluar masalah jalan dengan meletakkan file di lokasi kustom. Berikut adalah screenshot dari wizard bundel saya:

Creating the Crawling BundleCreating the Crawling BundleCreating the Crawling Bundle

Bagaimana menjalankan tes Anda

OK, kita punya Symfony 2, PHPUnit, dan kami bundel; Saya pikir kita siap untuk sekarang belajar bagaimana untuk menjalankan tes PHPUnit kami bersama Symfony. Sebenarnya benar-benar mudah, hanya mengubah direktori ke proyek Anda merangkak dan mengeluarkan phpunit app - c / perintah untuk menjalankan semua tes aplikasi Anda. Anda harus mendapatkan hasil sebagai berikut dalam Terminal:

Running PHPUnit TestsRunning PHPUnit TestsRunning PHPUnit Tests

Ketika kami dihasilkan bundel kami itu juga dihasilkan sedikit kode contoh bagi kita. Ujian yang Anda lihat berlari di atas adalah bagian dari kode sampel. Anda dapat melihat bahwa kita memiliki hijau bar, membiarkan kami tahu bahwa kami tes berlalu. Sekarang kanan di atas waktu: 1,97 detik, kami juga memiliki titik tunggal yang menunjukkan kepada kita bahwa hanya satu tes berlari. Di bar hijau kami memiliki status kita OK juga bagaimana banyak tes dan pernyataan-pernyataan itu berlari.

Jadi dengan menjalankan perintah ini satu kita tahu bahwa aplikasi Symfony 2 kami terinstal, berjalan dengan baik, dan diuji!

Membuat Controller, Template, & rute

Kita sekarang perlu beberapa aplikasi sebenarnya kode yang kita dapat menguji.

Controller

Mari kita mulai dengan menciptakan sebuah file kelas controller baru dan aksi controller. Dalam proyek Anda merangkak, di bawah src/Crawling/FtestingBundle/Controller, buat sebuah file baru yang bernama CrawlingController.php dan masukkan berikut ke dalamnya:

Dalam file ini kita hanya mendefinisikan struktur kelas controller dasar kami, memberikan namespace yang tepat dan termasuk orang tua kelas Controller diperlukan.

Tindakan Controller

Dalam kelas kami, mari kita menentukan tindakan sederhana controller kita dua. Mereka akan hanya membuat dua halaman yang berbeda: Halaman rumah dan halaman lain:

Template

Sekarang kita perlu membuat file template untuk tindakan controller ini. Di bawah src/Crawling/Ftesting/sumber daya/pemandangan, buat sebuah direktori baru yang bernama Crawling terus file template CrawlingController kami. Di dalam, pertama membuat home.html.twig file, dengan HTML berikut di dalamnya:

Ini hanya berisi beberapa dasar HTML dan link ke halaman lain.

Sekarang juga pergi ke depan dan membuat other.html.twig file, dengan HTML ini di dalam:

Rute

Akhirnya, untuk kode aplikasi kami, mari kita menentukan rute untuk ini dua halaman. Buka src/Crawling/FtestingBundle/Resources/config/routing.yml dan masukkan dalam dua rute berikut, di bawah jalur dihasilkan default yang datang dengan file rute kami:

Di sini saya mendefinisikan dua jalur, satu untuk setiap tindakan controller kita. Kita mulai dengan nama rute, yang dapat kita gunakan dalam link, dll... dan kemudian kita menentukan path rute yang dengan URI untuk mengakses halaman dalam browser, dan kemudian kita menceritakannya controller yang itu harus peta juga.

Sekarang ingat dengan YAML Anda tidak ingin menggunakan tab apapun, selalu menggunakan ruang atau rute Anda tidak akan bekerja!

Sehingga, dengan hanya dua halaman, bahkan dengan bagaimana dasar dan statis mereka, kita masih bisa belajar banyak tentang bagaimana menggunakan Symfony 2 Crawler untuk menguji bahwa seluruh spektrum memiliki controller, template, rute, dan link bekerja sebagai suatu keseluruhan (tes fungsional) , juga sebagai memastikan halaman kami menampilkan struktur HTML yang benar.

Menulis tes fungsional

Sekarang kita siap untuk mulai belajar bagaimana menulis tes fungsional menggunakan Crawler. Pertama, kami akan membuat file tes.

Membuat File tes kami

Semua tes Anda di Symfony 2, PHPUnit tes disimpan bundel Anda tes Controller direktori controller harus controller sendiri menguji file bernama setelah kelas controller yang itu adalah pengujian. Karena kita memiliki CrawlingController, kita perlu membuat file CrawlingControllerTest.php dalam src/Crawling/FtestingBundle/tes/Controller, dengan definisi kelas berikut:

Di sini kita namespace kami menguji dan kemudian termasuk dalam kelas induk WebTestCase memberi kita PHPUnit kami pengujian fungsionalitas. Kelas eksperimen kami bernama sama seperti nama file kami dan kami memperluas WebTestCase parent class sehingga kita mewarisi fiturnya.

Sekarang mari kita menciptakan metode uji untuk menahan kami pernyataan yang kami akan membuat untuk menguji halaman rumah kami. Dalam kelas eksperimen kami, mari kita membuat metode berikut:

Kapan saja Anda menciptakan metode pengujian menggunakan PHPUnit di Symfony 2 kita selalu awalan nama metode kami dengan tes kata. Anda dapat memberikan nama metode sendiri nama apapun yang Anda ingin, meskipun Konvensi adalah nama itu setelah action controller yang Anda menguji. Jadi di sini, saya menamakannya tambang testHome untuk mengikuti konvensi itu.

Klien

Sekarang dalam metode pengujian kami kita perlu cara untuk mensimulasikan browser sehingga kami dapat mengeluarkan permintaan HTTP untuk salah satu rute kami dan menguji bahwa semuanya bekerja seperti kita mengharapkan hal itu. Untuk melakukan hal ini kita akan menciptakan sebuah objek klien dengan memanggil metode statis createClient():

Kita sekarang dapat menggunakan objek $client ini untuk membuat permintaan HTTP dan mulai menggunakan Crawler.

Crawler

Crawler adalah inti dari pengujian fungsional di Symfony 2 dan memungkinkan kita untuk melintasi dan mengumpulkan informasi mengenai halaman aplikasi web kami, serta melakukan tindakan seperti mengklik link atau mengirimkan formulir. Mari kita menetapkan objek Crawler kami dengan membuat permintaan HTTP menggunakan klien. Tambahkan berikut tepat di bawah objek $client, metode testHome Anda:

Ini akan mengembalikan sebuah objek Crawler untuk menguji halaman rumah kami. Ini akan baik mari kita tahu bahwa ada halaman kami, ia memiliki HTML benar dan format dan bahwa controller, template, dan rute semua bekerja sebagai satu unit.

Pengujian menuju & ayat

Untuk memulai pengujian fungsional kami, kami ingin menegaskan bahwa halaman rumah kami berisi judul yang tepat dengan konten yang tepat itu. Kami menggunakan objek $crawler dan dengan berbagai metode untuk melakukannya. Metode ini semua akan kembali lagi objek Crawler kami yang berisi respon halaman diuji sebenarnya. Kita kemudian akan menguji respon ini untuk memastikan semuanya seperti yang diharapkan.

Tambahkan kode berikut untuk metode testHome Anda:

Kita mulai dengan memanggil metode filter() kami $crawler objek untuk menyaring respon halaman dan pilih semua elemen h1. Kita kemudian dapat rantai pada panggilan metode lain untuk menyaring pilihan kami turun lebih jauh. Di sini saya menggunakan metode eq() yang menerima posisi indeks unsur h1-kami ingin untuk memilih. Aku memilih untuk memilih indeks 0, yang pertama judul. Akhirnya, saya rantai teks metode panggilan, yang akan kembali konten teks ini elemen HTML dan menyimpan hasilnya ke variabel $heading.

Setelah penyaringan elemen h1 yang kita inginkan untuk menguji, kita sekarang perlu untuk menegaskan bahwa kita memiliki unsur yang benar. Kita melakukan ini menggunakan metode assertEquals() yang menerima sebagai argumen pertama nilai kami berharap judul untuk memiliki, dan sebagai argumen kedua, nilai aktual respon kembali, yang kami $heading sendiri. Dengan melakukan ini kita akan tahu bahwa kita berada pada laman yang benar, jika konten yang cocok dengan apa yang kami harapkan hal itu terjadi.

Menjalankan tes judul

Jadi dengan hanya empat baris kode PHP, kita akan dapat menguji controller rumah kami, template, dan rute. Mari kita jalankan pengujian kami untuk memastikan melewati. Di Terminal Anda, dari dalam proyek Symfony Anda merangkak, jalankan phpunit - c app /. Anda harus melihat berikut:

Running the Heading TestRunning the Heading TestRunning the Heading Test

Di sini kita sekarang memiliki dua tes dan dua pernyataan, semua yang lewat! Sekarang Anda dapat menguji untuk satu paragraf di bawah judul dalam cara yang sama, tapi kali ini kita akan menggunakan first(), metode, seperti ini:

Jika Anda jalankan kembali tes Anda, kami sekarang memiliki tiga pernyataan lewat. Kerja yang bagus!

Pengujian mengklik Link

Sekarang mari kita coba menguji proses mengklik ini link halaman lain. Ini harus membawa kami ke halaman lain dan menampilkan konten yang tepat tidak juga. Masukkan kode berikut ke metode testHome Anda:

Kita mulai dengan menyaring halaman rumah kami oleh tag. Kami menggunakan: metode filter contains() untuk menyaring Tag oleh konten mereka sehingga kita pastikan untuk memilih link yang benar. Kita kemudian hanya jaringan pada metode first() untuk mengambil yang pertama dan memanggil metode link() di atasnya untuk menciptakan objek link sehingga kita dapat mensimulasikan mengkliknya menggunakan $client kami.

Sekarang bahwa kita memiliki sebuah objek $link, kita perlu klik itu, memanggil metode click() objek $client dan lulus dalam objek $link untuk itu dan menyimpan tanggapan kembali ke variabel $otherPage. Ini adalah seperti objek Crawler lain, metode klik kembali tanggapan. Sangat mudah!

Dan kemudian akhirnya, kita hanya menegaskan bahwa teks judul $otherPage kami sama dengan apa yang kita harapkan itu untuk menggunakan metode assertEquals(). Jika itu adalah, kita tahu bahwa link kami bekerja!

Menjalankan tes Anda satu terakhir kali!

Mari kita sekarang menjalankan pengujian kami satu waktu akhir untuk memastikan bahwa link kami bekerja dengan benar dan bahwa kita berada di halaman yang tepat setelah mengklik itu. Berikut adalah hasil saya Terminal:

Run Your Tests One Last TimeRun Your Tests One Last TimeRun Your Tests One Last Time

Kami memiliki dua tes dan pernyataan-pernyataan empat, semua yang lewat. App lengkap!

Kesimpulan

Dan hanya itu. Kami telah diuji bahwa kami controller, controller tindakan, template, dan rute semua bekerja sama dan kita tahu bahwa HTML dan konten untuk setiap elemen yang menampilkan dengan benar pada halaman, serta bahwa kami link, link ke lokasi yang tepat. Pekerjaan dilakukan dengan baik.

Saya sekarang mendorong Anda untuk mencoba apa yang telah Anda pelajari dengan menguji halaman lainnya, menambahkan lebih banyak HTML atau link untuk itu, dan umumnya hanya mendapatkan merasa untuk menggunakan Crawler untuk memastikan halaman Anda bekerja seperti yang diharapkan.

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.