Modul 8 · Python for SDETs

Data-driven
testlər

Bir test gövdəsi, çoxlu hal — cədvəldən, JSON faylından və ya CSV-dən

parametrize JSON & CSV oxunaqlı id-lər verilən ≠ məntiq
AI with Rufat
Halları koddan ayır

Bir test gövdəsi, hallar cədvəli

hallar siyahısı
onun üzərində @parametrize
N müstəqil, etiketli test
🧩Sətir əlavə et, test al — gövdə heç vaxt dəyişmir. Hər hal müstəqil işləyir (və uğursuz olur), ona görə bir səhv giriş qalanları gizlətmir.
AI with Rufat
JSON faylından verilən
tests/data/login_cases.json
[
{ "email": "[email protected]",
"password": "customer123", "expected": 200 },
{ "email": "[email protected]",
"password": "x", "expected": 401 }
]
CASES = json.loads(
(Path(__file__).parent / "data"
/ "login_cases.json").read_text()
)
@pytest.mark.parametrize("case", CASES)
def test_login(case): …
📂Modul səviyyəsində yüklə — parametrize import zamanı işləyir, ona görə verilən onda mövcud olmalıdır. (JSON faylı = // şərh yox.)
AI with Rufat
CSV: hər dəyər bir sətirdir
# tests/data/categories.csv
category,present
electronics,true
nonexistent,false
rows = csv.DictReader(f)
present = row["present"] == "true"
🔤csv.DictReader sətir başına bir dict verir, amma hər dəyər sətirdir — ona görə "false" truthy-dir!
🔁Tipləri özün çevir: == "true" müqayisə et və ya int(...)-a bük — reader bunu sənin üçün etməyəcək.
AI with Rufat
Hər hala oxunaqlı ad ver
id yox — qapalı
test_login[case0]
test_login[case1]
test_login[case2]
verilədən id-lər
ids=[f"{c['email']}->{c['expected']}"
for c in CASES]
test_login[[email protected]>200]
test_login[[email protected]>401]
AI with Rufat
🧮

Hallar
verilən kimi

Bir gövdə, çoxlu sətir — JSON və ya CSV-dən, hər biri adlandırılıb ki, uğursuzluqlar hala işarə etsin

🧪
Məşq
JSON-dan login matrisi: valid→200, wrong→401, empty→400
🔤
CSV tipləri
categories.csv-ni oxu və sətirləri çevirməyi unutma
➡️
Modul 9
Hesabat & dəst quruluşu — HTML hesabatları, marker-lər, qovluqlar
AI with Rufat
← / → · space