Hướng dẫn dùng pytest django python
Mục lục bài viết:
Show
Kiểm tra mã của bạn mang lại nhiều
lợi ích. Nó làm tăng sự tự tin của bạn rằng mã hoạt động như bạn mong đợi và đảm bảo rằng những thay đổi đối với mã của bạn sẽ không gây ra hồi quy. Viết và duy trì các bài kiểm tra là công việc khó khăn, vì vậy bạn nên tận dụng tất cả các công cụ theo ý của mình để làm cho nó dễ dàng nhất có thể. Trong hướng dẫn này, bạn sẽ học:
Cài đặt thế nào pytestĐể làm theo một số ví dụ trong hướng dẫn này, bạn cần cài đặt
Các Điều gì làm nên pytesthữu ích?Nếu bạn đã viết các bài kiểm tra đơn vị cho mã Python của mình trước đây, thì bạn có thể đã sử dụng Một số khuôn khổ thử nghiệm của bên thứ ba cố gắng giải quyết một số vấn đề Nếu bạn chưa cảm thấy thích thú khi sử dụng Như với hầu hết các khuôn khổ, một số mẫu phát triển có ý nghĩa khi bạn mới bắt đầu sử dụng Ít BoilerplateHầu hết các thử nghiệm chức năng tuân theo mô hình Sắp xếp-Hành động-Khẳng định:
Các khuôn khổ thử nghiệm thường kết hợp với các xác nhận trong thử nghiệm của bạn để chúng có thể cung cấp thông tin khi một xác nhận không thành công. Hãy tưởng tượng bạn muốn viết một bộ thử nghiệm chỉ để đảm bảo rằng
Sau đó, bạn có thể chạy các bài kiểm tra đó từ dòng lệnh bằng cách sử dụng
Đúng như dự đoán, một bài kiểm tra đã vượt qua và một bài thi không đạt. Bạn đã
chứng minh rằng điều đó
Đó là một lượng mã đáng kể để viết và vì đó
là số lượng tối thiểu bạn cần cho bất kỳ bài kiểm tra nào , nên bạn sẽ phải viết đi viết lại cùng một mã.
Đó là nó. Bạn không phải đối phó với bất kỳ nhập khẩu hoặc lớp nào. Bởi vì bạn có thể sử dụng
Sau đó, đầu ra cho biết trạng thái của mỗi bài kiểm tra bằng cách sử dụng cú pháp tương tự như
Đối với các thử nghiệm không đạt, báo cáo đưa ra bảng phân tích
chi tiết về lỗi. Trong ví dụ trên, kiểm tra không thành công vì Dưới đây là một số ví dụ khẳng định nhanh hơn:
Đường cong học tập cho Quản lý Nhà nước và Sự phụ thuộcCác bài kiểm tra của bạn thường sẽ phụ thuộc vào các phần dữ liệu hoặc kiểm tra gấp đôi cho một số đối tượng trong mã của bạn. Trong Theo thời gian, các phụ thuộc ngầm định có thể dẫn đến một mớ mã phức tạp mà bạn phải giải nén để hiểu các bài kiểm tra của mình. Các bài kiểm tra sẽ giúp bạn làm cho mã của mình dễ hiểu hơn. Nếu bản thân các bài kiểm tra khó hiểu, thì bạn có thể gặp rắc rối!
Các đồ đạc cũng có thể sử dụng các đồ đạc khác, một lần nữa bằng cách khai báo chúng một cách rõ ràng dưới dạng phụ thuộc. Điều đó có nghĩa là, theo thời gian, đồ đạc của bạn có thể trở nên cồng kềnh và mô đun. Mặc dù khả năng chèn đồ đạc vào các đồ đạc khác cung cấp tính linh hoạt rất lớn, nhưng nó cũng có thể khiến việc quản lý các phần phụ thuộc trở nên khó khăn hơn khi bộ thử nghiệm của bạn phát triển. Phần sau của hướng dẫn này, bạn sẽ tìm hiểu thêm về đồ đạc và thử một vài kỹ thuật để xử lý những thách thức này. Kiểm tra lọcKhi bộ thử nghiệm của bạn phát triển, bạn có thể thấy rằng bạn chỉ muốn chạy một vài thử nghiệm trên một tính năng và lưu bộ đầy đủ để sử dụng sau này.
Phân loại thử nghiệm nói riêng là một
công cụ mạnh mẽ một cách tinh vi. Kiểm tra tham sốKhi bạn đang thử nghiệm các chức năng xử lý dữ liệu hoặc thực hiện các phép biến đổi chung, bạn sẽ thấy mình đang viết nhiều thử nghiệm tương tự. Chúng chỉ có thể khác nhau về đầu vào hoặc đầu ra của mã đang được kiểm tra. Điều này yêu cầu sao chép mã kiểm tra và làm như vậy đôi khi có thể che khuất hành vi bạn đang cố gắng kiểm tra.
Kiến trúc dựa trên pluginMột trong những tính năng đẹp nhất của Mặc dù một số Đồ đạc: Quản lý trạng thái và sự phụ thuộc
Khi nào tạo đồ đạcHãy tưởng tượng bạn đang viết một hàm
Bây giờ, giả sử bạn cần viết một hàm khác để chuyển đổi dữ liệu thành các giá trị được phân tách bằng dấu phẩy để sử dụng trong Excel . Bài kiểm tra sẽ trông rất giống nhau:
Nếu bạn thấy mình đang viết một số bài kiểm tra mà tất cả đều sử dụng cùng một dữ liệu kiểm tra cơ bản, thì tương lai của bạn có thể sẽ có một lịch thi đấu. Bạn có thể kéo dữ liệu lặp lại vào một hàm duy
nhất được trang trí bằng
Bạn có thể sử dụng vật cố định bằng cách thêm nó làm đối số cho các bài kiểm tra của mình. Giá trị của nó sẽ là giá trị trả về của hàm fixture:
Mỗi bài kiểm tra giờ đây ngắn hơn đáng kể nhưng vẫn có một đường dẫn rõ ràng trở lại dữ liệu mà nó phụ thuộc vào. Hãy chắc chắn đặt tên cho vật cố định của bạn một cái gì đó cụ thể. Bằng cách đó, bạn có thể nhanh chóng xác định xem bạn có muốn sử dụng nó khi viết các bài kiểm tra mới trong tương lai hay không! Khi nào cần tránh đồ đạcCác đồ đạc rất tuyệt vời để trích xuất dữ liệu hoặc các đối tượng mà bạn sử dụng trong nhiều thử nghiệm. Chúng không phải lúc nào cũng tốt cho các thử nghiệm yêu cầu sự thay đổi nhỏ trong dữ liệu. Rải rác bộ thử nghiệm của bạn với các thiết bị cố định không tốt hơn là xả rác với dữ liệu hoặc đối tượng thuần túy. Nó thậm chí có thể tồi tệ hơn vì có thêm lớp hướng dẫn. Như với hầu hết các bản tóm tắt, cần phải thực hành và suy nghĩ để tìm ra mức độ sử dụng vật cố định phù hợp. Đồ đạc ở quy môKhi bạn trích xuất nhiều đồ đạc hơn từ các thử nghiệm của mình, bạn có thể thấy rằng một số đồ đạc có thể được hưởng lợi từ việc trích xuất thêm. Đồ đạc có dạng mô-đun , vì vậy chúng có thể phụ thuộc vào đồ đạc khác. Bạn có thể thấy rằng các đồ đạc trong hai mô-đun thử nghiệm riêng biệt có chung một sự phụ thuộc. Bạn có thể làm gì trong trường hợp này? Bạn có thể di chuyển đồ đạc từ các mô-đun thử nghiệm sang các mô-đun liên quan đến vật cố định tổng quát hơn. Bằng cách đó, bạn có thể nhập chúng trở lại vào bất kỳ mô-đun thử nghiệm nào cần chúng. Đây là một cách tiếp cận tốt khi bạn thấy mình sử dụng một vật cố định lặp đi lặp lại trong suốt dự án của mình.
Một trường hợp sử dụng thú vị khác cho đồ đạc là bảo vệ quyền truy cập vào tài nguyên. Hãy tưởng tượng rằng bạn đã viết một bộ thử nghiệm cho mã xử lý các lệnh gọi API . Bạn muốn đảm bảo rằng bộ thử nghiệm không thực hiện bất kỳ cuộc gọi mạng thực nào, ngay cả khi một thử nghiệm vô tình thực thi mã cuộc gọi mạng
thực.
Bằng cách đặt Marks: Phân loại Kiểm traTrong bất kỳ bộ thử nghiệm lớn nào, một số thử nghiệm chắc chắn sẽ bị chậm. Ví dụ: họ có thể kiểm tra hành vi hết thời gian chờ hoặc họ có thể thực hiện một vùng rộng của mã. Dù lý do là gì, sẽ rất tốt nếu bạn tránh chạy tất cả các bài kiểm tra chậm khi bạn đang cố gắng lặp lại nhanh chóng trên một tính năng mới.
Đánh dấu các bài kiểm tra rất hữu ích cho việc phân loại các bài kiểm tra theo hệ thống con hoặc phụ thuộc. Ví dụ: nếu một số bài kiểm tra của bạn yêu
cầu quyền truy cập vào cơ sở dữ liệu, thì bạn có thể tạo Mẹo chuyên nghiệp : Vì bạn có thể đặt tên cho nhãn hiệu của mình bất kỳ tên nào bạn muốn, nên có thể dễ dàng nhập nhầm hoặc ghi nhớ sai tên nhãn hiệu. Các Để biết thêm thông tin về việc đăng ký nhãn hiệu, hãy xem Khi đến thời điểm chạy các bài kiểm tra của bạn, bạn vẫn có thể chạy tất cả chúng theo mặc định bằng Một số plugin mở rộng chức năng của nhãn hiệu bằng cách bảo vệ quyền truy cập vào tài nguyên. Các Yêu cầu bạn thêm
Bạn có thể xem danh sách tất cả
các nhãn hiệu Tham số hóa: Kết hợp các bài kiểm traBạn đã thấy trước đó trong hướng dẫn này cách Hãy tưởng tượng bạn đã viết một hàm để cho biết một chuỗi có phải là palindrome hay không . Một tập hợp các bài kiểm tra ban đầu có thể trông như thế này:
Tất cả các bài kiểm tra này ngoại trừ hai bài kiểm tra cuối cùng có cùng hình dạng:
Bạn có thể sử dụng
Đối số đầu
tiên
Mặc dù điều này đã rút ngắn mã của bạn, nhưng điều quan trọng cần lưu ý là trong trường hợp này, nó không có tác dụng gì nhiều để làm rõ mã thử nghiệm của bạn. Sử dụng tham số hóa để tách dữ liệu thử nghiệm khỏi hành vi thử nghiệm để rõ ràng thử nghiệm đang thử nghiệm những gì! Báo cáo thời lượng: Chiến đấu với các bài kiểm tra chậmMỗi lần bạn chuyển đổi ngữ cảnh từ mã triển khai sang mã kiểm tra, bạn phải chịu một số chi phí . Nếu các bài kiểm tra của bạn bắt đầu chậm, thì chi phí đầu vào có thể gây ra xích mích và thất vọng. Bạn đã đọc trước đó về cách sử dụng điểm để lọc ra các bài kiểm tra chậm khi bạn chạy bộ phần mềm của mình. Nếu bạn muốn cải thiện tốc độ của các bài kiểm tra của
mình, thì sẽ hữu ích khi biết những bài kiểm tra nào có thể mang lại những cải tiến lớn nhất. Sử dụng
Mỗi bài kiểm tra hiển thị trong báo cáo thời lượng là một ứng cử viên tốt để tăng tốc vì nó chiếm số lượng trên mức trung bình trong tổng thời gian kiểm tra. Lưu ý rằng một số thử nghiệm có thể có chi phí thiết lập vô hình. Bạn đã đọc trước đó về cách thử nghiệm đầu tiên được đánh dấu Các pytestplugin hữu íchBạn đã tìm hiểu về một số pytest-randomly
Đây là một cách tuyệt vời để khám phá các bài kiểm tra phụ thuộc vào việc chạy theo một thứ tự cụ thể, có nghĩa là chúng có sự phụ thuộc trạng thái vào một số bài kiểm tra
khác. Nếu bạn đã xây dựng bộ thử nghiệm của mình từ đầu Plugin sẽ in giá trị hạt giống trong mô tả cấu hình. Bạn có thể sử dụng giá trị đó để chạy các bài kiểm tra theo thứ tự khi bạn cố gắng khắc phục sự cố.
|