Menguji Situs Web Drupal Anda menjadi lebih mudah dengan Behat (Tutorial komprehensif)
Diterbitkan: 2020-09-08“Tidak ada di dunia ini yang lebih kuat dari sebuah cerita yang bagus”, kata raja kecerdasan dan kebijaksanaan, Tyrion Lannister.
Kekuatan cerita dan komunikasi yang baik memberdayakan pengiriman perangkat lunak yang kolaboratif dan efisien. Berkembang dari metodologi tangkas, teknologi Behavior Driven Development (BDD) memanfaatkan kekuatan ini sepenuhnya untuk mengotomatisasi proses pengujian. Behat adalah salah satu teknologi BDD yang memungkinkan pengujian otomatis menggunakan "bahasa di mana-mana". Mari pelajari lebih lanjut tentang Behat, Mink, Gherkin dan bagaimana menerapkannya di Drupal.

Apa itu Behat?
Behat adalah framework PHP open source yang digunakan untuk mengotomatisasi pengujian dengan memanfaatkan Behavior Driven Development (BDD). Pendekatan BDD memastikan pengiriman perangkat lunak yang berkualitas dengan berfokus pada komunikasi berkelanjutan dan cerita teks sederhana. Dengan BDD, penguji membuat kasus uji dalam bahasa yang dapat dibaca manusia. Karena itu, mudah untuk mendapatkan pemahaman yang sama dari seluruh tim karena semua orang, mulai dari pemilik produk hingga pengembang, dapat memahami dan mendapatkan umpan balik berkelanjutan tentang skenario saat ini.
Apa itu Gherkin?
Bahasa yang digunakan oleh alat Behat adalah Gherkin, yang merupakan bahasa yang dapat dibaca bisnis dan khusus domain. Gherkin juga berfungsi sebagai dokumentasi hidup dan laporan dapat dibuat untuk mendokumentasikan setiap uji coba. Bahasa berbasis spasi putih sederhana ini menggunakan kata-kata bahasa sederhana sebagai kata kunci. Lekukan (menggunakan spasi/tab) dan akhiran baris menentukan struktur untuk kasus uji. Meskipun menulis dan memahami bahasa itu mudah, hasil akhirnya harus fokus pada memungkinkan kolaborasi, efisiensi, otomatisasi, dan keterlacakan yang lebih baik. Kasus uji harus ditulis secara intuitif, fokus pada elemen penting, hindari memeriksa catatan duplikat dan menggunakan tata bahasa yang baik.
Apa itu Mink?
Mink adalah pengontrol browser sumber terbuka yang mensimulasikan skenario pengujian dengan aplikasi web. Setelah kasus uji ditulis, itu perlu dieksekusi dan meniru tindakan pengguna. Dengan Mink, Anda dapat menggunakan skenario pengujian yang sama dan menjalankannya di berbagai emulator browser seperti Goutte, Selenium, Chrome, Zombie, dan lainnya. Saat menginstal ekstensi Behat Drupal, Anda akan melihat ketergantungan pada Mink jadi pastikan Anda juga menginstalnya.
Instalasi dan implementasi Behat di Drupal
Cara resmi untuk menginstal Behat di proyek Drupal Anda adalah melalui Komposer. Tidak hanya dapat menginstal Behat untuk Anda, tetapi juga dapat dengan mudah memperbarui Anda ke versi terbaru nanti ketika salah satu keluar.
• Di dalam folder proyek, jalankan perintah:
$ komposer membutuhkan behat/behat
• Atau di dalam file composer.json Anda, tambahkan pernyataan yang dibutuhkan
"memerlukan": {
"behat/behat": "^3.0.0",
“phpunit/phpunit”: “^5.0.0”
}
• Selanjutnya, jalankan perintah composer install di terminal.
• Setelah selesai, Anda juga akan melihat direktori baru bin / dengan file Behat di dalamnya. Ini adalah Behat yang dapat dieksekusi dan Anda akan menggunakannya untuk menjalankan pengujian dan mendapatkan informasi debug.
• Selanjutnya, buat file bernama behat.yml di dalam folder root proyek. Saat Behat berjalan, ia mencari file behat.yml , yang digunakan untuk konfigurasinya.
bawaan:
suite:
bawaan:
konteks:
- Drupal\DrupalExtension\Context\DrupalContext
ekstensi:
Behat\MinkExtension:
asam urat: ~
base_url: http://example.org/ # Ganti dengan URL situs Anda
Drupal\DrupalExtension:
kotak hitam: ~Untuk menginisialisasi proyek, jalankan perintah:
vendor/bin/behat –init
Ini membuat fitur / folder dan file konteks default bootstrap/FeatureContext.php di dalam fitur / folder.
Menulis Cerita dan Menjalankan tes dengan Behat
Tujuan kami adalah untuk menggambarkan cerita dengan cara yang paling efektif. Cerita-cerita tersebut ditulis dalam bahasa yang dapat dibaca manusia, Gherkin, dengan ekstensi . fitur di bawah fitur / direktori.
Bayangkan Anda perlu menguji apakah Anda dapat menambahkan konten ke tipe konten halaman Dasar di situs Anda dengan sukses atau tidak. Untuk melakukan itu, Anda harus memiliki akses ke halaman untuk mengisi kolom dan menyimpannya sebagai administrator.
Jadi, mari kita tulis cerita pertama kita:
Fitur: Periksa halaman dasar CT Untuk membuat halaman Sebagai admin Saya ingin mengakses /node/add/page Agar saya bisa membuat halaman Skenario: CT Halaman Dasar Mengingat saya masuk sebagai pengguna dengan peran "administrator" Ketika saya pergi ke "/ node/add/page" Dan saya memasukkan "Judul halaman dasar" untuk "edit-title-0-value" Ketika saya menekan "edit-kirim" Maka saya akan melihat "Halaman dasar Judul halaman dasar telah dibuat"
File ini dapat diberi nama basic_page.feature . Setiap fitur dapat memiliki banyak skenario, yang menggambarkan perilaku spesifik fitur tersebut. Setiap skenario akan memiliki bagian:
• Diberikan - merinci status awal sistem
• Kapan - termasuk tindakan yang dilakukan pengguna
• Kemudian - menjelaskan apa yang dilihat pengguna setelah mengambil tindakan
• Dan - untuk menjaga konektivitas dalam skenario.
Tidak ada banyak perbedaan antara Kemudian, Dan, dan Tetapi . Kata-kata ini tersedia untuk membuat skenario Anda alami dan mudah dibaca.

Semua file fitur dapat dijalankan oleh vendor/bin/behat . Jika Anda ingin menjalankan file fitur tertentu, jalankan vendor/bin/behat features/basic_page.feature. Ada juga cara untuk menjalankan satu skenario hanya dengan menambahkan nomor baris tempat skenario ditentukan: vendor/bin/behat features/basic_page.feature:11 .
Ada perintah seperti vendor/bin/behat -dl yang menyediakan semua sintaks pernyataan yang digunakan dalam skenario dan vendor/bin/behat -di menyediakan sintaks bersama dengan contoh.
Cara menulis file Fitur
Behat menjalankan permintaan curl terhadap URL di situs web Anda, yang membuat proses pengujian cukup cepat, tetapi juga membuat Behat kehilangan kemampuan untuk menguji fitur yang memerlukan Javascript. Jadi, untuk menguji fitur kita hanya perlu menambahkan tag @javascript sebelum setiap skenario yang membutuhkan Javascript, seperti ini: Fitur: Periksa halaman dasar CT Untuk membuat halaman Sebagai admin Saya ingin mengakses /node/add/page Agar saya bisa membuat halaman @api @javascript Skenario: CT Halaman Dasar Mengingat saya masuk sebagai pengguna dengan peran "administrator" Ketika saya pergi ke "/ node/add/page" Dan saya memasukkan "Judul halaman dasar" untuk "edit-title-0-value" Dan saya mengisi wysiwyg pada field "edit-body-0-value" dengan "Basic page content" Ketika saya menekan "edit-kirim" Maka saya akan melihat "Halaman dasar Judul halaman dasar telah dibuat"
Untuk menguji ini, jalankan vendor/bin/behat . Ini akan menunjukkan kepada Anda langkah-langkah yang tidak ditentukan dalam skenario karena skenario harus dipetakan ke suatu fungsi.

Anda dapat menyalin dan menempelkan cuplikan kode ke file konteks FeatureContext.php atau menjalankan vendor/bin/behat --dry-run --append-snippets .
Kemudian Anda dapat menulis definisi untuk fungsi di FeatureContext.php seperti yang ditunjukkan:
<?php
gunakan Behat\Mink\Exception\ExpectationException;
gunakan Drupal\DrupalExtension\Context\RawDrupalContext;
/**
* Mendefinisikan fitur aplikasi dari konteks tertentu.
*/
class FeatureContext memperluas RawDrupalContext {
/**
* Konteks cerpelai.
*
* @var Drupal\DrupalExtension\Context\MinkContext
*/
dilindungi $minkContext;
/**
* Menginisialisasi konteks.
*
* Setiap skenario mendapatkan instance konteksnya sendiri.
* Anda juga dapat memberikan argumen sewenang-wenang ke
* konstruktor konteks melalui behat.yml.
*/
fungsi publik __construct() {
}
/**
* Isi wysiwyg pada field.
*
* @Lalu saya mengisi wysiwyg pada field :locator dengan :value
*/
fungsi publik iFillInWysiwygOnFieldWith($locator, $value) {
$el = $this->getSession()->getPage()->findField($locator);
jika (kosong($el)) {
throw new ExpectationException('Could not find WYSIWYG with locator: ' . $locator, $this->getSession());
}
$fieldId = $el->getAttribute('id');
if (kosong($fieldId)) {
throw new Exception('Could not find an id for field with locator: ' . $locator);
}
$ini->getSession()
->executeScript("CKEDITOR.instances[\"$fieldId\"].setData(\"$value\");");
}
}Sekarang, jalankan perintah vendor/bin/behat dan semua skenario yang ditulis harus lulus. Fungsi JS yang ditentukan akan memetakan pernyataan skenario “ Dan saya mengisi wysiwyg di bidang "edit-body-0-value" dengan "Konten halaman dasar ".
