414 lekti
414 lekti

7 Pi bon Konsèy ak Praktik pou Efikas Python Tès Otomasyon

pa Pradeesh Ashokan6m2025/03/30
Read on Terminal Reader

Twò lontan; Pou li

Python se youn nan pi bon langaj pwogramasyon pou automatisation tès yo. Chwazi bon fondasyon automatisation tès la ki baze sou espesifikasyon pwojè ou a. Sèvi ak WebDriverWait nan Selenyòm pou bat pwoblèm distribisyon.
featured image - 7 Pi bon Konsèy ak Praktik pou Efikas Python Tès Otomasyon
Pradeesh Ashokan HackerNoon profile picture

Si ou te kouri tès automatisation ak JavaScript, Node, oswa kèk lòt langaj pwogramasyon, ou pral reyalize ki jan li pi fasil ak Python. Kantite bibliyotèk Python ofri, senplisite li yo ak itilizasyon gwo echèl li fè li youn nan pi bon langaj pwogramasyon pou automatisation tès yo.


Mwen te travay sou pwojè automatisation tès Python ase lontan pou konnen kèk konsèy ak ke trik nouvèl pou pi bon rezilta yo. Mwen pral pataje sèt konsèy ak pratik ou ka depann sou yo pou automatisation efikas tès Python.

1. Chwazi bon fondasyon automatisation tès la ki baze sou espesifikasyon pwojè ou a.

Python vini ak fondasyon automatisation tès entegre li yo, Unittest. Men, li pi bon pou ti pwojè. Si ou vle yon kad automatisation tès ki pèmèt ou travay sou ti pwojè gwo-echèl, Pytest se yon pi bon opsyon.


Pytest bay yon fason estriktire ak efikas pou ekri ka tès yo pou plis automatisation tès jere ak évolutive. Li gen tou sentaks ki pi senp ak ekosistèm plugin ki pi konplè. Pou egzanp, ou ka itilize pytest-xdist pou ekzekisyon tès paralèl. Anplis de sa, ou ka kouri ka tès ou te ekri nan Unittest oswa Nose 2 sou Pytest.


Si ou fè plis otomatik otomatik otomatik ( RPA ), fondasyon an robo se opsyon ki pi bon. Sentaks la se prensipalman lang moun, kidonk li vrèman fasil pou travay avèk yo. Pou tès entènèt, ou ka entegre li ak lòt kad tès Python, tankou Selenyòm.


Si w ap travay nan yon ekip ki pratike Devlopman Konpòtman Konpòtman (BDD), Behave se pi bon fondasyon an. Ekri ka tès nan Behave ke moun ki pa teknik yo ka konprann se super fasil.


Mwen ta konseye w chwazi yon kad ki matche ak pile teknoloji ekip ou a itilize pou evite nenpòt baryè kominikasyon. Men, si w ap travay solo, Pytest se fondasyon ki pi versatile ak souvan itilize.

2. Sèvi ak WebDriverWait nan Selenyòm pou bat pwoblèm distribisyon.

Mwen mansyone ke ou ka entegre Pytest ak Selenyòm pou tès entènèt. Pandan ke Pytest se gwo pou tès fonksyonèl, Selenium pran automatisation entènèt nan yon nivo tout nouvo. Selenium gen kapasite pwisan automatisation navigatè, espesyalman ak bibliyotèk WebDriver li yo.


Lè ou fè tès sou Selenyòm, ou oblije rete tann kèk kantite tan defini pandan sistèm nan ap travay sou lokalize eleman yo. Yon fwa tan sa a pase, di 10 segonn, chofè a kite. Pwoblèm nan ak datant implicite, jan li rele, se ke eleman diferan bezwen tan datant diferan.


Kidonk, olye pou w konte sou datant implicite, sèvi ak WebDriverWait ansanm ak expected_conditions pou kreye sèten kondisyon ki dwe ranpli anvan eleman vin entèaktif.

 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()


Si tès ou yo toujou echwe, li ka pa nesesèman vle di aplikasyon entènèt la gen nenpòt pwoblèm. Li ta ka tou senpleman akòz kèk chanjman nan kòd app a oswa UI. Pou evite twòp debogaj nan echèk tès yo, asire w ke ou itilize idantite inik pou idantifye eleman entènèt yo avèk presizyon.

3. Sèvi ak tès Pytest paramèt pou evite kopi fonksyon tès yo.

Mwen pa ka ensiste ase ki jan Pytest paramètrize karakteristik tès yo ekonomize tan yo. Otomatik tès pafwa mande pou teste menm fonksyonalite a nan yon app ak diferan seri done. Olye pou yo kopi fonksyon tès yo, ou ka tou senpleman kouri yon sèl fonksyon tès lè l sèvi avèk pytest.mark.parametrize , epi li pral kopi plizyè fwa ak paramèt diferan. Men sa ki sanble:


import pytest

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

def test_square(input, expected):

assert input ** 2 == expected


Si w ap mande si ou ka fè tès paramèt ak kad automatisation tès entegre Python a, repons lan se wi—nan sèten kondisyon. Unittest pa sipòte tès paramèt, men ou ka ajoute yon modil pou objektif sa a. Men ki jan fè sa:

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. Akselere ekzekisyon tès ak tès paralèl.

Sous Imaj

Plis API, ka tès, baz done, ak sistèm twazyèm pati nan suite tès ou a, plis ekzekisyon lag, sa ki ka ralanti devlopman. Erezman, gen yon fason pou fè fas ak sa san yo pa manyen suite tès ou a. Python pèmèt tès paralèl ak kad tankou Pytest. Ou ka fè plizyè tès nan paralèl lè l sèvi avèk plizyè CPU.


Men ki jan yo egzekite tès paralèl ak Pytest:

pip install pytest-xdist

pytest -n 4 # Run tests on 4 CPUs


Ou kapab tou ogmante kantite CPU ki okipe chay la, men gen sèlman anpil enfrastrikti lokal yo sa ka okipe li. Si CPU ou yo pa ase pwisan pou okipe suite tès ou a, mwen rekòmande pou itilize platfòm nwaj tankou Lambda pou teste kijan aplikasyon an ap konpòte sou diferan navigatè ak OS yo.

5. Otomatize automatisation tès ou a nan tuyaux CI/CD.

Mete konfyans mwen; ou pa pral pran yon repo si w ap travay ak sik devlopman rapid, epi ou dwe manyèlman ajiste kòd chak fwa yon bagay chanje nan lojisyèl.


Ou ka otomatize tès Python nan tiyo CI/CD ou pou egzekite yo otomatikman chak fwa kòd la chanje. Sa a pèmèt ou byen vit idantifye ensèk epi lage vèsyon amelyore aplikasyon an tounen pou itilize.


Pou entegre automatisation tès Python nan tiyo CI/CD ou yo. Ajoute pytest-cov nan pwojè ou a epi sèvi ak yon lòd Pytest pou egzekite tès ou yo otomatikman epi siveye nenpòt pwoblèm.


Etap:

- name: Install dependencies

run: pip install pytest pytest-cov


- name: Run tests

run: pytest --cov=my_project


Si w ap travay sou pi gwo swit tès, ou ta dwe ajoute yon fondasyon robo nan zouti CI tankou Jenkins. Pou Unittest, pwoteksyon pèmèt ou entegre tès ou a nan yon tiyo tankou sa a;


Tès:

script:

- Python -m coverage run -m unittest discover

- Python -m coverage report

6. Fè tès yo nan izolasyon.

Youn nan pwoblèm komen ou ka rankontre ak automatisation tès Python se rupture tès akòz entèdepandans. Fondamantalman, tès ou a echwe paske yon sèl tès ou a depann sou done oswa kondisyon anviwònman lòt tès yo. Se konsa, si yon tès vin modifye, lòt tès yo echwe kòm yon rezilta nan reyaksyon chèn chanjman an lakòz. Pou rezoud sa a, izole tout tès yo pou chak kòmanse pa konekte ak lòt yo. Nan fason sa a, ou ka debogaj san yo pa fè fas ak efè rid li yo sou lòt tès yo.


Men ki jan yo asire izolasyon tès la lè l sèvi avèk konfigirasyon ak lojik teardown sou Pytest;


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


Remake byen ke aparèy Pytest la asire ke resous ou itilize yo netwaye apre chak tès. Sa a pèmèt ou retabli anviwònman an nan eta orijinal li apre tès la te egzekite.

7. kole ak pi bon tès automatisation pratik.

Mwen pral mete aksan sou yon koup nan pi bon pratik yo vin pi efikas nan automatisation tès Python;

  • Anvan ou kòmanse automatisation tès la, mete mezi tès pou tès ou a. Paramèt tès yo tankou kouvèti kòd, kantite ka tès egzekite, pase oswa echwe, ak tan egzekisyon tès la pral ede w swiv tès yo ak idantifye kou boutèy yo atake.
  • Nan yon gwo limit, tout moun nan ekip ou a ta dwe konnen ki jan yo ekri yon tès bout-a-fen (E2E). Nan fason sa a, bon jan kalite a se pa sèlman yon apre panse, men se anrasine nan pwosesis devlopman an depi nan kòmansman an.
  • Pa teste depandans twazyèm pati tankou lyen ki mennen nan sit ekstèn oswa sèvè ke ou pa ka kontwole. Li ta ka potansyèlman ralanti tès ou a, epi ta ka gen banyè bonbon oswa kèk lòt eleman ki ka lakòz tès ou a echwe.
  • Sèvi ak afimasyon pou verifye ke rezilta tès ou yo matche ak rezilta yo espere.
  • Kenbe zouti automatisation tès ou yo ajou pou teste aplikasyon w lan sou dènye vèsyon navigatè yo epi trape ensèk anvan li rive piblik la.

Konklizyon

Tès automatisation ka difisil, sitou lè w ap fè fas ak yon seri erè ki sanble pa ka rezoud. Mwen te dekouvri ke automatisation tès la se mwens buggy lè w ap itilize piramid tès la. Isit la, ou konsantre sou tès inite ak entegrasyon anvan tès E2E. Avèk konsèy ak pratik mwen te mete aksan sou yo, ou ka efikasman kouri kontinyèl tès regresyon nan yon anviwònman CI/CD epi jwenn fidbak imedya anvan ou deplwaye yon kòd.

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks