Pola untuk penguji. Proksi (alternatif)

Sebelum itu


Hai Saya Dima dan saya tidak tahu polanya. Sedangkan untuk tester, bukan untuk mengatakan bahwa itu bermasalah. Bagaimana dengan automator ..? Baiklah, jujur ​​saja, Anda bisa hidup juga.

Dari ruang obrolan, konferensi, dan komunikasi dengan kolega, jelas: pola utama - PageObject - dipelajari, apa lagi yang dibutuhkan?

Dan di sini ada paragraf besar pemikiran tentang mengapa kita tidak benar-benar menggunakan pola desain: apakah kita tidak mengenal mereka, atau apakah itu baik tanpa mereka? Ada juga pendalaman dalam sejarah bahwa pola bukan untuk Anda, tetapi selama beberapa dekade terbukti pengetahuan dan teknik, argumen untuk dan menyebutkan kawan-kawan terkenal yang menentang.

Tapi, pada akhirnya, mengetahui polanya pasti tidak akan menyakitkan.

Jadi, sama sekali tidak mendesak Anda untuk memutar templat di mana-mana ke dalam kode, saya mulai menerbitkan serangkaian artikel tentang pola.

Lebih banyak tentang format dan mari kita pergi


Artikel / buku / video kursus tentang pola itu sendiri cukup baik. Dan saya yakin Anda dapat dengan mudah menemukan sumber daya dengan penjelasan yang kompeten, contoh tentang YP, email favorit Anda, dll.

Tugas artikel ini dan selanjutnya adalah berbicara tentang pola kepada mereka yang sudah bekerja dengan kode, tetapi tidak memiliki dasar teori yang baik. Jadi artikel ini mungkin bagi saya di tempat pertama.

Ya, karena saya sendiri seorang penguji, dan bahkan di lingkaran teman-teman saya ada banyak yang sama, ceritanya akan cenderung ke arah otomatisasi pengujian.

Beberapa pola tampak aneh dan tidak terlalu berguna. Dan dengan beberapa, sebaliknya, Anda akan menemukan bahwa Anda telah menerapkan sesuatu seperti ini untuk waktu yang lama, Anda hanya tidak tahu bahwa itu disebut itu.
Bagaimanapun, saya harap Anda menemukan sesuatu yang berguna untuk diri Anda sendiri.

Dan ya, saya akan sangat senang atas kritik membangun dalam komentar.

Di sini

  • untuk diriku sendiri - bilang
  • apa yang akan diberitahukan
  • mengapa - diberitahu
  • untuk siapa dan bagaimana - diceritakan

Anda bisa mulai.



Proxy - Proxy - Deputi


Teori (sedikit)


Pola proxy (dalam edisi Rusia, Deputi ). Idenya adalah memberikan untuk bekerja bukan objek nyata, tetapi substitusi yang menggunakan metode objek + logika kita, jika kita menambahkan satu. Itu saja.

Bagaimana cara melakukannya:

1. Buat antarmuka dengan metode publik dari objek yang ingin kita ganti
2. Buat kelas itu
- mengimplementasikan antarmuka ini
- Memiliki akses ke objek asli untuk memanggil metode-metodenya
3. Tambahkan logika Anda ke metode kelas yang dibuat

Berlatih


Dalam praktiknya, itu harus lebih jelas.

Dano: Kami memiliki WebDriver. Dan dia memiliki metode findElements (oleh);

Tugas: Saya benar-benar perlu mencatat berapa banyak elemen yang ditemukan oleh pemilih.
Setiap kali saya memanggil metode

driver.findElements(By.cssSelector(".item")); 

Saya ingin melihat catatan di log - berapa banyak elemen yang ditemukan

Solusi 1. Di dahi. Apa yang ada di sana: Saya menggunakannya.
Kami hanya menerima dan, dengan setiap panggilan, tulis berapa banyak yang ditemukan:

 List<WebElement> items = driver.findElements(By.cssSelector(".item")); logger.info("Found {} items", items.size()); 

Opsinya normal, sementara panggilan semacam itu, well, katakanlah, 7. Meskipun kelemahan dari pendekatan ini sudah jelas bagi siapa saja yang memiliki setidaknya satu kali "sedikit mengubah kode mereka".

Solusi 2. Kami menggunakan proxy.
WebDriver adalah antarmuka. Metode dinyatakan, tetapi tidak ada implementasi. Implementasi termasuk ChromeWebDriver, FirefoxWebDriver, dll.

Kami, dalam pengujian, tidak harus bekerja dengan kelas khusus untuk chrome atau safari. Kelas hanya perlu mengimplementasikan antarmuka WebDriver. Kami akan melakukan ini:

  1. Kami membuat antarmuka dengan metode publik dari objek yang ingin kami ganti
    Dalam contoh kami, antarmuka seperti itu sudah ada - WebDriver.
  2. Buat kelas itu
    - mengimplementasikan antarmuka ini
    - Memiliki akses ke objek asli untuk memanggil metode-metodenya
     public class LoggerWebDriver implements WebDriver{ private WebDriver driver; public void get(String s) { } public List<WebElement> findElements(By by) { return null; } public WebElement findElement(By by) { return null; } //     } 
  3. Tambahkan logika Anda ke metode kelas yang dibuat
     public class LoggerWebDriver implements WebDriver { private WebDriver driver; private final Logger logger = LogManager.getLogger(LoggerWebDriver.class); LoggerWebDriver() { //    . // , ()     this.driver = new ChromeDriver(); } public void get(String var1) { driver.get(var1); } public List<WebElement> findElements(By var1) { List<WebElement> items = driver.findElements(var1); logger.info("Selector {}. Found {} elements", var1.toString(), items.size()); return items; } public WebElement findElement(By var1) { return driver.findElement(var1); } //     } 

Apa yang terjadi

Ditambahkan ke kelas

 private WebDriver driver; 

Ini adalah objek yang sama yang ingin kita ganti. Ini adalah metodenya yang akan kita panggil lebih lanjut.

Sekarang, Anda dapat melihat, misalnya, pada metode

 public void get(String var1) { driver.get(var1); } 

Semua yang dilakukan metode ini adalah panggilan get () pada driver sebenarnya.

Dan inilah metodenya

 public List<WebElement> findElements(By var1) { List<WebElement> items = driver.findElements(var1); logger.info("Selector {}. Found {} elements", var1.toString(), items.size()); return items; } 

Kami telah berkembang sesuai dengan tugas kami.

Hanya itu yang dapat Anda gunakan dalam tes:

 WebDriver driver = new LoggerWebDriver(); driver.get("http://google.com"); List<WebElement> items = driver.findElements(By.cssSelector("a")); // => Selector By.cssSelector: a. Found 48 elements 



Di sini Polanya bagus jika Anda perlu menutup log, caching, inisialisasi malas, kontrol akses ke metode. Secara umum, jika Anda menulis kode dan Anda benar-benar ingin memiliki semacam interaksi dengan fitur Anda, salah satu opsi adalah proxy.

Sekarang kita tahu satu pola lagi, izinkan saya mengingatkan Anda bahwa ketika palu ada di tangan Anda, segala sesuatu di sekitar kita tampaknya paku. Ingatlah itu.

Source: https://habr.com/ru/post/id414253/


All Articles