Tại sao cần sử dụng test tự động?
Chất lượng sản phẩm khi đến tay người dùng là vô cùng quan trọng. Song song việc sử dụng người để test thì việc sử dụng Automation Test để tự động hóa quá trình kiểm soát chất lượng phần mềm là vô cùng cần thiết. Nhất là trong bối cảnh chúng ta cần cập nhật, thay đổi tính năng của sản phẩm liên tục, thì việc sử dụng Automation Test lại quan trọng hơn bao giờ hết.
Việc kiểm soát được chất lượng code giúp chúng ta:
- Khả năng mở rộng: Sản phẩm dễ dàng mở rộng hơn về sau, thêm tính năng cũng như cập nhật các đoạn fix bug.
- Khả năng bảo trì : Quản lý độ phức tạp - Giảm nguy cơ thêm lỗi mới.
- Tự động phát hiện lỗi - Giảm chi phí về nguồn lực
- Chuẩn code - Đảm bảo tính nhất quán, dễ hiểu.
Kiểm soát chất lượng sản phẩm

Đây là mô hình về các loại kiểm soát chất lượng sản phẩm.
- Unit Testing: Ở mức độ này, số lượng test là nhiều nhất. Khuyến cáo nên ở mức tầm 70% tổng số test. Đặc điểm ở Unit Test là tốc độ test rất nhanh. Tuy nhiên, mức độ này sử dụng để kiểm soát về logic code là chủ yếu. Thường sẽ dùng để kiểm tra các logic có đảm bảo chạy đủ hết các trường hợp hay không, logic có bị thừa, thiếu hay sót các trường hợp đặc biệt. Vì số lượng các trường hợp rất nhiều nên việc sử dụng unit test là hợp lý.
- API/Service layer: ở mức độ này cao hơn mức độ unit test. Chúng ta sẽ kiểm thử các API, các logic có sử dụng nhiều class, thành phần liên kết lại với nhau. Ở đây khuyến cao nên chiếm 20% tổng số lượng test. Mưc độ này là story level, bắt đầu thiên về 1 số luồng nghiệp vụ, tuy nhiên không có giao diện và cũng ko thành 1 flow hoàn chỉnh.
- Functional Test: Test toàn bộ workflow qua giao diện. Mức độ này chiếm khoảng 10% tổng số test. Tốc độ test này là chậm nhất vì phải từng bước thực hiện như người dùng thông qua giao diện. Tuy nhiên test này lại thân thiện và gần với người dùng cuối nhất. Số lượng test ít để đảm bảo không gây chậm quá trình test. Các case khác nhau sẽ được cover thông qua unit test.
Ứng với mô hình trên, Magento sẽ có những loại test sau để kiểm soát chất lương:
Unit Test: Sử dụng phpunit
Integration Test: Cũng sử dụng phpunit, ở mức độ cao hơn unit test khi liên kết các class với nhau và có thể test được 1 controller hay 1 story nhỏ không qua giao diện
API Test: Test hệ thống API
Acceptance Test: Test tự động bằng giao diện qua Selenium
Ngoài ra, chúng ta còn có một số loại kiểm thử khác phi chức năng, ví dụ kiểm thử hiệu năng, kiểm thử tốc độ tải trang trên client, kiểm thử javascript...Th
Kiểm soát chất lượng mã nguồn
Static Test:
- PhpCs - Cảnh báo các nhà phát triển về các vi phạm tiêu chuẩn code. Nó có thể được tích hợp vào một IDE để phân tích ngay khi bạn viết nó (có thể sử dụng phpstorm).
- PhpMd - Được sử dụng để theo dõi độ phức tạp của code và các lỗi tiềm ẩn. Có thể được tích hợp với một IDE để phản hồi tức thì.
- Dependency - Ngăn chặn sự phụ thuộc không chính xác giữa các mô-đun.
- Legacy code - Ngăn chặn việc sử dụng code cũ, đã bị deprecated.
Unit Test - Cô lập để kiểm tra logic code
Khả năng mở rộng - Đảm bảo hệ thống có thể mở rộng như được thiết kế.
Tương thích ngược - Thực thi chính sách tương thích ngược của Magento ở tất cả các cấp. Do Magento cần phải đảm bảo khi có version mới, các bên thứ ba đã tích hợp với nó cũng phải chạy . Vì vậy, code ần tuân theo các chính sách để đảm bảo không bị thay đổi quá lớn, gây ảnh hưởng tới các module khác.
Kiểm thử trong Magento 2
Trong Magento 2, việc kiểm thực được trở lên khá quan trọng. Vì vậy, mỗi module đều có một thư mục Test, với đầy đủ Unit, Integration, API, MFTF để test đủ các level giống trong hình mình vừa nêu. Việc viết code test vào giúp chúng ta giảm thiểu thời gian maintain sản phẩm sau này. Mặc dù sẽ khiến tốc độ code module ban đầu bị chậm, nhưng sẽ dễ dàng hơn trong việc update. Bản thân Magento khi fix hay update 1 feature, Magento đều yêu cầu những người đóng góp code phải implement code test tự động để đảm bảo issue đó không xảy ra lại trong tương lai. Việc đó sẽ giúp Magento giảm thiểu thời gian maintain và có thể kiểm soát được chất lượng code.
<extension_repo_root>
├── <Module1>
│ ├── ...
│ ├── Test
│ │ ├── Unit
│ │ ├── Integration
│ │ └── Mftf
│ │ ├── TestSuite
│ │ └── composer.json
│ └── ...
├── <Module2>
├── <Module1SampleData>
└── <Module2SampleData>
Code changes must be covered by automated tests accordingto Classification of Magento Automated Tests. When choosing how tocover your changes, pick the most lightweight (execution time wise)test type that will provide sufficient coverage. If you encounter anexisting test that insufficiently covers your changes, you can deletethat test but you must write a proper test to replace it. Forexample, a method that interacts with database has a unit test. Youcan replace it with an integration test.
Tất cả đoạn code trong Magento nếu có thay đổi đềucần có Automation Test để cover. Điều này sẽ giúpMagento kiểm soát được lỗi phát sinh. Ngoài ra, code autotest cần đảm bảo cover được với tốc độ chạy nhanhnhất, để tối ưu quá trình test. Điều này có nghĩa làbạn cần chọn đúng loại test vừa đủ để cover caseđó. Ví dụ là nên dùng unit test để cover code logic, khicần tương tác database thì không dùng unit test được thìcần thay bằng integration test.
Về kiểm tra chuẩn code, Magento cũng đã implement 1 câu lệnh để ta sử dụng. Đó là:
bin/magento dev:test:run static
Câu lệnh này sẽ giúp ta kiểm tra xem code có đúng chuẩn hay chưa, hay có bất hợp lý gì trong cấu trúc code, cần phải refactor.
Cảm ơn các bạn đã theo dõi bài viết. Ở các bài viết tiếp theo , mình sẽ hướng dẫn chi tiết hơn cách viết, cũng như cách chạy từng loại test.