Chromium Chronicle #17: Kombinasi Pengujian Browser

Episode 17: oleh Toby Huang di San Francisco, CA (Januari 2021)
Episode sebelumnya

Pengujian browser adalah bentuk pengujian otomatis untuk kode chromium yang lebih end-to-end daripada pengujian unit. Pengujian browser membuat instance browser dan menguji berbagai elemen UI, bukan hanya menguji fungsionalitas input/output murni seperti pada pengujian unit. Pengujian otomatis terintegrasi penting untuk menyimulasikan pengalaman pengguna secara menyeluruh. Saat menulis pengujian browser, sering kali Anda ingin melakukan tindakan penyiapan secara terprogram yang dapat dilakukan pengguna secara manual. Untuk membantu Anda melakukannya, mixin adalah serangkaian alat untuk melakukan penyiapan pengujian browser non-trivial dengan cara yang dapat digunakan kembali.

Contoh mixin yang berguna:

  • GuestUserMixin untuk menguji mode samaran
  • UserPolicyMixin untuk meniru kebijakan pengguna dari server
  • FakeGaiaMixin untuk respons tiruan dari server GAIA

Anda dapat membuat mixin kustom sendiri untuk berbagai tujuan.

Cuplikan di bawah ini login sebagai pengguna tamu untuk pengujian Anda. Anda harus memastikan fitur Anda berfungsi dalam mode samaran.

Anjuran
class MyGuestBrowserTestClass : public MixinBasedInProcessBrowserTest {
 private:
  GuestSessionMixin guest_session_mixin_{&mixin_host_};
};

LoggedInUserMixin adalah cara yang mudah untuk login sebagai pengguna Family Link untuk pengujian Anda. Jika fitur Anda memengaruhi hal yang terkait dengan pengawasan anak, Anda harus menguji fitur Anda untuk pengguna yang diawasi. Kemungkinan bug adalah lupa bahwa mode samaran pengguna turunan dinonaktifkan atau tidak dapat menginstal ekstensi tanpa persetujuan orang tua. LoggedInUserMixin adalah mixin senyawa yang terdiri dari mixin lainnya.

Anjuran
class MyChildBrowserTestClass : public MixinBasedInProcessBrowserTest {
 protected:
  void SetUpOnMainThread() override {
    MixinBasedInProcessBrowserTest::SetUpOnMainThread();
    logged_in_user_mixin_.LogInUser();
  }

 private:
  LoggedInUserMixin logged_in_user_mixin_{&mixin_host_,
                                          LoggedInUserMixin::LogInType::kChild,
                                          embedded_test_server(), this};
};

Salah satu manfaat utama mixin adalah menggunakan komposisi, bukan pewarisan, dan menghindari masalah pewarisan beberapa berlian. Mewarisi dari lebih dari satu class dasar pengujian akan menyebabkan masalah diamond, tetapi Anda dapat memadupadankan mixin sekaligus menghindari masalah ini. Menggunakan mixin tidak sepenuhnya menghilangkan pewarisan karena class pengujian browser masih perlu mewarisi dari MixinBasedInProcessBrowserTest, tetapi untungnya class dasar tersebut bersifat umum dan ringan.

Referensi