Thử nghiệm thủ công Php thử nghiệm cụ thể
Khi nói về kiểm thử tự động hoặc kiểm thử đơn vị trong bất kỳ ngôn ngữ lập trình nào, có hai nhóm người Show
Vì vậy, với bài viết này, tôi sẽ cố gắng thuyết phục trại cũ nhìn vào khía cạnh khác và thấy những lợi ích, và xem việc bắt đầu với thử nghiệm tự động trong Laravel dễ dàng như thế nào Đầu tiên, hãy nói về "tại sao" và sau đó tôi sẽ chỉ ra một vài ví dụ rất cơ bản về "làm thế nào" Tại sao bạn cần kiểm thử tự độngKiểm thử tự động không phức tạp. họ chỉ chạy một phần mã cho bạn và báo cáo bất kỳ lỗi nào. Đó là cách đơn giản nhất để mô tả chúng. Hãy tưởng tượng rằng bạn đang khởi chạy một tính năng mới trong ứng dụng của mình, sau đó một trợ lý rô-bốt cá nhân sẽ đi và kiểm tra chức năng mới theo cách thủ công cho bạn, đồng thời kiểm tra xem mã mới có vi phạm bất kỳ điều gì từ các tính năng cũ không Đó là lợi ích chính. tự động kiểm tra lại tất cả các tính năng. Và nó có vẻ như là công việc phụ, nhưng nếu bạn không bảo "người máy" đó làm việc đó, thì bạn nên tự mình làm điều đó, phải không? Với mọi tính năng mới trong ứng dụng của bạn, các thử nghiệm tự động ngày càng mang lại nhiều lợi ích hơn
Bạn có được ý tưởng. Hãy tưởng tượng ứng dụng của bạn sau một hoặc hai năm, với các nhà phát triển mới trong nhóm, những người thậm chí không biết "Tính năng 1" đó hoạt động như thế nào hoặc cách sao chép nó để thử nghiệm. Vì vậy, tương lai của bạn sẽ cảm ơn bạn rất nhiều vì đã viết các bài kiểm tra tự động Tất nhiên, nếu bạn nghĩ rằng dự án của bạn là một dự án rất ngắn hạn và bạn không quan tâm nhiều đến tương lai của nó. Không, tôi tin vào ý định tốt của bạn, vì vậy hãy để tôi chỉ cho bạn cách bắt đầu thử nghiệm dễ dàng như thế nào Thử nghiệm tự động đầu tiên của chúng tôiĐể chạy thử nghiệm tự động đầu tiên trong Laravel, bạn không cần viết bất kỳ mã nào. Yup, bạn đã đọc đúng. Mọi thứ đã được cấu hình và chuẩn bị sẵn trong bản cài đặt Laravel mặc định, bao gồm cả ví dụ cơ bản thực tế đầu tiên Bạn có thể thử cài đặt một dự án Laravel và chạy ngay những thử nghiệm đầu tiên
Đây sẽ là kết quả trong bảng điều khiển của bạn
Nếu chúng ta xem thư mục mặc định của Laravel 2, chúng ta có hai tệpkiểm tra/Tính năng/Ví dụTest. php
Không cần biết bất kỳ cú pháp nào, để hiểu điều gì đang xảy ra ở đây. đang tải trang chủ và kiểm tra xem mã trạng thái HTTP có phải là "200 OK" không Cũng lưu ý cách tên phương pháp 3 trở thành văn bản có thể đọc được khi xem kết quả kiểm tra, chỉ cần thay thế ký hiệu gạch dưới bằng khoảng trắngbài kiểm tra/Đơn vị/Ví dụTest. php
Điều này có vẻ hơi vô nghĩa, kiểm tra xem điều đó có đúng không? . Hiện tại, bạn cần hiểu điều gì thường xảy ra trong mọi bài kiểm tra
Về mặt cấu trúc, đó là tất cả những gì bạn cần biết, mọi thứ khác phụ thuộc vào những điều chính xác mà bạn muốn kiểm tra Để tạo một lớp kiểm tra trống, bạn chỉ cần chạy lệnh này
Nó sẽ tạo ra tệp 5
Điều gì xảy ra nếu các bài kiểm tra thất bại?Để tôi chỉ cho bạn điều gì sẽ xảy ra nếu các xác nhận kiểm tra không trả về kết quả như mong đợi Hãy chỉnh sửa các bài kiểm tra ví dụ này
Và bây giờ, nếu chúng ta chạy lại 6
Như bạn có thể thấy, có hai câu được đánh dấu là KHÔNG ĐẠT, với các giải thích bên dưới và các mũi tên đến dòng kiểm tra chính xác khiến câu khẳng định không thành công. Vì vậy, đây là cách các lỗi được hiển thị. Tiện lợi phải không nào? Ví dụ thực tế đơn giản. Mẫu đăng kýHãy thực tế hơn và xem xét một ví dụ thực tế. Hãy tưởng tượng rằng bạn có một biểu mẫu và bạn cần kiểm tra nhiều trường hợp khác nhau. kiểm tra xem nó có thất bại nếu chứa đầy dữ liệu không hợp lệ hay không, kiểm tra xem nó có thành công với đầu vào chính xác không, v.v. Bạn có biết rằng bộ khởi động Laravel Breeze chính thức đi kèm với các bài kiểm tra tính năng bên trong không? thử nghiệm/Tính năng/Đăng kýTest. php
Ở đây chúng tôi có hai bài kiểm tra trong một lớp, vì cả hai đều liên quan đến mẫu đăng ký. một đang kiểm tra xem biểu mẫu có được tải chính xác hay không và một số khác kiểm tra xem việc gửi có hoạt động tốt không Ta làm quen với hai phương pháp kiểm tra kết quả khác, hai khẳng định nữa. 7 và 8. Bạn có thể kiểm tra tất cả các xác nhận có sẵn trong tài liệu chính thức của PHPUnit và. Hãy nhớ rằng một số xác nhận chung xảy ra trên đối tượng 9, trong khi những xác nhận khác kiểm tra 0 cụ thể từ cuộc gọi tuyến đườngMột điều quan trọng khác là câu lệnh 1, với đặc điểm, được bao gồm ở trên lớp. Nó cần thiết khi các hành động thử nghiệm của bạn có thể ảnh hưởng đến cơ sở dữ liệu, như trong ví dụ này, đăng ký thêm một mục mới trong bảng cơ sở dữ liệu 2. Để làm được điều đó, bạn sẽ cần tạo một cơ sở dữ liệu thử nghiệm riêng biệt sẽ được làm mới với 3, mỗi khi các thử nghiệm được thực hiệnBạn có hai lựa chọn. tạo một cơ sở dữ liệu riêng biệt hoặc sử dụng cơ sở dữ liệu SQLite trong bộ nhớ. Cả hai đều được cấu hình trong tệp 4 mặc định đi kèm với Laravel. Cụ thể, bạn cần phần này
Xem 5 và 6 được bình luận? Trong thử nghiệm này, chúng tôi khẳng định rằng người dùng được xác thực thành công và được chuyển hướng đến đúng trang chủ, nhưng chúng tôi cũng có thể kiểm tra dữ liệu thực tế trong cơ sở dữ liệu Ngoài mã này 0Chúng ta cũng có thể sử dụng và làm một cái gì đó như thế này 1Một ví dụ thực tế khác. mẫu đăng nhậpHãy xem thêm một thử nghiệm từ Laravel Breeze kiểm tra/Tính năng/Xác thựcTest. php 2Đây là về hình thức đăng nhập. Logic tương tự như đăng ký, phải không? . Vì vậy, logic chung là bạn nên kiểm tra cả hai trường hợp. khi mọi thứ diễn ra tốt đẹp và khi chúng thất bại Ngoài ra, những gì bạn thấy trong thử nghiệm này là việc sử dụng. Laravel tạo một người dùng giả mạo (một lần nữa, trên cơ sở dữ liệu thử nghiệm được làm mới của bạn) và sau đó cố gắng đăng nhập, với thông tin đăng nhập chính xác hoặc không chính xác Một lần nữa, Laravel tạo ra nhà máy mặc định với dữ liệu giả mạo cho mô hình 7, ngay lập tứccơ sở dữ liệu/nhà máy/UserFactory. php 3Thấy chưa, có bao nhiêu thứ được chuẩn bị bởi chính Laravel, vì vậy chúng ta có thể dễ dàng bắt đầu thử nghiệm không? Vì vậy, nếu chúng ta chạy 6 sau khi cài đặt Laravel Breeze, chúng ta sẽ thấy một cái gì đó như thế này 4Kiểm tra tính năng VS Kiểm tra đơn vị VS KhácBạn đã xem các thư mục con 9 và 0. sự khác biệt giữa chúng là gì? Trên toàn cầu, ngoài hệ sinh thái Laravel/PHP, có nhiều loại thử nghiệm tự động khác nhau. Bạn có thể tìm thấy các thuật ngữ như
Nghe có vẻ phức tạp và sự khác biệt thực tế giữa các loại thử nghiệm đó đôi khi bị mờ. Đó là lý do tại sao Laravel đã đơn giản hóa tất cả những thuật ngữ khó hiểu đó và nhóm chúng thành hai. đơn vị/tính năng Nói một cách đơn giản, các bài kiểm tra tính năng cố gắng chạy các tính năng thực tế của ứng dụng của bạn. lấy URL, gọi API, bắt chước hành vi chính xác như điền vào biểu mẫu. Các bài kiểm tra tính năng thường thực hiện điều tương tự hoặc tương tự như bất kỳ người dùng dự án nào sẽ thực hiện theo cách thủ công trong cuộc sống thực Bài kiểm tra đơn vị có hai ý nghĩa. Nói chung, bạn có thể thấy rằng bất kỳ thử nghiệm tự động nào được gọi là "kiểm tra đơn vị" và toàn bộ quá trình có thể được gọi là "kiểm tra đơn vị". Nhưng trong ngữ cảnh của tính năng so với đơn vị, quá trình này là về việc kiểm tra một đơn vị mã không công khai cụ thể của bạn, trong sự cô lập. Ví dụ: bạn có một số lớp Laravel với một phương thức tính toán thứ gì đó, chẳng hạn như tổng giá của đơn đặt hàng với các tham số. Vì vậy, bài kiểm tra đơn vị của bạn sẽ khẳng định nếu phương thức đó (đơn vị mã) trả về kết quả chính xác, với các tham số khác nhau Để tạo bài kiểm tra đơn vị, bạn cần thêm cờ 5Mã được tạo giống với bài kiểm tra đơn vị mặc định từ Laravel 6Như bạn có thể thấy, không có 1, và đó là một trong những định nghĩa phổ biến nhất của bài kiểm tra đơn vị. nó không chạm vào cơ sở dữ liệu, nó hoạt động như một "hộp đen", cách ly với ứng dụng đang chạyCố gắng bắt chước ví dụ tôi đã đề cập trước đó, hãy tưởng tượng chúng ta có một lớp dịch vụ 2ứng dụng/Dịch vụ/OrderPriceService. php 7Sau đó, bài kiểm tra đơn vị có thể trông giống như thế này 8Theo kinh nghiệm cá nhân của tôi với các dự án Laravel, phần lớn các bài kiểm tra là kiểm tra Tính năng, không phải kiểm tra Đơn vị. Trước tiên, bạn cần kiểm tra xem ứng dụng của mình có hoạt động không, cách người dùng thực sẽ sử dụng ứng dụng đó Tiếp theo, nếu bạn có các phép tính hoặc logic đặc biệt mà bạn có thể xác định là một đơn vị, với các tham số, bạn có thể tạo các bài kiểm tra đơn vị cụ thể cho điều đó Đôi khi, viết bài kiểm tra yêu cầu thay đổi chính mã và cấu trúc lại nó để "dễ kiểm tra" hơn. tách các đơn vị thành các lớp hoặc phương thức đặc biệt Khi nào/Làm thế nào để chạy thử nghiệm?Việc sử dụng thực tế của 6 đó là gì, khi nào bạn nên chạy nó?Có nhiều cách tiếp cận khác nhau, tùy thuộc vào quy trình làm việc của công ty bạn, nhưng thông thường, bạn cần đảm bảo rằng tất cả các thử nghiệm đều "xanh" (nghĩa là không có lỗi) trước khi bạn đẩy các thay đổi mã mới nhất của mình vào kho lưu trữ Vì vậy, bạn làm việc cục bộ với nhiệm vụ của mình và khi bạn cảm thấy như mình đã hoàn thành, bạn chạy thử nghiệm để đảm bảo rằng bạn không vi phạm bất cứ điều gì. Hãy nhớ rằng, mã của bạn có thể gây ra lỗi không chỉ trong logic của bạn mà còn vô tình phá vỡ một số hành vi khác trong mã của người khác đã viết từ lâu Nếu chúng ta tiến thêm một bước nữa, có thể tự động hóa rất nhiều thứ. Với các công cụ CI/CD khác nhau, bạn có thể chỉ định các thử nghiệm của mình sẽ được thực thi bất cứ khi nào ai đó đẩy các thay đổi vào một nhánh Git cụ thể hoặc trước khi hợp nhất mã vào nhánh sản xuất. Quy trình làm việc đơn giản nhất là sử dụng Github Actions, tôi có một video riêng chứng minh điều đó Bạn nên kiểm tra những gì?Có nhiều ý kiến khác nhau về mức độ lớn của cái gọi là "phạm vi thử nghiệm" của bạn. bạn có nên kiểm tra mọi hoạt động và mọi trường hợp có thể xảy ra trên mọi trang hay chỉ giới hạn công việc của bạn ở những phần quan trọng nhất Thật vậy, đây là điểm tôi đồng ý với việc mọi người đổ lỗi cho kiểm thử tự động làm mất nhiều thời gian hơn là mang lại lợi ích thực tế. Điều đó có thể xảy ra nếu bạn viết bài kiểm tra cho từng chi tiết. Điều đó nói rằng, nó có thể được yêu cầu bởi dự án của bạn. câu hỏi chính là "giá của lỗi tiềm ẩn là bao nhiêu" Nói cách khác, bạn cần ưu tiên các nỗ lực thử nghiệm của mình với câu hỏi "Điều gì sẽ xảy ra nếu mã này không thành công?" . Sau đó, nếu chức năng vai trò/quyền của bạn bị hỏng, thì đó là một vấn đề bảo mật lớn Tôi thích cách Matt Stauffer diễn đạt nó trong một hội nghị. "Bạn cần phải kiểm tra những thứ đó trước, nếu chúng thất bại, bạn sẽ bị đuổi việc". Tất nhiên, đó là một cường điệu, nhưng bạn có ý tưởng. kiểm tra những điều quan trọng đầu tiên. Và sau đó là chức năng khác, nếu bạn có thời gian cho nó CÔN TRÙNG. Giải pháp thay thế phổ biến mới cho PHPUnitTất cả các ví dụ trên đều dựa trên công cụ kiểm tra mặc định của Laravel. PHPUnit. Nhưng qua nhiều năm, các công cụ khác đã xuất hiện trong hệ sinh thái và một trong những công cụ phổ biến mới nhất là PEST. Được tạo bởi nhân viên chính thức của Laravel, Nuno Maduro, nó có mục tiêu đơn giản hóa cú pháp, giúp viết mã cho các bài kiểm tra thậm chí còn nhanh hơn Dưới vỏ bọc, nó chạy trên PHPUnit, như một lớp bổ sung, chỉ cố gắng giảm thiểu một số phần lặp lại mặc định của mã PHPUnit Hãy xem một ví dụ. Bạn có nhớ lớp kiểm tra Tính năng mặc định trong Laravel không? 9Bạn có biết bài kiểm tra tương tự sẽ như thế nào với PEST không? 0Vâng, MỘT dòng mã, và thế là xong. Vì vậy, mục tiêu của PEST là loại bỏ chi phí hoạt động của
Để tạo bài kiểm tra PEST trong Laravel, bạn cần chỉ định một cờ bổ sung 1Tại thời điểm viết bài viết này, PEST khá phổ biến đối với các nhà phát triển Laravel, nhưng việc sử dụng công cụ bổ sung này và tìm hiểu cú pháp của nó hay không là tùy thuộc vào sở thích cá nhân của bạn, bên cạnh PHPUnit nổi tiếng. Vì vậy, đó là tất cả những gì bạn cần biết về những điều cơ bản của kiểm thử tự động. Từ đây, bạn có thể lựa chọn tạo bài kiểm tra nào và cách chạy chúng trong dự án của mình Làm cách nào để chạy thử nghiệm cụ thể trong Laravel?Để chạy thử nghiệm, hãy thực thi lệnh kiểm tra nhà cung cấp/bin/phpunit hoặc php artisan từ thiết bị đầu cuối của bạn. . không gian tên Kiểm tra \ Đơn vị; sử dụng PHPUnit\Framework\TestCase; lớp Ví dụTest mở rộng TestCase. { * Một ví dụ thử nghiệm cơ bản * * @return void hàm công khai test_basic_test() { $this->assertTrue(true); Làm cách nào để chạy một trường hợp thử nghiệm cụ thể trong PHPUnit?Để chạy một Trường hợp kiểm tra PHPUnit duy nhất trên một phương thức trong tệp. . Mở tệp Trường hợp kiểm tra PHPUnit của bạn trong trình chỉnh sửa Đặt con trỏ vào phương pháp bạn muốn kiểm tra, nhấp chuột phải và chọn Run As. Kiểm tra đơn vị PHP Làm cách nào để chỉ chạy một bài kiểm tra trong PHPUnit?Bạn có thể chạy tất cả các kiểm tra trong một thư mục bằng cách sử dụng tệp nhị phân PHPUnit được cài đặt trong thư mục nhà cung cấp của bạn. Bạn cũng có thể chạy thử nghiệm đơn lẻ bằng cách cung cấp đường dẫn đến tệp thử nghiệm . Bạn sử dụng cờ --verbose để biết thêm thông tin về trạng thái kiểm tra.
Kiểm tra đơn vị so với kiểm tra tính năng là gì?Bài kiểm tra đơn vị đảm bảo rằng mã riêng lẻ i. e. đoạn mã nhỏ hoạt động tốt. Kiểm tra tích hợp được thực hiện để đảm bảo rằng - khi một hoặc nhiều đơn vị được tích hợp, nó sẽ hoạt động tốt. Kiểm tra tính năng là kiểm tra các tính năng giống như một người dùng thực tế. Giống như cách người dùng thực tế sẽ sử dụng tính năng này |