Các bài kiểm tra tĩnh cho các nhà phát triển front-end


7

Tôi đang cố gắng thêm kiểm tra tĩnh PHP tại Frontools để đơn giản hóa và cải thiện quy trình kiểm tra và nếu có thể tăng hiệu suất, thì phải mất rất lâu để có kết quả.

Vấn đề GH - https://github.com/SnowdogApps/magento2-frontools/issues/45

Tôi không quen thuộc với các công cụ / công cụ kiểm tra PHP, vì vậy có vài câu hỏi cho bạn:

  1. Có bất kỳ lý do tại sao M2 sử dụng libs thử nghiệm (PHPUnit và PHP_CS) từ năm 2014 thay vì mới không?
  2. Có phải bình thường rằng đầu ra của bài kiểm tra này trông giống như một mớ hỗn độn và thật khó để hiểu điều gì và ở đâu xảy ra sự cố? Tôi so sánh nó với đầu ra của các bài kiểm tra chất lượng mã cho CSS / JS và đó là một cơn ác mộng. Có phóng viên nào tốt hơn có sẵn hoặc một số cách khác để có được một báo cáo có ý nghĩa, thay vì một cái gì đó trông giống như một nền tảng PHP?
  3. Có bất kỳ lý do tại sao nó rất chậm? Phải mất ~ 7-8 phút để phân tích các tệp mẫu. Hầu hết các bài kiểm tra front-end trong trường hợp xấu nhất mất vài giây, vì vậy không có cách nào để nhận phản hồi trực tiếp về các vấn đề.
  4. Làm cách nào để chạy loại thử nghiệm này khi chúng tôi có mô-đun đơn (ví dụ: chủ đề), không phải toàn bộ phiên bản Magento 2 (thử nghiệm CI)?
  5. Có vẻ như PHP_CS đã có một trình bao bọc đơn giản cho Gulp, nhưng tôi không chắc nơi cấu hình được lưu trữ. Có phải trong tập tin /.php_cs không?

Câu trả lời:


2

Tôi sẽ chỉ cho bạn suy nghĩ của tôi về điều đó, tôi có thể sai ở một số điểm nhưng có lẽ nó sẽ làm rõ một số điều:

Có bất kỳ lý do tại sao M2 sử dụng libs thử nghiệm (PHPUnit và PHP_CS) từ năm 2014 thay vì mới không?

Tôi đoán là, khi sự phát triển Magento 2 bắt đầu vài năm trước, nhóm đã sử dụng thư viện có sẵn tại thời điểm đó. Vì họ đã viết rất nhiều bài kiểm tra trong Magento 2, nên có lẽ họ đã sử dụng phiên bản họ đã sử dụng tại thời điểm họ viết các bài kiểm tra đầu tiên để không phá vỡ các bài kiểm tra . Khá chắc chắn rằng họ có thể nâng cấp điều đó tại một số điểm trong một phiên bản chính. Bây giờ bạn có thể thực hiện Yêu cầu tính năng trên diễn đàn về điều đó: https://community.magento.com/t5/Magento-2-Feature-Requests-and/idb-p/feature-requests

Có phải bình thường đầu ra của bài kiểm tra này trông giống như một mớ hỗn độn và thật khó để hiểu điều gì và ở đâu xảy ra sự cố? Tôi so sánh nó với đầu ra của các bài kiểm tra chất lượng mã cho CSS / JS và đó là cơn ác mộng. Có phóng viên nào tốt hơn có sẵn hoặc cách khác để có được báo cáo có ý nghĩa, thay vì một cái gì đó trông giống như một nền tảng PHP?

Chà, vâng, đầu ra PHPUnit mặc định không phải là siêu đẹp. Hầu hết các IDE hỗ trợ PHPUnit và cung cấp chotốt hơnđầu ra đẹp hơn . Ví dụ: đây là tài liệu chính thức để chạy thử nghiệm trong PHPStorm: http://devdocs.magento.com/guides/v2.0/test/unit/unit_test_execut_phpstorm.html Ngoài ra còn có các công cụ như VisualPHPUnit cung cấp GUI cho các thử nghiệm đơn vị : https://github.com/VisualPHPUnit/VisualPHPUnit

Có bất kỳ lý do tại sao nó rất chậm? Phải mất ~ 7-8 phút để phân tích các tệp mẫu. Hầu hết các bài kiểm tra front-end trong trường hợp xấu nhất mất vài giây, vì vậy không có cách nào để nhận phản hồi trực tiếp về các vấn đề.

Đầu tiên, Magento 2 đi kèm với rất nhiều bài kiểm tra chắc chắn có ảnh hưởng đến hiệu suất (nhưng hey, đó là những gì cần có để mã của bạn được bảo vệ đúng;)). Tôi khá chắc chắn Vinai Kopp đã đề cập đến một số cải tiến hiệu suất mà bạn có thể làm để làm cho các bài kiểm tra chạy nhanh hơn , tôi hy vọng anh ấy sẽ cung cấp cho chúng tôi một số thông tin chi tiết khi anh ấy trở lại sau kỳ nghỉ.

Làm cách nào để chạy loại thử nghiệm này khi chúng tôi có mô-đun đơn (ví dụ: chủ đề), không phải toàn bộ phiên bản Magento 2 (thử nghiệm CI)?

Bạn có nghĩa là chạy thử nghiệm cho một mô-đun? Có, bạn chắc chắn có thể làm điều đó, tôi khuyên bạn nên kiểm tra câu trả lời đó từ KAndy (anh ấy là thành viên của nhóm Magento 2) : Chạy thử nghiệm cho một mô-đun cụ thể trong Magento2

Có vẻ như PHP_CS đã có một trình bao bọc đơn giản cho Gulp, nhưng tôi không chắc nơi cấu hình được lưu trữ. Đó là trong tập tin /.php_cs?

Tôi không chắc cái bọc đơn giản đó ở đâu. Tôi không nghĩ đó là .php_cstập tin. Từ những gì tôi biết , tệp này chỉ được sử dụng cho các đánh giá tĩnh cam kết trước GitHub


Cảm ơn về câu trả lời! Tôi nhận xét hầu hết những điều dưới đây @fschmengler trả lời, nhưng có vẻ như điểm 5. không rõ ràng. Tôi không hỏi về những điều liên quan đến việc triển khai Gulp, b / c Tôi quen thuộc với các công cụ JS :) Tôi chỉ cần biết cách cấu hình PHP_CS được lưu trữ ở cấp độ Magento.
igloczek

2

Đây là khá nhiều câu hỏi cùng một lúc, nhưng tôi có thể trả lời ít nhất một số:

  1. Có bất kỳ lý do tại sao M2 sử dụng libs thử nghiệm (PHPUnit và PHP_CS) từ năm 2014 thay vì mới không?

Sự phát triển lớn trong Magento 2 bắt đầu vào khoảng năm 2014, vì vậy họ đã sử dụng các công cụ có sẵn tại thời điểm đó. Khi PHPUnit 5 xuất hiện, đã có một số lượng lớn các thử nghiệm không tương thích với phiên bản mới (xem ví dụ về chủ đề diễn đàn này ), vì vậy có thể hiểu rằng họ đã hoãn cập nhật.

Tôi giả sử, lý do để gắn bó với phiên bản PHP_CS cũ là tương tự nhau, mặc dù tôi không có ví dụ cụ thể ở đây.

  1. Có phải bình thường đầu ra của bài kiểm tra này trông giống như một mớ hỗn độn và thật khó để hiểu điều gì và ở đâu xảy ra sự cố? Tôi so sánh nó với đầu ra của các bài kiểm tra chất lượng mã cho CSS / JS và đó là cơn ác mộng. Có phóng viên nào tốt hơn có sẵn hoặc cách khác để có được báo cáo có ý nghĩa, thay vì một cái gì đó trông giống như một nền tảng PHP?

Các IDE như PHPStorm có khả năng tích hợp tốt với các công cụ này, nơi bạn có thể thấy các kết quả sniffer mã trực tiếp trong các tệp nguồn và cũng có được một GUI đẹp xung quanh các bài kiểm tra PHPUnit.

Bên cạnh đó, PHPUnit có nhiều tùy chọn đầu ra khác nhau. Ví dụ với --testdoxđối số, bạn sẽ nhận được một danh sách kiểm tra có thể đọc được của con người về các bài kiểm tra đã qua và thất bại. Nó cung cấp ít thông tin hơn nhưng tổng quan dễ đọc. Bạn cũng có thể lấy nó ở định dạng HTML với --testdox-html=OUTPUTFILE. Tương tự như vậy, bạn có thể nhận được báo cáo bảo hiểm mã trong HTML với --coverage-html OUTPUTDIR.

Nhưng các định dạng đầu ra hữu ích hơn là các định dạng XML và JSON có thể được đọc bởi các ứng dụng khác như máy chủ VisualPHPUnit hoặc CI.

Các tham số PHPUnit để tạo báo cáo:

Code Coverage Options:

  --coverage-clover <file>  Generate code coverage report in Clover XML format.
  --coverage-crap4j <file>  Generate code coverage report in Crap4J XML format.
  --coverage-html <dir>     Generate code coverage report in HTML format.
  --coverage-php <file>     Export PHP_CodeCoverage object to file.
  --coverage-text=<file>    Generate code coverage report in text format.
                            Default: Standard output.
  --coverage-xml <dir>      Generate code coverage report in PHPUnit XML format.

Logging Options:

  --log-junit <file>        Log test execution in JUnit XML format to file.
  --log-tap <file>          Log test execution in TAP format to file.
  --log-json <file>         Log test execution in JSON format.
  --testdox-html <file>     Write agile documentation in HTML format to file.
  --testdox-text <file>     Write agile documentation in Text format to file.

Thông tin thêm: https://phastait.de/manual/civerse/en/textui.html

Các tham số PHP_CS để tạo báo cáo

PHP_CS cũng có các định dạng báo cáo khác nhau:

--report=xml         PHP_CS XML format
--report=checkstyle  Checkstyle XML format
--report=csv         CSV

(các định dạng khác: emacs, svnblame, gitblame)

Thông tin thêm: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Báo cáo

  1. Có bất kỳ lý do tại sao nó rất chậm? Phải mất ~ 7-8 phút để phân tích các tệp mẫu. Hầu hết các bài kiểm tra front-end trong trường hợp xấu nhất mất vài giây, vì vậy không có cách nào để nhận phản hồi trực tiếp về các vấn đề.

Tôi không thể biết lý do nào khiến PHP_CS mất 8 phút chỉ cho các tệp mẫu, nhưng người theo dõi của bạn chỉ có thể kiểm tra các tệp đã thay đổi. Việc tích hợp PHPStorm thực hiện điều này khá tốt.

  1. Làm cách nào để chạy loại thử nghiệm này khi chúng tôi có mô-đun đơn (ví dụ: chủ đề), không phải toàn bộ phiên bản Magento 2 (thử nghiệm CI)?

Đơn giản chỉ cần chạy phpcs /path/to/themeđể chỉ kiểm tra các tập tin trong thư mục này.

  1. Có vẻ như PHP_CS đã có một trình bao bọc đơn giản cho Gulp, nhưng tôi không chắc nơi cấu hình được lưu trữ. Đó là trong tập tin /.php_cs?

Nó không giống như trình bao bọc này bao gồm một trình xem tập tin, vì vậy tôi không thấy lợi ích.

Các .php_csđịnh nghĩa tập các tập tin để kiểm tra và có tiêu chuẩn mã hóa để sử dụng. Đây là tệp cấu hình PHP_CS và độc lập với trình bao bọc gulp.


Cảm ơn về câu trả lời! 1. Tôi sẽ chuyển chủ đề này sang chủ đề đề xuất cải tiến, b / c có vẻ như không ai thực sự biết điều gì đang dừng, tức là cập nhật PHPUnit lên 4.x. 2. Tôi là người dùng Atom, b / c Tôi hoàn toàn không cần tính năng IDE này (hầu như vô dụng ở mặt trước), vì vậy tôi chỉ tìm kiếm những cải tiến trong bảng điều khiển (đầu ra thử nghiệm CI cũng quan trọng) . Tôi đã kiểm tra các thông số này, nhưng có vẻ như việc xây dựng một mô-đun máy in tùy chỉnh đơn giản, sẽ là lựa chọn tốt hơn. 3. Có vẻ như nguyên nhân được tìm thấy - các thử nghiệm tĩnh cũng chạy một số phần của kiểm tra tính toàn vẹn và mất khoảng 4-5 phút để hoàn thành. 1/2
igloczek

4. Không chỉ về việc chạy PHP_CS. Kiểm tra tĩnh cũng chứa các kiểm tra lỗ hổng XXS và các chức năng tùy chỉnh được xây dựng trên PHPUnit, vì vậy có lẽ cần phải có gói lõi Magento để chạy bất cứ thứ gì: <5. Đó là một plugin Gulp, vì vậy việc xem các tệp được xử lý ở cấp Gulp, nhưng nó không phải là một trường hợp Tôi phải biết Magento được lưu cấu hình của plugin này ở đâu (nếu tồn tại, nhưng tôi không thể tưởng tượng được một kẻ nói dối không có tệp cấu hình: O) 2/2
igloczek

3.-4.) Thật vậy, có bộ kiểm tra tĩnh PHPUnit cần một chút thời gian, kiểm tra các phụ thuộc và không có gì. Tôi phát hiện ra rằng bạn có thể đặt một danh sách các tệp vào dev/tests/static/testsuite/Magento/Test/_files/changed_files*(có thể được tạo bằng get_github_changes.php) và một số thử nghiệm sẽ chỉ xử lý các tệp này. Nhưng đối với phần còn lại tôi không thấy khả năng hạn chế chúng theo từng mô-đun / chủ đề. Những gì bạn có thể làm là chạy một testsuite duy nhất, ví dụ với phpunit --testsuite "Less Static Code Analysis"(xem phpunit.xml.distdanh sách các bộ thử nghiệm) 5.) đúng vậy.php_cs
Fabian Schmengler

Tôi đang suy nghĩ về việc trích xuất các thử nghiệm để tách gói soạn thảo và sau đó thêm nó dưới dạng phụ thuộc dev vào các gói của chúng tôi, để chạy thử nghiệm trên CI env một cách riêng biệt. Hy vọng nó sẽ hoạt động bằng cách nào đó: D
igloczek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.