Khung UnitTest - Mô-đun Py.test

Vào năm 2004, Holger Krekel đã đổi tên stdgói, có tên thường bị nhầm lẫn với tên của Thư viện chuẩn được vận chuyển bằng Python, với tên (chỉ hơi khó hiểu hơn một chút) 'py.' Mặc dù gói chứa một số gói con, nhưng giờ đây nó được biết đến gần như hoàn toàn nhờ khung công tác py.test.

Khung công tác py.test đã thiết lập một tiêu chuẩn mới cho thử nghiệm Python và ngày nay đã trở nên rất phổ biến với nhiều nhà phát triển. Các thành ngữ tao nhã và Pythonic mà nó giới thiệu để viết thử đã giúp cho các bộ đề kiểm tra có thể được viết theo một phong cách nhỏ gọn hơn nhiều.

py.test là một giải pháp thay thế không có bảng điều khiển cho mô-đun đơn nhất tiêu chuẩn của Python. Mặc dù là một công cụ kiểm tra có đầy đủ tính năng và có thể mở rộng, nó tự hào về một cú pháp đơn giản. Tạo một bộ thử nghiệm dễ dàng như viết một mô-đun với một vài chức năng.

py.test chạy trên tất cả các hệ điều hành POSIX và WINDOWS (XP / 7/8) với phiên bản Python 2.6 trở lên.

Cài đặt

Sử dụng mã sau để tải mô-đun pytest trong bản phân phối Python hiện tại cũng như tiện ích py.test.exe. Có thể chạy thử nghiệm bằng cả hai.

pip install pytest

Sử dụng

Bạn chỉ có thể sử dụng câu lệnh khẳng định để xác nhận các kỳ vọng thử nghiệm. Sự xem xét nội tâm khẳng định của pytest sẽ báo cáo một cách thông minh các giá trị trung gian của biểu thức khẳng định, giải phóng bạn khỏi nhu cầu tìm hiểu nhiều tên củaJUnit legacy methods.

# content of test_sample.py
def func(x):
   return x + 1
   
def test_answer():
   assert func(3) == 5

Sử dụng dòng lệnh sau để chạy thử nghiệm trên. Sau khi chạy thử nghiệm, kết quả sau được hiển thị trên bảng điều khiển:

C:\Python27>scripts\py.test -v test_sample.py
============================= test session starts =====================
platform win32 -- Python 2.7.9, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- C:\Pyth
on27\python.exe
cachedir: .cache
rootdir: C:\Python27, inifile:
collected 1 items
test_sample.py::test_answer FAILED
================================== FAILURES =====================
_________________________________ test_answer _________________________________
   def test_answer():
>  assert func(3) == 5
E     assert 4 == 5
E     + where 4 = func(3)
test_sample.py:7: AssertionError
========================== 1 failed in 0.05 seconds ====================

Thử nghiệm cũng có thể được chạy từ dòng lệnh bằng cách bao gồm mô-đun pytest sử dụng công tắc –m.

python -m pytest test_sample.py

Nhóm nhiều bài kiểm tra trong một lớp

Một khi bạn bắt đầu có nhiều hơn một vài bài kiểm tra, việc nhóm các bài kiểm tra một cách hợp lý, trong các lớp và mô-đun thường có ý nghĩa. Hãy viết một lớp chứa hai bài kiểm tra -

class TestClass:
   def test_one(self):
      x = "this"
      assert 'h' in x
   def test_two(self):
      x = "hello"
      assert hasattr(x, 'check')

Kết quả kiểm tra sau sẽ được hiển thị:

C:\Python27>scripts\py.test -v test_class.py
============================= test session starts =====================
platform win32 -- Python 2.7.9, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- C:\Pyt
on27\python.exe
cachedir: .cache
rootdir: C:\Python27, inifile:
collected 2 items
test_class.py::TestClass::test_one PASSED
test_class.py::TestClass::test_two FAILED
================================== FAILURES =====================
_____________________________ TestClass.test_two ______________________________
self = <test_class.TestClass instance at 0x01309DA0>

   def test_two(self):
      x = "hello"
>  assert hasattr(x, 'check')
E     assert hasattr('hello', 'check')

test_class.py:7: AssertionError
===================== 1 failed, 1 passed in 0.06 seconds ======================