Cara Menyediakan dan Menjalankan Ujian Python Pertama Anda Dengan Pytest

Cara Menyediakan dan Menjalankan Ujian Python Pertama Anda Dengan Pytest
Pembaca seperti anda membantu menyokong MUO. Apabila anda membuat pembelian menggunakan pautan di tapak kami, kami mungkin mendapat komisen ahli gabungan. Baca Lagi.

Pengujian adalah bahagian penting dalam pembangunan perisian. Ia membantu menangkap pepijat lebih awal dan mengurangkan kemungkinan ralat.





Pytest ialah salah satu rangka kerja ujian paling popular untuk Python. Ia membolehkan anda menulis ujian kecil dan boleh dibaca yang boleh berskala apabila aplikasi anda berkembang. Ketahui cara untuk menyediakan dan menggunakan Pytest dengan kod Python anda.





MAKEUSEOF VIDEO OF THE DAY SCROLL UNTUK MENERUSKAN KANDUNGAN

Menyediakan Pytest

Sebelum memasang Pytest, sebaiknya mewujudkan persekitaran maya untuk mengasingkan persekitaran ujian anda, supaya anda boleh mengelakkan konflik dengan pakej dan kebergantungan lain.





Untuk mencipta persekitaran maya, jalankan arahan berikut sebelum memasang Pytest.

 python -m venv tests 

Ini akan mencipta persekitaran maya baharu yang dinamakan ujian dalam direktori semasa anda. Untuk mengaktifkan persekitaran, jalankan arahan ini jika anda menggunakan Linux atau Mac:



 source tests/bin/activate 

Untuk Windows, jalankan arahan ini:

 tests\Scripts\activate 

Untuk memasang Pytest, anda boleh menggunakan pip, pengurus pakej Python, dengan arahan ini dalam terminal anda:





 pip install pytest 

Jika anda tidak mempunyai Pip, jangan risau; awak boleh pasang Pip pada Windows, Mac dan Linux .

berapa banyak ruang cakera untuk windows 10

Jalankan arahan berikut untuk menyemak sama ada anda memasang Pytest dengan betul.





 pytest --version 

Ini harus mengembalikan nombor versi yang dipasang.

Mencipta Ujian Pertama Anda

Pertimbangkan fungsi berikut yang menambah dua nombor dan mengembalikan hasilnya.

 def add_numbers(a, b): 
    return a + b

Beberapa perkara boleh menjadi salah dengan fungsi ini. Sebagai contoh, pertimbangkan perkara yang berlaku jika anda memanggil fungsi dengan nilai bukan angka seperti Tiada atau nilai rentetan jenis. Ini adalah beberapa kes kelebihan yang berpotensi yang boleh menyebabkan fungsi gagal.

Salah satu ujian pertama yang anda tulis harus menyemak sama ada fungsi mengembalikan hasil yang diharapkan. Untuk melakukan ini, anda boleh menggunakan kata kunci assert untuk membandingkan output sebenar fungsi dengan output yang dijangkakan. Dalam kes fungsi add_numbers, fungsi ujian mungkin kelihatan seperti ini:

 def test_add_numbers(): 
    assert add_numbers(2, 3) == 5
    assert add_numbers(-1, 1) == 0
    assert add_numbers(0, 0) == 0

Fungsi ujian ini termasuk tiga pernyataan tegas, setiap satunya membandingkan output fungsi add_numbers kepada nilai yang dijangkakan. Ujian pertama menyemak bahawa penambahan 2 dan 3 mengembalikan 5, ujian kedua menyemak bahawa penambahan -1 dan 1 mengembalikan 0, dan ujian ketiga menyemak bahawa penambahan 0 dan 0 mengembalikan 0.

Cara Menjalankan Ujian Dengan Pytest

Selepas anda menulis ujian anda, langkah seterusnya ialah menjalankannya. Untuk melakukan ini dengan Pytest, navigasi ke direktori yang mengandungi fail ujian anda dan jalankan arahan pytest:

 pytest 

Jika semuanya berfungsi seperti yang diharapkan, anda akan melihat mesej yang menunjukkan bahawa semua ujian berjaya lulus. Walau bagaimanapun, jika mana-mana pernyataan gagal, Pytest akan melaporkan ralat dan menunjukkan kepada anda nilai input yang menyebabkan kegagalan.

Sebagai contoh, katakan anda menjalankan fungsi ujian berikut untuk fungsi add_numbers:

 def test_add_numbers(): 
    assert add_numbers(2, 3) == 6
    assert add_numbers(-1, 1) == 0
    assert add_numbers(0, 0) == 0

Penegasan pertama akan gagal kerana nilai yang dijangkakan ialah 6, tetapi nilai sebenar ialah 5 (jumlah 2 dan 3). Pytest akan mengembalikan mesej berikut:

  Output larian pytest menunjukkan satu ujian gagal

Mesej ini menunjukkan kepada anda nilai input yang menyebabkan nilai dan juga memberitahu anda nilai sebenar yang sepatutnya. Ini memudahkan untuk mengenal pasti dan membetulkan ralat dalam kod anda dengan cepat.

Menggunakan Pytest.raises untuk Menegaskan Pengecualian

Sekarang, mari tulis ujian untuk merangkumi salah satu kes tepi fungsi add_numbers. Apabila anda menghantar hujah bukan angka seperti None kepada fungsi, Python harus menimbulkan pengecualian TypeError.

Anda sepatutnya sudah begitu mengendalikan pengecualian dalam program Python anda , dan anda boleh menguji bahawa kod anda juga menaikkannya dengan betul.

Untuk melakukan ini, salin fungsi ujian berikut dalam fail anda. Ia menggunakan pengurus konteks pytest.raises untuk menyemak sama ada memanggil fungsi add_number dengan 'Tiada' menimbulkan pengecualian TypeError.

di mana untuk mencari imei di iphone
 import pytest 

def test_add_numbers_with_invalid_inputs():
    with pytest.raises(TypeError):
        add_numbers(None, 2)

Kemudian jalankan Pytest dari baris arahan. Jika pengecualian tidak dinaikkan, ujian akan gagal.

Anda boleh pergi lebih jauh dan menyemak butiran mesej pengecualian. Pengurus konteks menghasilkan objek ExceptionInfo dengan butirannya.

Sebagai contoh, dalam fungsi ujian ini, tegaskan mesej pengecualian seperti ini:

 def test_add_numbers_with_invalid_inputs(): 
    with pytest.raises(TypeError) as exc_info:
        add_numbers(None, 2)

    assert exc_info.value.args[0] == "unsupported operand type(s) for +: 'NoneType' and 'int'"

Jika mesej tidak sepadan dengan mesej dalam ujian, Pytest akan menunjukkan kegagalan.

Cara Menggunakan Ujian Parameter untuk Menguji Berbilang Input Sekaligus

Daripada memanggil fungsi secara manual dengan berbilang input seperti ini:

 def test_add_numbers(): 
    assert add_numbers(2, 3) == 6
    assert add_numbers(-1, 1) == 0
    assert add_numbers(0, 0) == 0

Pytest menyediakan ciri ujian berparameter yang membolehkan anda melakukan perkara yang sama dengan lebih mudah. Begini cara anda boleh menulis semula fungsi ujian di atas:

 import pytest 

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

Cara Menjalankan Pelbagai Ujian

Setakat ini, anda hanya menulis dua ujian untuk fungsi add_numbers. Untuk fungsi yang lebih kompleks dengan lebih banyak ujian, anda mungkin mahu mengumpulkannya dalam kelas.

Sebagai contoh, berikut ialah cara anda membuat kelas ujian untuk fungsi tambah.

 class TestAddFunction: 
@pytest.mark.parametrize("a, b, expected", [
        (2, 3, 5),
        (-1, 1, 0),
        (0, 0, 0),
    ])
    def test_addition_with_numbers(self, a, b, expected):
        assert add_numbers(a, b) == expected

    def test_add_numbers_with_invalid_inputs(self):
        with pytest.raises(TypeError) as exc_info:
            add_numbers(None, 2)
        assert exc_info.value.args[0] == "unsupported operand type(s) for +: 'NoneType' and 'int'"

Ambil perhatian bahawa anda perlu memberi awalan nama kelas dengan 'Ujian' supaya Pytest boleh mengenal pasti ia sebagai kelas ujian dan menjalankannya.

Pytest Mempunyai Banyak Lagi Ciri

Menggunakan Pytest, anda boleh mengesahkan secara automatik kod anda berfungsi seperti yang anda jangkakan. Pytest menawarkan banyak ciri lain seperti lekapan yang membolehkan anda menyediakan dan meruntuhkan data ujian dan tanda untuk menyediakan metadata pada fungsi ujian anda.

Selain itu, anda boleh menyepadukan Pytest dalam saluran paip CI anda dan mula menjalankan ujian secara automatik dan berterusan apabila anda menukar kod anda.