497 oxunuşlar
497 oxunuşlar

Python test automatizasyonu üçün 7 ən yaxşı ipucu və praktika

tərəfindən Pradeesh Ashokan6m2025/03/30
Read on Terminal Reader

Çox uzun; Oxumaq

Python test avtomatlaşdırılması üçün ən yaxşı proqramlaşdırma dillərindən biridir. Layihə spesifikasiyalarınıza əsasən düzgün sınaq avtomatlaşdırma çərçivəsini seçin. Vaxt problemlərini həll etmək üçün Selenium-da WebDriverWait istifadə edin.
featured image - Python test automatizasyonu üçün 7 ən yaxşı ipucu və praktika
Pradeesh Ashokan HackerNoon profile picture

Əgər qaçmısınızsa avtomatlaşdırma testi JavaScript, Node və ya başqa bir proqramlaşdırma dili ilə Python ilə nə qədər asan olduğunu başa düşəcəksiniz. Python-un təklif etdiyi kitabxanaların çoxluğu, onun sadəliyi və geniş miqyaslı istifadəsi onu test avtomatlaşdırılması üçün ən yaxşı proqramlaşdırma dillərindən birinə çevirir.


Ən yaxşı nəticələr üçün bəzi məsləhətlər və fəndləri bilmək üçün Python test avtomatlaşdırma layihələri üzərində kifayət qədər uzun müddət işləmişəm. Səmərəli Python test avtomatlaşdırılması üçün etibar edə biləcəyiniz yeddi məsləhət və təcrübəni paylaşacağam.

1. Layihənizin spesifikasiyasına əsasən düzgün sınaq avtomatlaşdırma çərçivəsini seçin.

Python özünün daxili sınaq avtomatlaşdırma çərçivəsi olan Unittest ilə gəlir. Ancaq kiçik layihələr üçün ən yaxşısıdır. Kiçikdən irimiqyaslı layihələrdə işləməyə imkan verən sınaq avtomatlaşdırma çərçivəsi istəyirsinizsə, Pytest daha yaxşı seçimdir.


Pytest, daha idarə edilə bilən və genişlənə bilən test avtomatlaşdırılması üçün test işlərinin yazılması üçün strukturlaşdırılmış və səmərəli bir yol təqdim edir. O, həmçinin ən sadə sintaksisə və ən əhatəli plagin ekosisteminə malikdir. Məsələn, paralel testin icrası üçün pytest-xdist istifadə edə bilərsiniz. Bundan əlavə, siz Unittest və ya Nose 2-də yazdığınız test işlərini Pytest-də işlədə bilərsiniz.


Əgər daha çox robot prosesinin avtomatlaşdırılması ilə məşğul olsanız ( RPA ), robot çərçivəsi daha yaxşı seçimdir. Sintaksis ilk növbədə insan dilidir, ona görə də onunla işləmək həqiqətən asandır. Veb testi üçün onu Selenium kimi digər Python test çərçivələri ilə də birləşdirə bilərsiniz.


Davranışa əsaslanan İnkişaf (BDD) tətbiq edən komandada işləyirsinizsə, Davranış ən yaxşı çərçivədir. Qeyri-texniki maraqlı tərəflərin başa düşə biləcəyi Davranış proqramında test nümunələri yazmaq çox asandır.


Hər hansı bir ünsiyyət maneəsinin qarşısını almaq üçün komandanızın istifadə etdiyi texnoloji yığına uyğun bir çərçivə seçməyi məsləhət görərdim. Ancaq solo işləyirsinizsə, Pytest ən çox yönlü və çox istifadə olunan çərçivədir.

2. Vaxt problemlərini aradan qaldırmaq üçün Selenium-da WebDriverWait istifadə edin.

Qeyd etdim ki, veb testi üçün Pytest-i Selenium ilə birləşdirə bilərsiniz. Pytest funksional sınaq üçün əla olsa da, Selenium veb avtomatlaşdırmanı tamamilə yeni səviyyəyə qaldırır. Selenium, xüsusən də WebDriver kitabxanası ilə güclü brauzer avtomatlaşdırma imkanlarına malikdir.


Selenium-da testlər keçirdiyiniz zaman, sistem elementlərin yerləşdirilməsi üzərində işlədiyi üçün müəyyən edilmiş bir müddət gözləməli olacaqsınız. Bu müddət keçdikdən sonra, deyək ki, 10 saniyə, sürücü maşını tərk edir. Gizli gözləmə ilə bağlı məsələ, deyildiyi kimi, fərqli elementlərin fərqli gözləmə müddətlərinə ehtiyacı olmasıdır.


Beləliklə, gizli gözləmələrə etibar etmək əvəzinə, elementlərin interaktiv olmasından əvvəl yerinə yetirilməli olan müəyyən şərtləri yaratmaq üçün gözlənilən_şərtlər ilə birlikdə WebDriverWait-dən istifadə edin.

 from selenium import webdriver from Selenium.webdriver.common.by import By from Selenium.webdriver.support.ui import WebDriverWait from Selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") # Wait for the element to be clickable wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "clickableElementId"))) element.click() # Perform action after the element is ready driver.quit()


Testləriniz daim uğursuz olarsa, bu, mütləq veb tətbiqində hər hansı problemin olması demək olmaya bilər. Bu, sadəcə olaraq proqram kodunda və ya UI-də bəzi dəyişikliklərə görə ola bilər. Test uğursuzluqlarından həddindən artıq sazlamanın qarşısını almaq üçün veb elementlərini dəqiq müəyyən etmək üçün unikal ID-lərdən istifadə etdiyinizə əmin olun.

3. Test funksiyalarının təkrarlanmasının qarşısını almaq üçün Pytest parametrli testindən istifadə edin.

Pytest parametrli test xüsusiyyətlərinin nə qədər vaxta qənaət etdiyini vurğulaya bilmirəm. Sınaq avtomatlaşdırılması bəzən müxtəlif məlumat dəstləri olan bir tətbiqdə eyni funksionallığın sınaqdan keçirilməsini tələb edir. Test funksiyalarını təkrarlamaq əvəzinə, sadəcə olaraq pytest.mark.parametrize istifadə edərək bir test funksiyasını işlədə bilərsiniz və o, müxtəlif parametrlərlə bir neçə dəfə təkrarlanacaq. Bunun necə göründüyü budur:


import pytest

@pytest.mark.parametrize("input, expected", [(2, 4), (3, 9), (4, 16)])

def test_square(input, expected):

assert input ** 2 == expected


Python-un daxili test avtomatlaşdırma çərçivəsi ilə parametrləşdirilmiş testi keçirə biləcəyinizlə maraqlanırsınızsa, cavab bəli - müəyyən şərtlər altında. Unittest yerli olaraq parametrləşdirilmiş testi dəstəkləmir, lakin siz bu məqsəd üçün modul əlavə edə bilərsiniz. Bunu necə etmək olar:

import unittest

from parameterized import parameterized

class TestMathOperations(unittest.TestCase):

@parameterized.expand([

("square of 2", 2, 4),

("square of 3", 3, 9),

("square of 4", 4, 16),

])

def test_square(self, name, input, expected):

self.assertEqual(input ** 2, expected)

4. Paralel sınaq ilə testin icrasını sürətləndirin.

Şəkil Mənbəsi

Test dəstinizdə nə qədər çox API, test nümunələri, verilənlər bazası və üçüncü tərəf sistemləri varsa, bir o qədər çox icra gecikmələri inkişafı ləngidə bilər. Şükürlər olsun ki, sınaq dəstinizə müdaxilə etmədən bununla məşğul olmağın bir yolu var. Python, Pytest kimi çərçivələrlə paralel test etməyə imkan verir. Birdən çox CPU istifadə edərək paralel olaraq bir neçə test keçirə bilərsiniz.


Pytest ilə paralel testi necə yerinə yetirmək olar:

pip install pytest-xdist

pytest -n 4 # Run tests on 4 CPUs


Siz həmçinin yükü idarə edən CPU-ların sayını artıra bilərsiniz, lakin bu qədər yerli infrastruktur var. ki öhdəsindən gələ bilər. Əgər CPU-larınız test paketinizi idarə etmək üçün kifayət qədər güclü deyilsə, tətbiqin müxtəlif brauzerlərdə və əməliyyat sistemlərində necə davranacağını yoxlamaq üçün Lambda kimi bulud platformalarından istifadə etməyi məsləhət görürəm.

5. Test avtomatlaşdırmanızı CI/CD boru kəmərlərinə avtomatlaşdırın.

Mənə inanın; sürətli inkişaf dövrləri ilə işləyirsinizsə, fasilə əldə etməyəcəksiniz və proqram təminatında hər hansı bir dəyişiklik olduqda kodu əl ilə tənzimləməli olacaqsınız.


Siz kod dəyişdikdə onları avtomatik yerinə yetirmək üçün Python testlərini CI/CD boru kəmərinizdə avtomatlaşdıra bilərsiniz. Bu, səhvləri tez bir zamanda müəyyən etməyə və tətbiqin təkmilləşdirilmiş versiyasını istifadə üçün geri buraxmağa imkan verir.


Python sınaq avtomatlaşdırmasını CI/CD boru kəmərlərinizə inteqrasiya etmək. Layihənizə pytest-cov əlavə edin və testlərinizi avtomatik yerinə yetirmək və hər hansı problemi qeyd etmək üçün Pytest əmrindən istifadə edin.


Addımlar:

- name: Install dependencies

run: pip install pytest pytest-cov


- name: Run tests

run: pytest --cov=my_project


Daha böyük test paketləri üzərində işləyirsinizsə, Jenkins kimi CI alətlərinə robot çərçivəsi əlavə etməli olacaqsınız. Unittest üçün əhatə dairəsi testinizi bu kimi bir boru kəmərinə inteqrasiya etməyə imkan verir;


Test:

script:

- Python -m coverage run -m unittest discover

- Python -m coverage report

6. Testləri təcrid olunmuş şəkildə həyata keçirin.

Python test avtomatlaşdırılması ilə qarşılaşa biləcəyiniz ümumi problemlərdən biri qarşılıqlı asılılıqlar səbəbindən testin pozulmasıdır. Əsasən, testiniz uğursuz olur, çünki bir testiniz digər testlərin məlumatlarına və ya mühit vəziyyətinə əsaslanır. Beləliklə, bir test dəyişdirilərsə, digər testlər dəyişikliyin səbəb olduğu zəncirvari reaksiya nəticəsində uğursuz olur. Bunu həll etmək üçün bütün testləri təcrid edin ki, hər biri digərləri ilə əlaqəsiz başlasın. Bu yolla, digər testlərdə dalğalanma effekti ilə məşğul olmadan debug edə bilərsiniz.


Pytest-də quraşdırma və sökmə məntiqindən istifadə edərək test izolyasiyasını necə təmin etmək olar;


import pytest

@pytest.fixture

def clean_environment():

# Setup: Prepare a clean state

print("Setting up a clean environment.")

yield

# Teardown: Reset environment

print("Cleaning up after the test.")


def test_example(clean_environment):

assert 2 + 2 == 4


Qeyd edək ki, Pytest qurğusu hər sınaqdan sonra istifadə etdiyiniz resursların təmizlənməsini təmin edir. Bu, sınaq yerinə yetirildikdən sonra mühiti ilkin vəziyyətinə qaytarmağa imkan verir.

7. Ən yaxşı sınaq avtomatlaşdırma təcrübələrinə sadiq qalın.

Python test avtomatlaşdırmasında daha səmərəli olmaq üçün bir neçə ən yaxşı təcrübəni vurğulayacağam;

  • Test avtomatlaşdırmasına başlamazdan əvvəl test dəstiniz üçün test ölçülərini təyin edin. Kod əhatə dairəsi, yerinə yetirilən, keçilən və ya uğursuz sınaq hallarının sayı və testin icra müddəti kimi test göstəriciləri testi izləməyə və həll edilməli olan çətinlikləri müəyyən etməyə kömək edəcək.
  • Çox böyük ölçüdə komandanızdakı hər kəs başdan sona (E2E) testini necə yazmağı bilməlidir. Beləliklə, keyfiyyət yalnız sonradan düşünülən bir şey deyil, həm də başlanğıcdan inkişaf prosesinə köklənmişdir.
  • Xarici saytlara və ya idarə edə bilməyəcəyiniz serverlərə keçidlər kimi üçüncü tərəf asılılıqlarını sınaqdan keçirməyin. Bu, testinizi potensial olaraq yavaşlata bilər və testinizin uğursuz olmasına səbəb ola biləcək kuki bannerləri və ya başqa elementlər ola bilər.
  • istifadə edin iddialar test nəticələrinizin gözlənilən nəticələrə uyğun olduğunu yoxlamaq üçün.
  • Tətbiqinizi ən son brauzer versiyalarında sınamaq və onu ictimaiyyətə təqdim etməzdən əvvəl səhvləri aşkar etmək üçün test avtomatlaşdırma alətlərinizi güncəl saxlayın.

Nəticə

Avtomatlaşdırma testi çətin ola bilər, xüsusən də həll olunmayan bir sıra səhvlərlə məşğul olarkən. Test piramidasından istifadə edərkən test avtomatlaşdırmasının daha az səhv olduğunu aşkar etdim. Burada siz E2E testlərindən əvvəl vahid və inteqrasiya testlərinə diqqət yetirirsiniz. Vurğuladığım məsləhətlər və təcrübələrlə siz CI/CD mühitində davamlı reqressiya testini səmərəli şəkildə həyata keçirə və kodu yerləşdirməzdən əvvəl dərhal rəy ala bilərsiniz.

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks