inflearn logo

Tất cả bài kiểm thử H2 đều đạt, nhưng có 6 lỗi trên môi trường production — kiểm thử tích hợp MySQL, Redis và Kafka bằng Testcontainers.

6 lỗi đều vượt qua kiểm thử H2 và mock nhưng chỉ phát sinh trên MySQL, Redis và Kafka production sẽ được tái hiện và xử lý từng lỗi một bằng kiểm thử tích hợp Testcontainers. Bao gồm singleton/tái sử dụng container, CI và chẩn đoán lỗi flaky.

1 học viên đang tham gia khóa học này

Độ khó Trung cấp trở lên

Thời gian Không giới hạn

Software Test
Software Test
Spring Boot
Spring Boot
JUnit
JUnit
Docker
Docker
Testcontainers
Testcontainers
Software Test
Software Test
Spring Boot
Spring Boot
JUnit
JUnit
Docker
Docker
Testcontainers
Testcontainers

Bạn sẽ nhận được điều này sau khi học.

  • Viết các bài kiểm thử tích hợp để tái hiện trên engine thực tế những lỗi mà H2 và mock bỏ sót (cú pháp, quy tắc sắp xếp, mức độ cô lập, TTL, khóa thông điệp, nhận trùng lặp).

  • Tạo môi trường kiểm thử với các điều kiện giống môi trường vận hành bằng @ServiceConnection, cố định image và xác thực Flyway.

  • Tạo các bài kiểm thử bất đồng bộ và phụ thuộc vào thời gian ổn định bằng Awaitility(until·during), tiêm Clock và dọn dẹp dữ liệu.

  • Kiểm chứng bằng số liệu hiệu quả và những cạm bẫy của container singleton, tái sử dụng và chạy song song, rồi chạy trong CI.

  • Định lượng các bài kiểm thử không ổn định bằng cách chạy lặp lại và khắc phục theo từng nguyên nhân.

Nếu tất cả bài kiểm thử đơn vị đều đạt nhưng hệ thống lại lỗi khi vận hành, nghĩa là các bài kiểm thử đang kiểm tra một thứ khác với môi trường vận hành.

Tái hiện và khắc phục từng lỗi trong số 6 lỗi chỉ xảy ra trên MySQL, Redis và Kafka ở môi trường production, dù toàn bộ kiểm thử H2 và mock đều vượt qua, bằng kiểm thử tích hợp Testcontainers. Bao gồm singleton/tái sử dụng container, CI và chẩn đoán lỗi flaky.

Xuyên suốt khóa học, chúng ta sẽ đi đến cùng với một kho lưu trữ và một câu chuyện. Mỗi bài học bắt đầu bằng một lỗi thực tế, trình bày quá trình từ đèn đỏ → đèn xanh qua màn hình chạy thật, và bạn có thể bắt đầu ngay từ bất kỳ bài nào nhờ các thẻ checkpoint (step-00~41).

Sau khi hoàn thành khóa học này

  • Viết các bài kiểm thử tích hợp tái hiện trên engine thực những lỗi mà H2·mock bỏ sót (cú pháp, quy tắc sắp xếp, mức độ cô lập, TTL, khóa thông điệp, nhận trùng lặp).

  • Tạo môi trường kiểm thử với các điều kiện giống môi trường vận hành bằng @ServiceConnection, ghim cố định image và xác thực Flyway.

  • Ổn định các bài kiểm thử phụ thuộc vào bất đồng bộ và thời gian bằng Awaitility(until·during), tiêm Clock và dọn dẹp dữ liệu.

  • Định lượng hiệu quả và cạm bẫy của container singleton, tái sử dụng và chạy song song, rồi chạy trên CI.

  • Định lượng các bài kiểm thử không ổn định bằng cách chạy lặp lại và khắc phục theo từng nguyên nhân.

Dành cho những người sau đây

  • Lập trình viên backend Spring có viết kiểm thử đơn vị nhưng từng gặp lỗi chỉ phát sinh trong môi trường production.

  • Nhóm muốn chuyển bộ test được tạo bằng H2 và mock sang DB, Redis, Kafka thật.

  • Dành cho những người đã từng thử dùng Testcontainers nhưng bỏ cuộc vì chậm và thỉnh thoảng bị lỗi.

Chương trình học (7 phần · 42 bài · khoảng 316 phút)

  • Phần 0. Bắt đầu — đèn xanh nhưng vẫn lỗi khi vận hành — Demo hoàn chỉnh: 6 lỗi khi vận hành mà 9 đèn xanh không phát hiện được, lỗi đầu tiên chỉ sau 5 phút: số tiền mua hàng bằng 0 won, kho bài thực hành và các tag checkpoint, cạm bẫy Docker 29: client version 1.32 is too old, những gì kiểm thử H2 và mock chứng minh được và không chứng minh được, phân tích kiểm thử container đầu tiên: vòng đời · log · chờ đợi

  • Mục 1. Những lỗi chỉ xảy ra trên MySQL thực tế — Khác biệt cú pháp: LIMIT bên trong truy vấn con IN, đối chiếu ký tự: giá trị kỳ vọng trong bài kiểm thử H2 không đúng, cách ly giao dịch: ảnh chụp nhanh REPEATABLE READ, cố định thẻ image và khớp với phiên bản vận hành, chạy cùng bài kiểm thử bằng container PostgreSQL, @ServiceConnection và @DynamicPropertySource

  • Phần 2. Lược đồ và dữ liệu kiểm thử — Kiểm thử xác minh migration Flyway trước, tái hiện lỗi migration trong kiểm thử, ba cách tạo dữ liệu kiểm thử: SQL·builder·repository, @Sql và tập lệnh khởi tạo, khi cần nhiều dữ liệu cố định, chạy cục bộ cũng bằng cùng một container

  • Phần 3. Những lỗi chỉ xảy ra với Redis·Kafka — Redis: SET xóa TTL, kiểm tra mà không cần chờ hết hạn, khởi chạy container Kafka (KRaft), khóa tin nhắn và phân vùng: thứ tự bị đảo lộn, nhận trùng: điểm được cộng hai lần, kiểm tra lỗi·thử lại·DLT

  • Mục 4. Thời gian, bất đồng bộ và cô lập kiểm thử — Awaitility: chờ đợi không cần sleep, during: xác minh rằng không có gì xảy ra thêm, mã phụ thuộc vào thời gian: tiêm Clock, cô lập kiểm thử: chiến lược dọn dẹp dữ liệu, tìm kiếm sự phụ thuộc vào thứ tự kiểm thử, chạy song song và xung đột container

  • Mục 5. Tốc độ và CI — Vì sao chậm: đo thời gian từng phần, bộ nhớ đệm Spring Context và vòng đời container, mô hình container singleton, tái sử dụng container: chỉ dùng cục bộ, chạy Testcontainers trên GitHub Actions, rút ngắn thời gian CI: bộ nhớ đệm và image

  • Phần 6. Chẩn đoán flaky và đồ án tổng kết — Chẩn đoán flaky ①: Đo tỷ lệ tái hiện bằng cách chạy nhiều lần, Chẩn đoán flaky ②: Khắc phục theo từng nguyên nhân, Tổng kết trước và sau: Các lỗi đã bắt được và thời gian chạy, Đồ án tổng kết ①: Lỗi mới — triệu chứng và manh mối, Đồ án tổng kết ②: So sánh lời giải, Kết thúc: Danh sách kiểm tra và các bước tiếp theo

Môi trường thực hành

Trong tệp ZIP thực hành có kho mã dịch vụ đặt hàng của công ty giả lập “Loop Market” (42 thẻ Git theo từng bài học), 42 kịch bản tái hiện theo từng bài học và bảng kiểm. Các con số trên màn hình là giá trị thực tế được chạy trên máy tính xách tay dùng để sản xuất nội dung và có thể khác nhau tùy môi trường.

Kiến thức tiên quyết

  • Đã từng sử dụng kiểm thử đơn vị và mock.

  • Có kinh nghiệm tạo API bằng Spring Boot.

  • Máy tính có JDK 21 và Docker hoạt động được.

Những nội dung không được đề cập trong khóa học này

  • Giới thiệu cú pháp JUnit·Mockito

  • Thiết kế bộ nhớ đệm và hàng đợi tin nhắn (Outbox, v.v.)

  • Kiểm thử tải và hiệu năng

  • Vận hành Kubernetes và container

Lưu ý

Giọng đọc của bài giảng này được tạo bằng công nghệ tổng hợp giọng nói (TTS). Tất cả dữ liệu đều là dữ liệu giả lập phục vụ mục đích đào tạo, và các con số có thể thay đổi tùy theo môi trường thực thi.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Nhà phát triển backend Spring có viết unit test nhưng gặp lỗi chỉ xảy ra trên môi trường production.

  • Đội muốn chuyển bộ test được tạo bằng H2·Mock sang DB·Redis·Kafka thật.

  • Những ai từng thử dùng Testcontainers nhưng đã bỏ cuộc vì chậm và đôi khi bị lỗi.

Cần biết trước khi bắt đầu?

  • Đã từng sử dụng kiểm thử đơn vị và mock.

  • Kinh nghiệm xây dựng API bằng Spring Boot

  • JDK 21 · Máy tính chạy được Docker

Xin chào
Đây là dorian05202988

Xác minh sự nghiệp

Tôi là một chuyên gia dữ liệu với hơn 20 năm kinh nghiệm trong lĩnh vực cơ sở dữ liệu và CNTT. Trong vai trò DBA và quản lý nhóm Nền tảng Cơ sở dữ liệu, tôi phụ trách các nền tảng cơ sở dữ liệu, với chuyên môn về MySQL, PostgreSQL, Oracle, MongoDB, tinh chỉnh SQL, AWS, Terraform và Python. Dựa trên kinh nghiệm trong các lĩnh vực trò chơi, tài chính và dịch vụ CNTT, tôi trình bày về cơ sở dữ liệu và kiến trúc đám mây. Tôi đã xuất bản 『Học các mẫu SQL tinh chỉnh thực tế Oracle』 và 『Sổ tay ứng dụng dự án thực tế Oracle Pro*C』, đồng thời thuyết trình về serverless, lựa chọn cơ sở dữ liệu và chiến lược đa cơ sở dữ liệu tại AWS Summit 2018·2019 và sự kiện 데이터야 놀자 2020. Gần đây, tôi tập trung vào phân tích và khuyến nghị tinh chỉnh truy vấn chậm bằng Bedrock LLM, tự động hóa việc tính toán thông số DB, cũng như quy trình tra cứu thông qua máy chủ DB Meta MCP và bot Slack. Tôi giải thích về tự động hóa cơ sở dữ liệu dành cho nhà phát triển và việc ứng dụng AI vào công việc dành cho người không chuyên về phát triển thông qua các bài thực hành phù hợp với đối tượng và mục tiêu của từng khóa học. Thay vì áp dụng nguyên xi các đề xuất của AI, tôi truyền đạt các tiêu chí đánh giá như kiểm tra tính tương đương của kết quả, kế hoạch thực thi và điều kiện quan sát; nếu thiếu căn cứ thì tạm thời chưa áp dụng. Dữ liệu vận hành của công ty và thông tin xác thực không được đưa vào tài liệu giảng dạy.

Thêm

Chương trình giảng dạy

Tất cả

42 bài giảng ∙ (5giờ 15phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Chưa có đủ đánh giá.
Hãy trở thành tác giả của một đánh giá giúp mọi người!

Khóa học khác của dorian05202988

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!

Ưu đãi có thời hạn

44 ₫

20%

1.449.249 ₫