Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang pengetahuan asas dan aplikasi rangka kerja Pytest

Penjelasan terperinci tentang pengetahuan asas dan aplikasi rangka kerja Pytest

王林
王林asal
2024-01-13 13:36:18476semak imbas

Penjelasan terperinci tentang pengetahuan asas dan aplikasi rangka kerja Pytest

Penjelasan terperinci tentang konsep asas dan penggunaan rangka kerja Pytest

1. Pengenalan

Dengan populariti Python dan kemunculan pelbagai rangka kerja ujian, ujian perisian telah menjadi bahagian yang sangat diperlukan dalam proses pembangunan. Pytest ialah rangka kerja ujian yang ringkas tetapi berkuasa dalam Python, direka untuk menyediakan cara yang lebih ringkas, mudah digunakan dan boleh diperluaskan untuk menulis kod ujian. Artikel ini akan memperkenalkan konsep asas dan penggunaan rangka kerja Pytest, serta contoh kod terperinci.

2. Pemasangan dan konfigurasi

Pertama, kita perlu memasang rangka kerja Pytest. Gunakan arahan berikut untuk melengkapkan pemasangan:

pip install pytest

Selepas pemasangan selesai, kami boleh mengesahkan sama ada pemasangan berjaya. Masukkan arahan berikut pada baris arahan:

pytest --version

Jika anda dapat melihat output yang serupa dengan yang berikut, Pytest telah berjaya dipasang:

Ini adalah versi pytest x.x.x, diimport daripada ...

Menggunakan Pytest Sebelum ini, kami juga boleh mengkonfigurasi beberapa tetapan biasa, seperti format output, direktori ujian, dsb. Anda boleh mencipta fail bernama pytest.ini dalam direktori akar projek dan menambah kandungan berikut:

[pytest]
addopts = -s -v
testpaths = tests

Antaranya, addopts digunakan untuk menetapkan pilihan parameter masa jalan , -s dan -v masing-masing menunjukkan mengeluarkan log terperinci dan keputusan, dan laluan ujian ialah direktori kes ujian.

3. Tulis kes ujian

Dalam Pytest, kes ujian wujud dalam bentuk fungsi. Kita boleh menulis fungsi kes ujian di mana-mana sahaja dalam fail, asalkan ia bermula dengan test_. Berikut ialah contoh mudah:

def test_add():
    assert add(2, 3) == 5

def test_multiply():
    assert multiply(2, 3) == 6

Dalam kod di atas, kami mentakrifkan dua fungsi ujian masing-masing test_add dan test_multiply. Dalam setiap fungsi, pernyataan assert digunakan untuk mengesahkan hasil yang kami jangkakan. Jika penegasan gagal, Pytest akan membuang AssertionError dan memaparkan maklumat ralat yang berkaitan.

4. Jalankan kes ujian

Pytest menyediakan pelbagai cara untuk menjalankan kes ujian. Cara paling mudah ialah memasukkan arahan berikut dalam baris arahan:

pytest

Baris arahan akan mencari semua fail ujian secara automatik dalam direktori projek dan melaksanakan fungsi ujian di dalamnya. Keputusan pelaksanaan akan memaparkan hasil larian bagi setiap fungsi ujian, serta maklumat statistik keseluruhan.

Selain menggunakan arahan pytest, kami juga boleh menjalankan kes ujian melalui pytest.main(). Anda boleh mencipta fail bernama run_tests.py dan menambah kandungan berikut:

import pytest

if __name__ == '__main__':
    pytest.main()

Kemudian, laksanakan arahan berikut dalam baris arahan:

python run_tests.py

Ini akan mencapai kesan yang sama.

5. Pengujian berparameter

Pytest menyediakan fungsi yang sangat berguna, iaitu ujian berparameter. Dengan ujian berparameter, kami boleh menghantar satu set data ujian kepada fungsi ujian dan melaksanakan ujian beberapa kali. Berikut ialah contoh mudah:

import pytest

@pytest.mark.parametrize('a,b,result', [(2, 3, 5), (4, 3, 7), (0, 0, 0)])
def test_add(a, b, result):
    assert add(a, b) == result

Dalam kod di atas, penghias @pytest.mark.parametrize digunakan untuk menentukan data ujian. Pembolehubah berparameter ialah a, b dan keputusan mengikut tertib, dan setiap data ujian dihantar dalam bentuk senarai. Parameter ini kemudiannya boleh digunakan secara langsung dalam fungsi ujian.

Apabila menjalankan ujian berparameter, Pytest akan melaksanakan ujian secara automatik untuk setiap set data ujian. Jika mana-mana ujian gagal, nilai parameter khusus yang gagal dilaporkan. Dengan cara ini, kami boleh mengurangkan lebihan kod ujian dengan banyaknya dengan menulis berbilang kes ujian serentak.

6. Lekapan ujian

Dalam ujian perisian, kita selalunya perlu mencipta beberapa lekapan ujian untuk memulakan persekitaran ujian dan membersihkan data ujian. Pytest menyediakan beberapa lekapan terbina dalam, seperti persediaan dan teardown, yang digunakan untuk melaksanakan sebelum dan selepas fungsi ujian bermula dan tamat masing-masing.

Untuk menggunakan lekapan, kita perlu menggunakan penghias @pytest.fixture dalam parameter fungsi ujian. Berikut ialah contoh:

import pytest

@pytest.fixture
def setup():
    # 初始化测试环境
    ...

def test_demo(setup):
    # 测试函数
    ...

Dalam kod di atas, tetapan fungsi lekapan ditakrifkan menggunakan penghias @pytest.fixture. Kemudian, gunakan lekapan ini dalam parameter fungsi ujian.

Pytest juga menyediakan banyak lekapan lain, seperti tmpdir (direktori sementara), monkeypatch, capfd (penangkapan keluaran standard), dll. Melalui lekapan ini, kita boleh menulis pelbagai kes ujian dengan lebih mudah.

7. Sambungan dan pemalam

Rangka kerja Pytest juga menyokong mekanisme sambungan dan pemalam, yang boleh menambah pelbagai fungsi pada rangka kerja ujian dengan mudah. Kami boleh memanjangkan keupayaan Pytest dengan menulis pemalam, seperti laporan tersuai, pilihan baris arahan tersuai, dsb.

8. Ringkasan

Artikel ini memperkenalkan konsep asas dan penggunaan rangka kerja Pytest. Dengan menggunakan Pytest, kami boleh memudahkan menulis kod ujian dan menjadikan proses ujian lebih cekap dan boleh dipercayai. Pada masa yang sama, menggunakan ujian berparameter dan fungsi lekapan ujian yang disediakan oleh Pytest, kami boleh mengatur dan mengurus kes ujian dengan lebih baik serta meningkatkan liputan dan kualiti ujian. Saya harap artikel ini akan membantu anda memahami dan menggunakan rangka kerja Pytest.

9. Rujukan

  1. Dokumentasi Pytest: https://docs.pytest.org/en/latest/
  2. Buku Pytest oleh Martin Ohlsson

Atas ialah kandungan terperinci Penjelasan terperinci tentang pengetahuan asas dan aplikasi 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