Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ujian unit dalam Python dengan sheepy

Ujian unit dalam Python dengan sheepy

Patricia Arquette
Patricia Arquetteasal
2024-09-25 06:27:32376semak imbas

Unit testing in Python with sheepy

Helo semua, hari ini saya datang untuk memperkenalkan anda kepada perpustakaan ujian unit baharu yang dipanggil sheepy, tetapi pertama-tama mari kita bercakap tentang kepentingan ujian unit. Perpustakaan ini bukan untuk pemula, untuk melakukan ujian unit dengannya anda perlu memberi sedikit perhatian tambahan. Ia mempunyai penegasan hanya untuk ujian API dengan modul semakan ralat titik akhir dan http.

Pautan Github: github
Pautan PyPi: pypi

Semua perisian matang dan menghormati diri dalam pengeluaran mempunyai ujian unit, sama ada untuk mengetahui sama ada apa yang telah ada dalam kod itu masih berfungsi, untuk mengelakkan pepijat yang telah dilaporkan dan diperbaiki sebelum ini atau untuk menguji ciri baharu, ia adalah petunjuk yang baik bahawa perkara yang mereka bergerak ke hadapan dan tidak mempunyai hutang teknikal terkumpul. Mari kita gunakan penyemak imbas Firefox sebagai contoh, setiap direktori mempunyai subdirektori ujian, dengan ujian khusus untuk pepijat yang telah dilaporkan, dengan cara ini mereka menjamin bahawa pepijat yang diperbaiki tidak akan muncul semula entah dari mana, pepijat yang telah diperbaiki muncul. entah ke mana lagi Ini namanya buang duit. Lama kelamaan anda kehilangan masa, wang, kecekapan dan bahagian pasaran kepada pesaing yang melakukan lebih baik daripada anda dengan sumber yang lebih sedikit.

Setiap orang yang berasa tidak mampu melakukan sesuatu cuba memfitnah sesuatu itu, dan ujian unit tidak berbeza. Untuk mencipta ujian unit yang lebih baik yang merangkumi setiap kes penggunaan memerlukan masa, seperti segala-galanya dalam hidup, anda bahagian belakang Saya ragu anda membaca hanya satu tutorial dan keluar membuat api yang sempurna, perkara yang sama untuk anda bahagian hadapan, saya ragu anda menonton kursus dan datang daripada membuat antara muka yang sempurna. Jadi jangan fikir bahawa dengan ujian unit ia akan menjadi berbeza!

Kaedah penegasan

+-----------------------+-------------------------------------------------------+
| Assertion Method       | Description                                           |
+-----------------------+-------------------------------------------------------+
| assertEqual(a, b)      | Checks if two values are equal.                       |
| assertNotEqual(a, b)   | Checks if two values are not equal.                   |
| assertTrue(expr)       | Verifies that the expression is True.                 |
| assertFalse(expr)      | Verifies that the expression is False.                |
| assertRaises(exc, fn)  | Asserts that a function raises a specific exception.  |
| assertStatusCode(resp) | Verifies if the response has the expected status code.|
| assertJsonResponse(resp)| Confirms the response is in JSON format.             |
| assertResponseContains(resp, key) | Ensures the response contains a given key. |
+-----------------------+-------------------------------------------------------+

Pemasangan

Untuk memasangnya sangat mudah, cuma buka terminal pilihan anda, dengan pip dipasang dan taip pip install sheepy

Contoh penggunaan

from sheepy.sheeptest import SheepyTestCase

class ExampleTest(SheepyTestCase):
    def test_success(self):
        self.assertTrue(True)

    def test_failure(self):
        self.assertEqual(1, 2)

    def test_error(self):
        raise Exception("Forced error")

    @SheepyTestCase.skip("Reason to ignore")
    def test_skipped(self):
        pass

    @SheepyTestCase.expectedFailure
    def test_expected_failure(self):
        self.assertEqual(1, 2)

Kelas SheepyTestCase menyediakan beberapa fungsi untuk mencipta dan melaksanakan ujian unit, termasuk kaedah ketegasan dan mekanisme untuk mengkonfigurasi gelagat istimewa, seperti melangkau ujian atau mengendalikan kegagalan yang dijangkakan.

Dalam kelas ExampleTest, lima kaedah ujian ditakrifkan:

test_success: Ujian ini menyemak sama ada ungkapan yang dihantar kepada kaedah assertTrue adalah benar. Memandangkan nilai True lulus secara eksplisit, ujian ini akan berjaya.

test_failure: Ujian ini menyemak kesamaan antara dua nilai menggunakan kaedah assertEqual. Walau bagaimanapun, nilai yang dibandingkan, 1 dan 2, adalah berbeza, yang mengakibatkan kegagalan ujian. Ini menunjukkan kes kegagalan yang dijangkakan, di mana ujian mesti mengesan ketidakkonsistenan.

test_error: Kaedah ini menimbulkan pengecualian bertujuan dengan mesej "Ralat paksa". Matlamatnya adalah untuk menguji tingkah laku sistem apabila menangani ralat yang berlaku semasa pelaksanaan ujian. Memandangkan kaedah membuang pengecualian tanpa mengendalikannya, hasilnya akan menjadi ralat dalam ujian.

test_langkau: Ujian ini telah dihiasi dengan kaedah langkau kelas SheepyTestCase, yang bermaksud bahawa ia akan dilangkau semasa menjalankan ujian. Sebab untuk melangkau ujian telah disediakan sebagai "Sebab untuk mengabaikan", dan justifikasi ini boleh dipaparkan dalam laporan ujian akhir.

test_expected_failure: Kaedah ini menggunakan penghias expectedFailure, menunjukkan bahawa kegagalan dijangka berlaku. Di dalam kaedah, terdapat semakan kesamaan antara 1 dan 2, yang biasanya akan mengakibatkan kegagalan, tetapi apabila penghias digunakan, rangka kerja menganggap kegagalan ini sebagai sebahagian daripada tingkah laku yang diharapkan dan tidak akan dianggap sebagai ralat, tetapi sebagai "kegagalan yang dijangkakan".

Output


Keputusan Ujian:
ExampleTest.test_error: GAGAL - Ralat paksa
ExampleTest.test_expected_failure: EXPECTED FAILURE
ExampleTest.test_failure: GAGAL - 1 != 2
ExampleTest.test_langkau: DILANGKAU -
ExampleTest.test_success: OK

Kes ujian api

Pengujian API dalam Rangka Kerja Ujian Sheepy direka bentuk dengan mudah tetapi berkuasa, membolehkan penguji berinteraksi dengan API menggunakan kaedah HTTP biasa seperti GET, POST, PUT dan DELETE. Rangka kerja ini menyediakan kelas khusus, ApiRequests, untuk memudahkan penghantaran permintaan dan pengendalian respons, dengan pengurusan ralat terbina dalam melalui kelas pengecualian HttpError.

Apabila menguji API, kelas ujian mewarisi daripada SheepyTestCase, yang dilengkapi dengan pelbagai kaedah penegasan untuk mengesahkan kelakuan API. Ini termasuk assertStatusCode untuk mengesahkan kod status HTTP, assertJsonResponse untuk memastikan respons dalam format JSON dan assertResponseContains untuk menyemak sama ada kunci tertentu wujud dalam badan respons.

For instance, the framework allows you to send a POST request to an API, verify that the status code matches the expected value, and assert that the JSON response contains the correct data. The API requests are handled through the ApiRequests class, which takes care of constructing and sending the requests, while error handling is streamlined by raising HTTP-specific errors when the server returns unexpected status codes.

By providing built-in assertions and error handling, the framework automates much of the repetitive tasks in API testing, ensuring both correctness and simplicity in writing tests. This system allows developers to focus on verifying API behavior and logic, making it an efficient tool for ensuring the reliability of API interactions.

from sheepy.sheeptest import SheepyTestCase  

class TestHttpBinApi(SheepyTestCase):
    def __init__(self):

        super().__init__(base_url="https://httpbin.org")

    def test_get_status(self):

        response = self.api.get("/status/200")
        self.assertStatusCode(response, 200)  

    def test_get_json(self):

        response = self.api.get("/json")
        self.assertStatusCode(response, 200)  
        self.assertJsonResponse(response)  
        self.assertResponseContains(response, "slideshow")  

    def test_post_data(self):

        payload = {"name": "SheepyTest", "framework": "unittest"}
        response = self.api.post("/post", json=payload)
        self.assertStatusCode(response, 200)  
        self.assertJsonResponse(response)  
        self.assertResponseContains(response, "json") 
        self.assertEqual(response.json()["json"], payload)  

    def test_put_data(self):

        payload = {"key": "value"}
        response = self.api.put("/put", json=payload)
        self.assertStatusCode(response, 200)  
        self.assertJsonResponse(response)  
        self.assertResponseContains(response, "json")  
        self.assertEqual(response.json()["json"], payload)  

    def test_delete_resource(self):

        response = self.api.delete("/delete")
        self.assertStatusCode(response, 200)  
        self.assertJsonResponse(response)  

Output example

Test Results:
TestHttpBinApi.test_delete_resource: OK
TestHttpBinApi.test_get_json: OK
TestHttpBinApi.test_get_status: OK
TestHttpBinApi.test_post_data: OK
TestHttpBinApi.test_put_data: OK

Summary:

The new sheepy library is an incredible unit testing library, which has several test accession methods, including a module just for API testing, in my opinion, it is not a library for beginners, it requires basic knowledge of object-oriented programming such as methods, classes and inheritance.

Atas ialah kandungan terperinci Ujian unit dalam Python dengan sheepy. 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