497 skaitymai
497 skaitymai

7 geriausi patarimai ir praktika efektyviam „Python“ bandymų automatizavimui

pateikė Pradeesh Ashokan6m2025/03/30
Read on Terminal Reader

Per ilgai; Skaityti

Python yra viena geriausių programavimo kalbų, skirtų testų automatizavimui. Pasirinkite tinkamą testavimo automatizavimo sistemą pagal savo projekto specifikacijas. Norėdami išspręsti laiko nustatymo problemas, naudokite „WebDriverWait“ „Selenium“.
featured image - 7 geriausi patarimai ir praktika efektyviam „Python“ bandymų automatizavimui
Pradeesh Ashokan HackerNoon profile picture

Jei esate paleidę automation testing su JavaScript, Node, ar kai kuriomis kitomis programavimo kalbomis, jūs suprasite, kaip daug lengviau tai yra su Python. Pilnas bibliotekų skaičius Python siūlo, jo paprastumas, ir jo plataus masto naudojimas daro jį viena iš geriausių programavimo kalbų bandymų automatizavimui.

automation testingautomatizacijos testavimas


Aš dirbau su Python bandymų automatizavimo projektais pakankamai ilgai, kad žinotumėte keletą patarimų ir gudrybių, kad gautumėte geriausių rezultatų.

Aš pasidalinsiu septyniais patarimais ir praktika, kuriais galite pasikliauti efektyviam Python bandymų automatizavimui.


1. Pasirinkite tinkamą bandymų automatizavimo sistemą pagal savo projekto specifikacijas.

Pasirinkite tinkamą bandymų automatizavimo sistemą, atsižvelgiant į jūsų projekto specifikacijas.

Python ateina su savo įmontuota bandymų automatizavimo sistema, Unittest. bet tai geriausia mažiems projektams.Jei norite bandymų automatizavimo sistemos, leidžiančios dirbti su mažais – didelio masto projektais, Pytest yra geresnis pasirinkimas.


Pytest suteikia struktūrizuotą ir efektyvų būdą rašyti bandymų atvejus, kad būtų galima valdyti ir išplėsti bandymų automatizavimą. Jis taip pat turi paprasčiausią sintaksę ir išsamiausią įskiepių ekosistemą. Pavyzdžiui, galite naudoti pytest-xdist lygiagrečiam bandymų vykdymui. Be to, galite paleisti bandymų atvejus, kuriuos parašėte Unittest arba Nose 2 ant Pytest.


Jei darote daugiau robotų procesų automatizavimo (RPA), robotų rėmas yra geresnis pasirinkimas. Sintažas pirmiausia yra žmogaus kalba, todėl jį tikrai lengva dirbti. Interneto testavimui taip pat galite jį integruoti su kitomis Python bandymo sistemomis, pvz., Selenium.

RPARPA


Jei dirbate komandoje, kuri praktikuoja elgsenos sukurtą plėtrą (BDD), elgesys yra geriausia sistema.


Aš patariu jums pasirinkti sistemą, kuri atitiktų jūsų komandos naudojamą technologijų rinkinį, kad būtų išvengta jokių komunikacijos kliūčių. bet jei dirbate solo, Pytest yra labiausiai universali ir dažniausiai naudojama sistema.

Naudokite „WebDriverWait“ „Selenum“, kad įveiktumėte laiko problemas.

Paminėjau, kad galite integruoti „Pytest“ su „Selenium“ žiniatinklio testavimui. „Pytest“ puikiai tinka funkciniam testavimui, tačiau „Selenium“ žiniatinklio automatizavimui suteikia visiškai naują lygį. „Selenium“ turi galingas naršyklės automatizavimo galimybes, ypač su „WebDriver“ biblioteka.


Kai paleidžiate bandymus ant Selenium, turite laukti tam tikro apibrėžto laiko, nes sistema veikia dėl elementų lokalizavimo. Kai tas laikas praeina, tarkim, 10 sekundžių, vairuotojas nustoja veikti.


Todėl, užuot pasikliaujęs numanomais laukimais, naudokite „WebDriverWait“ kartu su „expected_conditions“, kad sukurtumėte tam tikras sąlygas, kurios turi būti įvykdytos, kol elementai taps interaktyvūs.

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() # Padarykite veiksmą po to, kai elementas yra paruoštas driver.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() # Padarykite veiksmą po to, kai elementas yra paruoštas driver.() 


Jei jūsų testai nuolat nepavyksta, tai nebūtinai reiškia, kad žiniatinklio programa turi problemų.Tai gali būti tiesiog dėl kai kurių programos kodo ar naudotojo sąsajos pokyčių.Norėdami išvengti pernelyg didelio bandymų gedimų, įsitikinkite, kad naudojate unikalius ID, kad tiksliai identifikuotumėte žiniatinklio elementus.

3. naudokite Pytest parametrinį bandymą, kad išvengtumėte dvigubų bandymų funkcijų.

Negaliu pakankamai pabrėžti, kaip laiko taupo „Pytest“ parametrizuotos testavimo funkcijos.Testų automatizavimas kartais reikalauja išbandyti tą pačią funkciją programoje su skirtingais duomenų rinkiniais.Užuot dubliuojant bandymo funkcijas, galite tiesiog paleisti vieną bandymo funkciją naudodami pytest.mark.parametrize, ir ji bus dubliuojama kelis kartus su skirtingais parametrais.Štai kaip tai atrodo:

pytest.mark.parametrize


importuoti įprastą

importuoti įprastą

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

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

def test_square(įvesti, tikėtina):

def test_square(įvadas, tikimasi):

   Atsakyti įvesties ** 2 == tikėtina

   Atsakyti įvesties ** 2 == tikėtis


Jei įdomu, ar galite paleisti parametrizuotą testavimą naudojant „Python“ įmontuotą bandymų automatizavimo sistemą, atsakymas yra taip – tam tikromis sąlygomis. „Unittest“ natūraliai nepalaiko parametrizuoto testavimo, tačiau šiuo tikslu galite pridėti modulį.

importuoti vienetą

importuoti vienetą

iš parametrizuoto importo parametrizuotas

from parametrinis importas parametrinis

Klasės Žmogiškųjų išteklių tyrimai(unittest.TestCase):

klase TestMathOperations(unittest.TestCase):„Br“

    @parameterized.expand([

    @parameterized.expand([)

       („2 kvadratas“, 2, 4),

        („2 kvadratas“, 2, 4),

       ("kvadratinis 3", 3, 9),

        ("kvadratinis 3", 3, 9),

       („4 kvadratas“, 4, 16),

       („4 kvadratas“, 4, 16),

    ]

    ] ir

   def test_square(pats, vardas, pavardė, įvestis, tikimasi):

   def test_square(pats, vardas, pavardė, įvestis, numatoma):

        savarankiškai.assertEqual(input ** 2, expected)

         savarankiškai.assertEqual(input ** 2, expected)

4. pagreitinti bandymų vykdymą naudojant lygiagrečius bandymus.

Image Source

Nuotraukos šaltinis

Kuo daugiau API, bandymų atvejų, duomenų bazių ir trečiųjų šalių sistemų jūsų bandymų rinkinyje, tuo daugiau vykdymo vėlavimų, o tai gali sulėtinti plėtrą.Laimei, yra būdas su tuo susidoroti nepakeičiant jūsų bandymų rinkinio. „Python“ leidžia lygiagrečiai bandyti naudojant sistemas, tokias kaip „Pytest“.


Štai kaip atlikti lygiagrečius bandymus su Pytest:

pip instaliuokite klaviatūrą

pip install pyptest-xdist

pytest -n 4  # Vykdyti bandymus 4 CPU

pytest -n 4  # Vykdyti bandymus 4 CPU


Jūs taip pat galite padidinti procesorių, kurie tvarko apkrovą, skaičių, tačiau yra tik tiek daug vietinės infrastruktūros , kad gali tai tvarkyti.Įrašai Automatizuokite savo bandymų automatizavimą į CI/CD vamzdynus.Patikėkite manimi; jūs neturėsite pertraukos, jei dirbate su greitaeigiais kūrimo ciklais, ir jūs turite rankiniu būdu koreguoti kodą kiekvieną kartą, kai kažkas keičiasi programinėje įrangoje.


Galite automatizuoti „Python“ testus į savo CI/CD vamzdyną, kad jie būtų automatiškai vykdomi kiekvieną kartą, kai keičiasi kodas.


Norėdami integruoti Python testavimo automatizavimą į savo CI / CD vamzdynus. Pridėkite pytest-cov į savo projektą ir naudokite Pytest komandą, kad automatiškai atliktumėte savo testus ir pažymėtumėte bet kokias problemas.

pytest-cov Įrašų kodas


Priežastys


 - pavadinimas: Įdiegti priklausomybę

  - pavadinimas: Įdiegti priklausomybę

   run: pip install pytest pytest-cov

   run: pip install pytest pytest-cov


 - vardas ir pavardė: Vykdyti bandymus

  - pavadinimas: Išbandykite

   run: įprastai --cov=my_project

   run: įdomiausias --cov=my_project


Jei dirbate su didesniais bandymų rinkiniais, į CI įrankius, tokius kaip „Jenkins“, turėtumėte pridėti robotų sistemą. „Unittest“ atveju aprėptis leidžia integruoti testą į tokį vamzdyną;


Išbandymas


 Skriptas:

   Skriptas:

   - Python -m coverage run -m unittest discover

   - Python -m coverage run -m unittest discover

   - Python -m aprėpties ataskaita

   - Python -m aprėpties ataskaita

6. atlikti bandymus izoliacijoje.

Viena iš dažniausiai pasitaikančių problemų, su kuriomis galite susidurti naudojant „Python“ bandymų automatizavimą, yra bandymų pažeidimas dėl tarpusavio priklausomybės. Iš esmės jūsų testas nepavyksta, nes jūsų vienas testas priklauso nuo kitų testų duomenų ar aplinkos būklės. Taigi, jei vienas testas yra modifikuotas, kiti testai nepavyksta dėl grandininės reakcijos, kurią sukelia pokyčiai. Norėdami tai išspręsti, izoliuokite visus testus, kad kiekvienas pradėtų nesusijęs su kitais.


Štai kaip užtikrinti bandymų izoliaciją naudojant "Pytest" nustatymų ir nusileidimo logiką;


importuoti įprastą

importuoti įprastą

@pytest.fixture

@pytest.fixture

def clean_environment():

def švarus_aplinkos():

   # Nustatymas: Paruoškite švarią būseną

   # Setup: Paruoškite švarią būseną

   print("Nustatyti švarią aplinką.")

   print("Nustatyti švarią aplinką.")

   ield

     ield

   # Teardown: Atkurti aplinką

   # Teardown: Atkurti aplinką

   print("Išvalyti po bandymo.")

   print("Išvalyti po bandymo.")


def test_example(clean_environment):

„Br“def test_example(clean_environment):

   asert 2 + 2 == 4

   Atsakyti 2 + 2 == 4


Atkreipkite dėmesį, kad Pytest įtaisas užtikrina, kad po kiekvieno bandymo naudojami ištekliai būtų išvalyti.

Tai leidžia atkurti aplinką į pradinę būseną po bandymo.

7. laikykitės geriausios bandymų automatizavimo praktikos.

Aš atkreipsiu dėmesį į keletą geriausios praktikos, kad taptų efektyvesnis Python bandymų automatizavimo;

  • Prieš pradedant bandymų automatizavimą, nustatykite savo bandymų rinkinio bandymų rodiklius. Bandymų rodikliai, pvz., kodo aprėptis, atliktų bandymų atvejų skaičius, praėjo ar nepavyko, ir bandymų vykdymo laikas padės jums sekti bandymus ir nustatyti spragas.
  • Labai plačiu mastu kiekvienas jūsų komandoje turėtų žinoti, kaip parašyti galutinį (E2E) testą. Tokiu būdu kokybė nėra tik po apmąstymo, bet įsišaknijusi į vystymosi procesą nuo pat pradžių.
  • Nepatikrinkite trečiųjų šalių priklausomybių, pvz., nuorodų į išorines svetaines ar serverius, kurių negalite kontroliuoti. Tai gali potencialiai sulPrieš pradedant bandymų automatizavimą, nustatykite savo bandymų rinkinio bandymų rodiklius.Testų rodikliai, pvz., kodo aprėptis, atliktų, išlaikytų ar nesėkmingų bandymų atvejų skaičius ir bandymų vykdymo laikas padės jums sekti bandymus ir nustatyti kliūtis.
  • Dideliu mastu kiekvienas jūsų komandoje turėtų žinoti, kaip parašyti E2E testą.Tokiu būdu kokybė yra ne tik apgalvota, bet įsišaknijęs į plėtros procesą nuo pat pradžių.
  • Nekontroliuokite trečiųjų šalių priklausomybių, pvz., nuorodų į išorines svetaines ar serverius, kurių negalite kontroliuoti.Tai gali sulėtinti jūsų testą ir gali būti slapukų baneriai ar kai kurie kiti elementai, dėl kurių jūsų testas gali žlugti.
  • Naudokite teiginius patikrinti, ar jūsų testo rezultatai atitinka laukiamus rezultatus.
  • teiginiai teiginiai
  • Laikykite savo bandymų automatizavimo įrankius atnaujintus, kad galėtumėte išbandyti savo programą naujausiose naršyklės versijose ir sugauti klaidas, kol ji bus paskelbta visuomenei.
  • Išvados

    Automatizavimo testavimas gali būti sudėtingas, ypač kai susiduriama su iš pažiūros neišsprendžiamų klaidų serija.Aš atradau, kad bandymų automatizavimas yra mažiau klaidingas, kai naudojama bandymų piramidė.Čia jūs sutelkiate dėmesį į vieneto ir integracijos bandymus prieš E2E bandymus.Naudodami patarimus ir praktiką, kurią pabrėžiau, galite efektyviai atlikti nuolatinį regresijos bandymą CI / CD aplinkoje ir gauti nedelsiant atsiliepimus prieš diegiant kodą.

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks