Python khẳng định không bằng

Khẳng định [Khẳng định] là một kiểm tra tiêu chuẩn mà bạn có thể bật hoặc tắt khi hoàn tất quá trình kiểm tra chương trình của mình

Cách đơn giản nhất để nghĩ về một khẳng định là ví nó với một câu nâng cao nếu [hoặc chính xác hơn là một câu lệnh nâng cao nếu không]. Một biểu thức đã được kiểm tra và nếu kết quả trả về là Sai thì một ngoại lệ sẽ được đưa ra

Khẳng định được thực hiện bởi câu lệnh assert , từ khóa mới nhất của Python, được giới thiệu từ phiên bản 1. 5.

Thành viên lập trình thường đặt các xác nhận khi bắt đầu một hàm để kiểm tra đầu vào hợp lệ và sau đó một lệnh gọi hàm để kiểm tra đầu ra hợp lệ

Câu lệnh khẳng định

Khi gặp câu lệnh xác nhận, Python sẽ đánh giá biểu thức đi kèm, điều này hy vọng là đúng. Nếu biểu thức là sai, Python sẽ đưa ra một lỗi khẳng định sai

cú pháp

khẳng định Biểu thức [, Đối số]

Nếu xác nhận không thành công, Python sử dụng ArgumentExpression làm đối số cho AssertionError. AssertionError ngoại lệ có thể bị bắt và xử lý giống như bất kỳ ngoại lệ nào khác bằng cách sử dụng câu lệnh try-Exception, nhưng nếu không được xử lý, chúng sẽ xử lý kết thúc chương trình và tạo ra một truy nguyên [traceback

Ví dụ

Đây là một chức năng chuyển đổi nhiệt độ từ Kelvin [độ C] sang độ F. Vì 0 độ Kelvin là độ đông nên hàm sẽ dừng nếu thấy nhiệt độ âm

PyTest là một khung thử nghiệm cho phép người dùng viết mã kiểm tra bằng ngôn ngữ lập trình Python. Nó giúp bạn viết các trường hợp thử nghiệm đơn giản và có thể mở rộng cho cơ sở dữ liệu, API hoặc giao diện người dùng. PyTest chủ yếu được sử dụng để viết bài kiểm tra cho API. Nó giúp viết các bài kiểm tra từ các bài kiểm tra đơn vị đơn giản đến các bài kiểm tra chức năng phức tạp

Tại sao nên sử dụng PyTest?

Một số ưu điểm của pytest là

  • Rất dễ dàng để bắt đầu vì cú pháp đơn giản và dễ dàng của nó
  • Có thể chạy thử nghiệm song song
  • Có thể chạy một bài kiểm tra cụ thể hoặc một tập hợp con các bài kiểm tra
  • Tự động phát hiện các bài kiểm tra
  • Bỏ qua các bài kiểm tra
  • Mã nguồn mở

Trong hướng dẫn Python PyTest này, bạn sẽ học

Cách cài đặt PyTest

Sau đây là quy trình về cách cài đặt PyTest

Bước 1] Bạn có thể cài đặt pytest bằng cách

pip install pytest==2.9.1

Sau khi cài đặt hoàn tất, bạn có thể xác nhận bằng cách

py.test -h

Điều này sẽ hiển thị trợ giúp

PyTest cơ bản đầu tiên

Bây giờ, chúng ta sẽ học cách sử dụng Pytest với một ví dụ cơ bản về PyTest

Tạo một thư mục study_pytest. Chúng tôi sẽ tạo các tệp thử nghiệm của mình trong thư mục này

Vui lòng điều hướng đến thư mục đó trong dòng lệnh của bạn


Tạo một tệp có tên test_sample1. py bên trong thư mục

Thêm mã dưới đây vào nó và lưu lại

import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 

Chạy thử nghiệm bằng lệnh

py.test

Bạn sẽ nhận được đầu ra như

test_sample1.py F.
============================================== FAILURES ========================================
____________________________________________ test_sample1 ______________________________________
    def test_file1_method1[]:
    	x=5
    	y=6
       	assert x+1 == y,"test failed"
>      	assert x == y,"test failed"
E       AssertionError: test failed
E       assert 5 == 6
test_sample1.py:6: AssertionError

Ở đây trong test_sample1. py F

F nói thất bại

Dấu chấm[. ] nói thành công

Trong phần lỗi, bạn có thể thấy [các] phương thức lỗi và dòng lỗi. Ở đây x==y có nghĩa là 5==6 sai

Tiếp theo trong hướng dẫn PyTest này, chúng ta sẽ tìm hiểu về xác nhận trong PyTest

Xác nhận trong PyTest

Các xác nhận của Pytest là các kiểm tra trả về trạng thái Đúng hoặc Sai. Trong Python Pytest, nếu một xác nhận không thành công trong một phương thức thử nghiệm, thì việc thực thi phương thức đó sẽ dừng lại ở đó. Đoạn mã còn lại trong phương thức kiểm tra đó không được thực thi và các xác nhận của Pytest sẽ tiếp tục với phương pháp kiểm tra tiếp theo

Các ví dụ về xác nhận Pytest

assert "hello" == "Hai" is an assertion failure.
assert 4==4 is a successful assertion
assert True is a successful assertion
assert False is an assertion failure.

Xem xét

assert x == y,"test failed because x=" + str[x] + " y=" + str[y]

Đặt mã này vào test_file1_method1[] thay vì xác nhận

assert x == y,"test failed"

Chạy thử nghiệm sẽ báo lỗi là AssertionError. kiểm tra thất bại x=5 y=6

Cách PyTest Xác định Tệp Kiểm tra và Phương pháp Kiểm tra

Theo mặc định, pytest chỉ xác định tên tệp bắt đầu bằng test_ hoặc kết thúc bằng _test là tệp thử nghiệm. Tuy nhiên, chúng tôi có thể đề cập rõ ràng các tên tệp khác [giải thích sau]. Pytest yêu cầu tên phương thức thử nghiệm bắt đầu bằng “test. ” Tất cả các tên phương thức khác sẽ bị bỏ qua ngay cả khi chúng tôi yêu cầu chạy các phương thức đó một cách rõ ràng

Xem một số ví dụ về tên tệp pytest hợp lệ và không hợp lệ

________số 8

Ghi chú. Có, chúng tôi có thể yêu cầu pytest chọn testlogin một cách rõ ràng. py và logintest. py

Xem một số ví dụ về phương pháp kiểm tra pytest hợp lệ và không hợp lệ

def test_file1_method1[]: - valid
def testfile1_method1[]: - valid
def file1_method1[]: - invalid	

Ghi chú. Ngay cả khi chúng tôi đề cập rõ ràng file1_method1[] pytest sẽ không chạy phương thức này

Chạy nhiều thử nghiệm từ một tệp cụ thể và nhiều tệp

Hiện tại trong thư mục study_pytest ta có file test_sample1. py. Giả sử chúng ta có nhiều tệp, giả sử test_sample2. py , test_sample3. py. Để chạy tất cả các bài kiểm tra từ tất cả các tệp trong thư mục và thư mục con, chúng ta chỉ cần chạy lệnh pytest

py.test -h
0

Điều này sẽ chạy tất cả các tên tệp bắt đầu bằng test_ và tên tệp kết thúc bằng _test trong thư mục đó và các thư mục con trong thư mục đó

To run tests only from a specific file, we can use py.test

py.test -h
1

Chạy một tập hợp con của Toàn bộ thử nghiệm với PyTest

Đôi khi chúng tôi không muốn chạy toàn bộ bộ thử nghiệm. Pytest cho phép chúng tôi chạy thử nghiệm cụ thể. Chúng ta có thể làm theo 2 cách

  • Nhóm các tên thử nghiệm bằng cách khớp chuỗi con
  • Nhóm các bài kiểm tra theo điểm đánh dấu

Chúng tôi đã có test_sample1. py. Tạo một tệp test_sample2. py và thêm đoạn mã dưới đây vào nó

py.test -h
2

Vì vậy, chúng tôi hiện có

py.test -h
3

Tùy chọn 1] Chạy thử nghiệm bằng cách so khớp chuỗi con

Ở đây để chạy tất cả các bài kiểm tra có method1 trong tên của nó, chúng ta phải chạy

py.test -h
4

Vì vậy, chạy py. test -k method1 -v sẽ cho bạn kết quả như sau

py.test -h
5

Tại đây, bạn có thể thấy ở cuối 2 bài kiểm tra được bỏ chọn bởi '-kmethod1', đó là test_file1_method2 và test_file2_method2

Hãy thử chạy với các kết hợp khác nhau như. -

py.test -h
6

Tùy chọn 2] Chạy thử nghiệm bằng điểm đánh dấu

Pytest cho phép chúng tôi đặt các thuộc tính khác nhau cho các phương thức kiểm tra bằng cách sử dụng các dấu pytest, @pytest. dấu. Để sử dụng các điểm đánh dấu trong tệp thử nghiệm, chúng tôi cần nhập pytest vào tệp thử nghiệm

Ở đây, chúng tôi sẽ áp dụng các tên đánh dấu khác nhau cho các phương thức kiểm tra và chạy các thử nghiệm cụ thể dựa trên tên đánh dấu. Chúng tôi có thể xác định các điểm đánh dấu trên mỗi tên kiểm tra bằng cách sử dụng

py.test -h
7

Chúng tôi đang xác định các điểm đánh dấu set1 và set2 trên các phương thức thử nghiệm và chúng tôi sẽ chạy thử nghiệm bằng cách sử dụng tên điểm đánh dấu. Cập nhật các tệp thử nghiệm với đoạn mã sau

test_sample1. py

py.test -h
8

test_sample2. py

py.test -h
9

Chúng tôi có thể chạy bài kiểm tra được đánh dấu bằng cách

import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 
0

Chạy py. kiểm tra -m set1. Điều này sẽ chạy các phương thức test_file1_method1, test_file2_method1, test_file2_method2

Chạy py. test -m set2 sẽ chạy test_file1_method2

Chạy thử nghiệm song song với Pytest

Thông thường, một bộ kiểm tra sẽ có nhiều tệp kiểm tra và hàng trăm phương pháp kiểm tra sẽ mất một khoảng thời gian đáng kể để thực hiện. Pytest cho phép chúng tôi chạy thử nghiệm song song

Để làm được điều đó, trước tiên chúng ta cần cài đặt pytest-xdist bằng cách chạy

import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 
1

Bạn có thể chạy thử nghiệm ngay bây giờ bằng cách

import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 
2

-n runs the tests by using multiple workers. In the above command, there will be 4 workers to run the test.

Đồ đạc Pytest

Fixtures được sử dụng khi chúng tôi muốn chạy một số mã trước mọi phương thức kiểm tra. Vì vậy, thay vì lặp lại cùng một mã trong mọi thử nghiệm, chúng tôi xác định đồ đạc. Thông thường, đồ đạc được sử dụng để khởi tạo kết nối cơ sở dữ liệu, vượt qua cơ sở, v.v.

Một phương thức được đánh dấu là vật cố định Pytest bằng cách đánh dấu bằng

import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 
3

Một phương pháp thử nghiệm có thể sử dụng vật cố định Pytest bằng cách đề cập đến vật cố định làm tham số đầu vào

Tạo một tệp mới test_basic_fixture. py với đoạn mã sau

import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 
4

Nơi đây

  • Chúng tôi có một lịch thi đấu tên là supply_AA_BB_CC. Phương thức này sẽ trả về danh sách 3 giá trị
  • Chúng tôi có 3 phương pháp kiểm tra so sánh với từng giá trị

Mỗi chức năng kiểm tra có một đối số đầu vào có tên phù hợp với một lịch thi đấu có sẵn. Sau đó, Pytest gọi phương thức cố định tương ứng và các giá trị được trả về sẽ được lưu trữ trong đối số đầu vào, ở đây là danh sách [25,35,45]. Bây giờ các mục danh sách đang được sử dụng trong các phương pháp thử nghiệm để so sánh

Bây giờ chạy thử nghiệm và xem kết quả

import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 
5
import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 
6

Bài kiểm tra test_comparewithBB được thông qua kể từ zz=BB=35 và 2 bài kiểm tra còn lại không đạt

Phương thức cố định chỉ có phạm vi trong tệp thử nghiệm đó, nó được xác định. Nếu chúng tôi cố gắng truy cập lịch thi đấu trong một số tệp thử nghiệm khác, chúng tôi sẽ gặp lỗi cho biết không tìm thấy lịch thi đấu ‘supply_AA_BB_CC’ cho các phương pháp kiểm tra trong các tệp khác

Để sử dụng cùng một lịch thi đấu cho nhiều tệp thử nghiệm, chúng tôi sẽ tạo các phương thức lịch thi đấu trong một tệp có tên là conftest. py

Hãy xem điều này bằng ví dụ PyTest bên dưới. Tạo 3 file conftest. py, test_basic_fixture. py, test_basic_fixture2. py với đoạn mã sau

thú nhận. py

import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 
7

test_basic_fixture. py

import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 
8

test_basic_fixture2. py

import pytest
def test_file1_method1[]:
	x=5
	y=6
	assert x+1 == y,"test failed"
	assert x == y,"test failed"
def test_file1_method2[]:
	x=5
	y=6
	assert x+1 == y,"test failed" 
9

pytest sẽ tìm kiếm lịch thi đấu trong tệp thử nghiệm trước và nếu không tìm thấy, nó sẽ tìm trong conftest. py

Chạy thử nghiệm bằng py. test -k test_comparewith -v để được kết quả như bên dưới

py.test
0

Kiểm tra tham số hóa Pytest

Mục đích của tham số hóa một bài kiểm tra là để chạy một bài kiểm tra đối với nhiều bộ đối số. Chúng tôi có thể làm điều này bằng cách @pytest. dấu. tham số hóa

Chúng ta sẽ thấy điều này với ví dụ PyTest bên dưới. Ở đây chúng ta sẽ truyền 3 đối số cho một phương thức kiểm tra. Phương pháp kiểm tra này sẽ thêm 2 đối số đầu tiên và so sánh nó với đối số thứ 3

Tạo tệp thử nghiệm test_addition. py với đoạn mã dưới đây

py.test
1

Ở đây, phương thức kiểm tra chấp nhận 3 đối số- input1, input2, output. Nó thêm đầu vào1 và đầu vào2 và so sánh với đầu ra

Hãy chạy thử nghiệm bằng py. kiểm tra -k test_add -v và xem kết quả

py.test
2

Bạn có thể thấy các bài kiểm tra đã chạy 2 lần – một lần kiểm tra 5+5 ==10 và lần kiểm tra khác 3+5 ==12

test_addition. py. test_add[5-5-10] ĐÃ THÔNG QUA

test_addition. py. test_add[3-5-12] KHÔNG THÀNH CÔNG

Pytest Xfail / Bỏ qua các bài kiểm tra

Sẽ có một số tình huống mà chúng tôi không muốn thực hiện kiểm thử hoặc trường hợp kiểm thử không phù hợp trong một thời điểm cụ thể. Trong những tình huống đó, chúng tôi có tùy chọn Xfail bài kiểm tra hoặc bỏ qua các bài kiểm tra

Bài kiểm tra xfailed sẽ được thực hiện, nhưng nó sẽ không được tính là bài kiểm tra thất bại hoặc vượt qua một phần. Sẽ không có dấu vết hiển thị nếu thử nghiệm đó không thành công. Chúng tôi có thể xfail kiểm tra bằng cách sử dụng

@pytest. dấu. thất bại

Bỏ qua một bài kiểm tra có nghĩa là bài kiểm tra sẽ không được thực hiện. Chúng tôi có thể bỏ qua các bài kiểm tra bằng cách sử dụng

@pytest. dấu. nhảy

Chỉnh sửa test_addition. py với đoạn mã dưới đây

py.test
3

Nơi đây

  • test_add_1 và test_add_2 bị bỏ qua và sẽ không được thực thi
  • test_add_3 và test_add_4 bị xfailed. Các bài kiểm tra này sẽ được thực hiện và sẽ là một phần của các bài kiểm tra xfailed [khi kiểm tra thất bại] hoặc xpassed [khi kiểm tra vượt qua]. Sẽ không có bất kỳ dấu vết nào cho các lỗi
  • test_add_5 và test_add_6 sẽ được thực thi và test_add_6 sẽ báo lỗi với truy nguyên trong khi test_add_5 vượt qua

Thực hiện kiểm tra bằng py. kiểm tra test_addition. py -v và xem kết quả

py.test
4

Kết quả XML

Chúng tôi có thể tạo kết quả kiểm tra ở định dạng XML mà chúng tôi có thể cung cấp cho các máy chủ Tích hợp liên tục để xử lý thêm, v.v. Điều này có thể được thực hiện bởi

py. thử nghiệm test_sample1. py -v –junitxml=”kết quả. xml”

Kết quả. xml sẽ ghi lại kết quả thực hiện kiểm tra. Tìm một kết quả mẫu. xml bên dưới

py.test
5

From we can see a total of two tests of which one is failed. Below that you can see the details regarding each executed test under tag.

Khung Pytest Kiểm tra API

Bây giờ chúng ta sẽ tạo một khung pytest nhỏ để kiểm tra API. API được sử dụng ở đây là API miễn phí từ https. // yêu cầu. Trong/. Trang web này chỉ để cung cấp API có thể kiểm tra. Trang web này không lưu trữ dữ liệu của chúng tôi

Chủ Đề