Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Analisis mendalam penggunaan lanjutan dan teknik rangka kerja Pytest

Analisis mendalam penggunaan lanjutan dan teknik rangka kerja Pytest

WBOY
WBOYasal
2024-01-13 10:32:17731semak imbas

Analisis mendalam penggunaan lanjutan dan teknik rangka kerja Pytest

Penjelasan terperinci tentang penggunaan dan teknik lanjutan rangka kerja Pytest

Pengenalan:

Pytest ialah rangka kerja ujian Python yang berkuasa dan mudah digunakan Ia menyediakan fungsi yang kaya dan fleksibiliti untuk mengatur, menjalankan dan mengurus ujian dengan mudah kes. Selain fungsi ujian asas, Pytest juga menyediakan beberapa penggunaan dan teknik lanjutan untuk membantu pembangun menulis dan mengurus kod ujian dengan lebih baik. Artikel ini akan memperkenalkan secara terperinci beberapa penggunaan dan teknik lanjutan rangka kerja Pytest, dan memberikan contoh kod khusus.

1. Gunakan pemalam Pytest untuk mengembangkan fungsi:

Pytest menyediakan banyak pemalam yang boleh mengembangkan fungsi rangka kerja, seperti memahami liputan kod, menjana laporan ujian HTML dan menyepadukan alatan lain. Salah satu pemalam yang paling biasa digunakan ialah pytest-cov, yang boleh membantu kami menilai liputan ujian. Memasang dan menggunakan pemalam pytest-cov adalah sangat mudah, cuma laksanakan arahan berikut:

pip install pytest-cov

Apabila melaksanakan pytest dalam direktori kod ujian, gunakan pilihan --cov untuk menjana laporan liputan ujian:

pytest --cov=your_module tests/

Selain itu , Pytest juga menyokong pemalam lain , seperti pytest-html, pytest-xdist, pytest-rerunfailures, dll. Anda boleh memilih pemalam yang sesuai mengikut keperluan projek.

2. Ujian berparameter:

Pengujian berparameter ialah ciri penting rangka kerja Pytest Ia boleh menjalankan berbilang kes ujian serupa dengan hanya menambahkan @pytest.mark pada parameter fungsi ujian atau kelas ujian . Contohnya, jika kami menulis fungsi ujian yang mengira jumlah dua nombor, kami boleh menggunakan ujian berparameter untuk menjalankan berbilang kes ujian:

import pytest

@pytest.mark.parametrize("a, b, expected", [
    (1, 2, 3),
    (0, 0, 0),
    (-1, 1, 0)
])
def test_addition(a, b, expected):
    assert a + b == expected

Dalam kod di atas, kami menggunakan penghias @pytest.mark.parametrize untuk mentakrifkan tiga Ujian kes menguji input berbeza dan output dijangka masing-masing. Apabila menjalankan fungsi ujian ini, Pytest akan menjalankan ketiga-tiga kes ujian ini secara automatik dan memaparkan keputusan yang sedang dijalankan.

3. Maklumat kegagalan tersuai:

Apabila kes ujian gagal, Pytest akan mengeluarkan maklumat kegagalan lalai, termasuk fail, fungsi dan nombor baris tempat kes ujian berada. Kadangkala maklumat lalai ini mungkin tidak mencukupi untuk membantu kami mencari masalah. Dalam Pytest, kami boleh memberikan maklumat ralat yang lebih berharga dengan menyesuaikan maklumat kegagalan. Contohnya:

import pytest

def test_division():
    dividend = 10
    divisor = 0
    expected = ValueError
    
    with pytest.raises(expected) as excinfo:
        result = dividend / divisor
    
    assert str(excinfo.value) == "division by zero"

Dalam kod di atas, kami menguji operasi pembahagian Apabila pembahagi ialah 0, kami menjangkakan untuk menimbulkan pengecualian ValueError, dan kami berharap untuk mengeluarkan mesej ralat tersuai "divisyen dengan sifar" apabila ujian gagal. Dengan menggunakan pengurus konteks pytest.raises dengan pernyataan tegas, kami boleh menangkap dan mengesahkan pengecualian dan mengeluarkan mesej kegagalan tersuai.

4. Gunakan Lekapan tersuai:

Lekapan ialah konsep yang sangat penting dalam rangka kerja Pytest Ia boleh digunakan untuk menyediakan beberapa sumber yang dikongsi untuk fungsi ujian. Pytest menyediakan beberapa lekapan yang biasa digunakan, seperti tmpdir, monkeypatch, caplog, dll., tetapi kadangkala kita perlu menyesuaikan lekapan untuk memenuhi keperluan ujian tertentu. Menulis dan menggunakan lekapan tersuai adalah sangat mudah, seperti contoh berikut:

import pytest

@pytest.fixture
def my_fixture():
    data = [1, 2, 3, 4, 5]
    return data

def test_my_fixture(my_fixture):
    assert len(my_fixture) == 5
    assert sum(my_fixture) == 15

Dalam kod di atas, kami mentakrifkan fungsi lekapan my_fixture, gunakan my_fixture sebagai parameter dalam fungsi ujian, Pytest akan memanggil fungsi lekapan dan lulus secara automatik nilai pulangan kepada fungsi ujian. Dalam fungsi ujian, kita boleh menggunakan lekapan sama seperti memanggil fungsi biasa.

Kesimpulan:

Artikel ini menyediakan pengenalan terperinci kepada penggunaan lanjutan dan teknik rangka kerja Pytest, dan memberikan contoh kod khusus. Dengan menguasai penggunaan dan teknik lanjutan ini, pembangun boleh menggunakan rangka kerja Pytest dengan lebih baik untuk menulis dan mengurus kod ujian serta meningkatkan kecekapan dan kualiti ujian.

Rujukan:

  1. Pytest Documentation https://docs.pytest.org/en/latest/
  2. Python Software Foundation (n.d. https://pypi.org/project/pytest/

Atas ialah kandungan terperinci Analisis mendalam penggunaan lanjutan dan teknik rangka kerja Pytest. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn