1. Skriptlərin Test Edilməsi Metodları
Debugging və test etmə - proqramçıların ən sevimli prosesi haqqında mühazirəmizə xoş gəlmisiniz! Əgər artıq Selenium ilə möhtəşəm bir bot hazırlamağı öyrənmisinizsə, indi onu çılğın bir robotdan itaətkar bir icraçıya çevirməyi öyrənmək zamanıdır. Belə bir bot yalnız işləmək yox, həm də bunu stabil etmək qabiliyyətinə sahib olmalıdır. Çünki heç kim istəmir ki, bot ən vacib anda "istirahət etmək" qərarına gəlsin.
Gəlin sizin skriptlərinizi test etmək üçün müxtəlif metodları müzakirə edək. Test etmə həkimə məcburi ziyarət kimidir: heç kim istəmir, amma onsuz da mümkün deyil. Hətta ən parlaq skript də möhkəmlik və etibarlılıq üçün nəzərə alınmalıdır. Yaxşı xəbər odur ki, Python-da bu işdə sizə kömək edəcək çoxlu alətlər var.
Unit-testlər
Hər şey unit-testlər ilə başlayır. Onlar kiçik isveçrə saatı kimidir, mexanizminizdəki hər dişlinin işini yoxlayır. Python-un unittest
kitabxanası unit-testlər üçün de-fakto standartdır. Əsas fikir kodunuzun ayrı-ayrı "unit"lərini və ya hissələrini izolyasiya şəklində test etməkdən ibarətdir.
import unittest
from my_selenium_script import my_function
class TestMyFunction(unittest.TestCase):
def test_success_case(self):
result = my_function("expected input")
self.assertEqual(result, "expected output")
unittest.main()
Bu sadə nümunə sizin kodunuzun fərdi funksiyalarını necə yoxlaya biləcəyinizi göstərir. Əlbəttə ki, praktikada yalnız uğur halları deyil, həmçinin müxtəlif sərhəd halları və yanlış giriş məlumatlarını da test edəcəksiniz.
İnteqrasiya testləri
Artıq hər bir "unit"ə güvənmək üçün bir əsasınız varsa, indi onların bir-biri ilə necə işlədiyini yoxlamağın vaxtıdır. İnteqrasiya testləri mükəmməl bir görüş kimi, ayrı-ayrı komponentlərin birlikdə necə işlədiyini göstərir. Burada eyni kitabxanalardan istifadə edə bilərsiniz, lakin test etməyə fərqli tərəfdən yanaşırsınız.
class TestIntegration(unittest.TestCase):
def test_full_workflow(self):
# Hər bir addım sizin alqoritminizin bir funksiyasını çağırmaqdır deyə düşünün
open_page()
fill_form()
submit_form()
self.assertTrue(check_results())
İnteqrasiya testləri daha mürəkkəb ola bilər və daha çox vaxt alar, amma onlar sistemin bir bütöv kimi işlədiyinə zəmanət verir.
2. Debug və səhvlərin düzəldilməsi
İndi test etmə haqqında danışdığımız üçün daha maraqlı bir hissəyə keçək — debug etmə. Debug — bu sizin botunuzu sərbəst fəaliyyət göstərməyə qərar verdiyi və improvizasiya etdiyi vaxtdır, siz isə onu ssenariyə qaytarmağa çalışırsınız.
Debug alətləri
Python-da debug üçün gözəl bir alət — bu pdb
-dır. O, skriptin icrasını pauzaya qoymağa və onun vəziyyətini addım-addım araşdırmağa imkan verir. Gəlin bir nümunəyə baxaq:
import pdb
def some_function(value):
pdb.set_trace() # Burada icra dayanacaq
result = value + 1
return result
some_function(3)
Bu kodu işlətdiyiniz zaman, siz interaktiv mühitə daxil olacaqsınız, burada koda addım-addım keçə, dəyişənlərin dəyərlərinə baxa, onları dəyişə və proqramın icrasını addım-addım davam etdirə bilərsiniz. Bu, skriptiniz qəribə bir şey etdikdə işinizi asanlaşdıracaq.
Səhifənin vəziyyətinin vizuallaşdırılması
Vizuallıq üçün debug zamanı hər mərhələdə səhifənin screenshot-larını saxlamaq faydalıdır. Bu, ekranın necə göründüyünü və səhvin baş verdiyi anda səhifədə hansı elementlərin olduğunu görməyə kömək edəcək.
driver.save_screenshot("page_state.png")
Səhvləri tapmaq və aradan qaldırmaq üçün strategiyalar
Təəssüf ki, heç bir debugger sizə kodda məntiqdə hansı əsas səhvin baş verdiyini göstərməyəcək. Burada strategiyalar kömək edir:
- Log yazılması: Hər yerdə log yazmaq. Kimsə müdrik deyib ki, "əgər kodda nə baş verdiyini bilmirsənsə, deməli yetərincə log yazmamısan".
logging
kitabxanasının istifadəsi kodunuzuprint()
funksiyası ilə doldurmamağa və daha çox nəzarət etməyə kömək edir. - Kodu səsli oxumaq: Bəzən problemin həlli üçün kodda nə baş verdiyini səsli oxumaq beynimiz üçün daha münasib olur. Gülməli səslənir, lakin işləyir!
- Modullara bölmə: Kodun hissələrini modullara və ya funksiyalara dəqiq bölmək. Bu, harada problem olduğunu daha asan müəyyən etməyə imkan verir.
3. Selenium skriptlərinin analizi
Etibarlı bir skript yaratmaq üçün onun müxtəlif ssenarilərdə işləməsini test etmək vacibdir. Bu cür ssenarilərdən bir neçə nümunə:
Səhifədə elementlərin olmaması
Ayıklama zamanı əmin olun ki, bütün lazımi elementlər səhifədə mövcuddur və qarşılıqlı əlaqə üçün əlçatandır. find_elements()
metodundan istifadə edin və qaytarılmış siyahının uzunluğunu yoxlayın ki, NoSuchElementException
səhvlərinin qarşısını alasınız.
elements = driver.find_elements_by_class_name("class_name")
if len(elements) == 0:
logging.warning("Elementlər tapılmadı")
else:
logging.info("Elementlər uğurla tapıldı")
Səhifənin gözlənilməz vəziyyətləri
Məsələn, fərqli yükləmə formaları və ya şərtlərdən asılı olaraq meydana çıxan fərqli elementlərlə səhifələr. Skript belə vəziyyətləri idarə etməyə hazır olmalıdır.
try:
special_offer = driver.find_element(By.ID, "special_offer")
logging.info("Xüsusi təklif tapıldı və əməliyyatlar həyata keçirilir")
except NoSuchElementException:
logging.info("Xüsusi təklif tapılmadı, davam edirik")
Səhifədə dəyişən elementlər
Test zamanı nəzərə alınmalıdır ki, eyni səhifədə elementlər dəyişə bilər (məsələn, fərqli bannerlər, reklam blokları və s.). Skripti səhifənin fərqli vəziyyətlərini nəzərə alaraq test edin.
Müxtəlif brauzerlərdə yoxlama
Müxtəlif brauzerlər səhifələri fərqli şəkildə işləyə bilər, buna görə sabitliyi təmin etmək üçün skripti bir neçə brauzerdə test etmək faydalıdır (məsələn, Chrome, Firefox, Edge). Selenium fərqli veb-drayverlər vasitəsilə müxtəlif brauzerlərdə testləri həyata keçirməyə imkan verir.
from selenium import webdriver
# Chrome-da işə salın
driver = webdriver.Chrome()
# Firefox-da işə salın
driver = webdriver.Firefox()
# Edge-də işə salın
driver = webdriver.Edge()
4. Ssenarinin testlərinin avtomatlaşdırılması
unittest
istifadə edərək testlərin yazılması
unittest
kitabxanasından istifadə edərək ssenarinizin müxtəlif hissələrini avtomatik olaraq test etmək üçün istifadə edin. Bu, hər bir elementin işləkliyinin mütəmadi olaraq yoxlanılmasını təmin edəcək.
import unittest
from selenium import webdriver
class SeleniumTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get("https://example.com")
def test_element_presence(self):
driver = self.driver
element = driver.find_element_by_id("submit_button")
self.assertIsNotNone(element, "Element səhifədə tapılmadı")
def tearDown(self):
self.driver.quit()
unittest.main()
Parametrlərlə test dəsti yaradılması
Müxtəlif elementlər və ssenarilərin kombinasiyalarını yoxlamaq üçün test dəstləri yaradın. Məsələn, formanın giriş sahələrində müxtəlif məlumat formalarını yoxlamaq üçün səhifələri test edə bilərsiniz.
Sabitlik və performans testi
- Böyük məlumat həcmlərində ssenarinin sabitliyini yoxlayın: Ssenarinin böyük məlumat həcmlərini emal etməyə və uzun müddət ərzində işləməyə uyğun olduğundan əmin olun.
- Müntəzəm testlər keçirin: Ssenarinin sabitliyini izləmək üçün testi mütəmadi olaraq keçirin, xüsusən siz işlədiyiniz sayt tez-tez yenilənirsə.
- Performansı qiymətləndirin: Uzun gözləmə müddətlərindən və yavaş elementlərdən qaçının. Hər addımın yerinə yetirilmə vaxtını ölçmək üçün taymerlərdən istifadə edin və zərurət olduqda onu optimallaşdırın.
GO TO FULL VERSION