Why isn't all test automation run on the pipeline?
Bài tóm tắt Slalom Build 2019 2. Tăng trưởng Độ khó: Trung bình
Slalom Build · 2019 · 2. Tăng trưởng · Độ khó: Trung bình — bài gốc
Bài quan điểm của một kỹ sư tư vấn, minh hoạ bằng bốn ca khách hàng ẩn danh. Nhận định là theo tác giả (Slalom).
Bối cảnh
- Unit test đã chạy trong mọi pipeline, nhưng test API, UI, tích hợp, module thường vẫn chạy tay trên laptop. Theo tác giả, lý do quy về ba thứ: giá trị (chưa ai tin đáng làm), kiến trúc (hệ không chia module) và khả thi (không gọi được contract của module hay giả được dependency trong test runner).
Thay đổi chính
- Phân tầng: module test chạy trong process với dependency được giả (test double), chặn merge ở nhánh feature; site integration test chạy sau khi deploy lên một môi trường có dependency thật, chỉ chứng minh các module ghép với nhau được, và quyết định có đẩy lên môi trường cao hơn hay không. Khuyên mỗi module một repo.
- Bốn ca:
- Test API chạy tay vì không có cách chạy service trong test runner. Gộp
SpringRunnervới runnerDataProviderRunnerđang dùng thành một runner, dùng@SpringBootTest, rồi đưa vào pipeline. Khoảng một ngày công, chi phí chạy thêm 0 USD vì runner còn dư capacity. - Chỉ có UI site test, chạy tay; runner không được cài browser theo chính sách. Dựng Jenkins trên một VM có Chrome, chạy theo trigger và lịch, gia cố test cho trạng thái site thay đổi. Chi phí một VM cộng khoảng một ngày dựng.
- Test API site chạy tay vì database "khó giả". Dùng database in-memory của Hibernate (ba dòng cấu hình), biến site test thành module test chạy trong pipeline; khác database thật nhưng vẫn đáng.
- Ứng dụng desktop nguyên khối đa luồng, có UI test trên pipeline nhưng sửa đâu vỡ đó. Refactor thành module storage, business logic, background, UI, giữ UI test làm lưới an toàn và thêm module test; mất khoảng hai tháng.
- Test API chạy tay vì không có cách chạy service trong test runner. Gộp
Vì sao
- Lỗi bắt ở nguồn rẻ nhất, developer ít bị kéo về việc cũ. Khi test không chạy trong pipeline, tester liên tục vá test vỡ và thành "ném qua tường"; theo tác giả, bắt đầu dự án với mọi test trong pipeline dễ hơn đưa vào sau.
Bài học cho SWE
- Rào cản thường là khả thi kỹ thuật nhỏ (runner, browser, DB giả) chứ không phải chi phí; mỗi ca chỉ tốn khoảng một ngày.
- Kiến trúc không có module thì không có module test; refactor có lưới UI test là đường ra, nhưng là phần đắt nhất.
- Giả dependency đánh đổi độ giống production lấy khả năng chạy mỗi lần merge; phần còn lại để cho test sau deploy.
Liên quan
- Kiểm thử độ tin cậy (chaos, fault injection, mô phỏng tất định) · CI và build ở quy mô lớn
- Cùng công ty: Slalom Build 2017 · Slalom Build 2016
- Cùng bài toán: Trendyol 2020 · DoorDash 2022 · Miro 2023
#Test automation#CI/CD pipeline#module test#site integration test#test double#SpringBootTest#in-memory database#Jenkins#refactor monolith
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (2)