Test Hook – Tùy biến Execution cho Bộ kiểm thử Chức năng [Part 2]
Ở trong phần trước chúng ta đã tìm hiểu về các khái niệm liên quan Test Level và Test Suite cũng như mối liên kết giữa hai khái niệm này thông qua một câu chuyện thể thao. Các bạn có thể xem lại phần trước trong bài “Test Suite & Test Hook: Bí kíp quản lý bộ kiểm thử chuyên nghiệp và hiệu quả” phần 1. Trong phần thứ 2 của bài viết này, Test Mentor sẽ cùng các bạn tìm hiểu về Test hook một công cụ giúp cho các bạn quản lý Test Suite và viết script automation test trở nên hiệu quả, chuyên nghiệp hơn.
Khái niệm về Test Hook
Test hooks là gì?
Test hooks là các đoạn code trong Automation test thực hiện trước hoặc sau mỗi kịch bản test, mục đích là để giảm sự dư thừa code và thực hiện các kịch bản kiểm thử một cách rõ ràng hơn.
Ví dụ: Để thực hiện test một chức năng nào đó của chương trình, chúng ta đều phải thực hiện chức năng đăng nhập. Nếu không có Test hooks các bạn sẽ phải viết các đoạn code thực hiện chức năng đó trong từng script test case cho mỗi chức năng. Mặt khác, trong trường hợp chức năng đăng nhập có sự thay đổi, bạn sẽ phải mở từng script test case để hiệu chỉnh lại nó. Hơn nữa việc luôn phải dành một vài dòng code trong script test case để thực hiện chức năng đăng nhập này cũng dẫn đến việc dư thừa code, một điều luôn cần tránh trong lập trình vì nó sẽ ảnh hưởng đến hiệu năng của chương trình và tiềm ẩn nguy cơ phát sinh lỗi (điều này cần đặc biệt tránh trong việc xây dựng một dạng chương trình dùng để kiểm định sản phần mềm như dự án automation test).
Hiểu được khái niệm rồi, vậy giờ áp dụng nó ra sao thì đây lại là một bài toán thực sự nan giải đối với những bạn mới bắt đầu học kiểm thử tự động, đặc biệt là với những bạn Non-IT. Trước khi tìm hiểu cách áp dụng, chúng ta cần hiểu được vòng đời thực thi một Test suite như thế nào từ đó sẽ đưa ra hướng giải quyết vấn đề này.
Giới thiệu về vòng đời thực thi của một Test Suite
Trên đây là vòng đời thực thi một Test suite và nó được áp dụng khá phổ biến trong quy trình vận hành Test Suite, các bạn có thể thấy nhiều thành phần trong vòng đời này, trong đó các khái niệm về Test Suite, Test Case, Test Steps, mình đã nêu trong các bài viết trước, các bạn có thể xem lại bằng cách click vào các thành phần này để xem lại các bài viết đó nhé. Vậy các thành phần còn lại, nó là gì?
Test Suite Listeners:
- Before Suite: Nơi chứa cấu hình bằng các đoạn code lắng nghe các điều kiện trước khi thực thi Test Suite.
- After Suite: Nơi chứa cấu hình bằng các đoạn code lắng nghe các điều kiện sau khi kết thúc Test Suite.
Setup Test Suite: Thực hiện các bước mà bất kỳ lúc nào thực thi Test Suite đều sẽ thực hiện, có thể bao gồm việc thiết lập môi trường, cấu hình dữ liệu, hoặc chuẩn bị tài nguyên.
Teardown Test Suite: Thực hiện các bước mà bất kỳ lúc nào kết thúc Test Suite đều sẽ thực hiện và nó sẽ được diễn ra sau khi Test Case cuối cùng trong Suite đó hoàn thành.
Test Suite Listeners:
- Before Test Case: Nơi chứa cấu hình bằng các đoạn code lắng nghe các điều kiện trước khi thực thi một Test case.
- After Test Case: Nơi chứa cấu hình bằng các đoạn code lắng nghe các điều kiện sau khi kết thúc một Test case.
Setup Test Case: Thực hiện các bước mà bất kỳ lúc nào thực thi Test Case trong Test Suite, bao gồm việc cài đặt trạng thái ban đầu, dữ liệu, và tài nguyên cần thiết.
Teardown Test Case: Thực hiện các bước mà bất kỳ lúc nào kết thúc mỗi Test Case trong Test Suite, chẳng hạn như giải phóng tài nguyên, lưu log, hoặc thực hiện các công việc dọn dẹp.
Tùy biến Execution cho Bộ kiểm thử Chức năng
Ở phần lý thuyết trên, nếu mới bắt đầu thì sẽ khá là mơ hồ và các bạn cũng vẫn còn khó hình dung đúng không? Giờ chúng ta sẽ tạm gác lại các lý thuyết đó qua một bên và quay lại câu chuyện thể thao ở phần 1.
Câu chuyện về bài luyện tập cho từng vận động viên
Quay lại câu chuyện phần 1, ở Phase 2, mục tiêu của phase này đó là, từng Vận động viên được tuyển chọn sẽ phải đảm bảo được các tiêu chí của giáo án đã đề ra. Các vận động viên lúc này sẽ CHƯA được phối hợp với nhau và họ sẽ phải kết hợp tất các các đặc điểm như đã được kiểm tra ở phase 1 của bản thân để hoàn thành giáo án.
Trong mỗi buổi tập, ngoài việc Vận động viên thực hiện bài tập ra, cả Ban Huấn luyện và các Vận động viên sẽ cần phải thực hiện các công việc sau:
Trước khi bắt đầu một buổi tập: Luôn đảm bảo được các yếu tố sau:
- Thời tiết phù hợp để tập luyện
- Dụng cụ đo đạc đầy đủ
- Dụng cụ tập luyện đầy đủ
- Khu vực luyện tập đảm bảo yêu cầu luyện tập
- Vận động viên đảm bảo sức khỏe để thực hiện buổi tập
Chuẩn bị cho buổi tập: Các công việc chuẩn bị:
- Dụng cụ đo đạc và tập luyện được đặt đúng vị trí theo yêu cầu
- Khu vực luyện tập được khoanh vùng
- Khởi động chung cho tất cả các vận động viên
Trước khi bắt đầu một bài tập trong giáo án: Vận động viên sẽ cần phải đảm bảo các yếu tố sau:
- Giày chạy là phù hợp nhất với bản thân
- Tinh thần, thể trạng và tâm lý đều ổn định
Chuẩn bị cho mỗi bài tập: Vận động viên thực hiện các động tác warm up của bài tập
Kết thúc cho mỗi bài tập: Vận động viên thực hiện các động tác cool down của bài tập
Sau khi kết thúc một bài tập trong giáo án: Ghi nhận lại kết quả thực hiện bài tập đó của vận động viên
Kết thúc buổi tập: Các công việc kết thúc:
- Thu dọn lại các công cụ, dụng cụ tập luyện
- Tập hợp tất cả các vận động viên
Sau khi buổi tập kết thúc: Luôn đảm bảo được các yếu tố sau:
- Các kết quả của bài tập đã được ghi nhận và tổng hợp lại
- Thông tin về tình hình sức khỏe của Vận động viên
- Điểm chưa đạt của mỗi bài tập cho từng vận động viên.
Ánh xạ câu chuyện với các thành phần của Vòng đời thực thi Test Suite
- Hoạt động “Trước khi bắt đầu một buổi tập”: Đây là các hoạt động kiểm tra các điều kiện cần thiết để một buổi tập có thể diễn ra. Ở đây, chúng ta gần như không phải thực hiện một sự kiện hay hành động nào cả mà chỉ đơn giản là kiểm tra tất cả các thông tin để quyết định buổi tập có được diễn ra hay không. ⇒ Đây chính là Before Suite.
- Hoạt động “Chuẩn bị cho buổi tập”: Đây là các hoạt động mà bất cứ khi nào một buổi tập diễn ra đều sẽ phải thực hiện. Ở đây, chúng ta sẽ phải thực hiện các sự kiện hoặc hành động chuẩn bị như vị trí của công cụ, dụng cụ, các bài tập khởi động cho Vận động viên,…. ⇒ Đây chính là Setup Test Suite.
- Hoạt động “Trước khi bắt đầu một bài tập trong giáo án”: Đây là các hoạt động mà sẽ kiểm tra các điều kiện cần thiết để mỗi Vận động viên có thể thực hiện được các bài tập trong giáo án đề ra. Ở đây, bạn cũng gần như không phải thực hiện một sự kiện hay hành động nào cả mà bạn sẽ kiểm tra tất cả các thông tin để mỗi Vận động viên có thể thực hiện được bài tập hay không. ⇒ Đây chính là Before Test Case.
- Hoạt động “Chuẩn bị cho mỗi bài tập”: Đây là các hoạt động mà mỗi Vận động viên đều sẽ phải thực hiện khi bắt đầu tập. Ở đây, mỗi Vận động viên sẽ phải thực hiện các động tác warm up của bài tập ⇒ Đây chính là Setup Test Case.
- Hoạt động “Kết thúc cho mỗi bài tập”: Đây là các hoạt động mà mỗi Vận động viên đều sẽ phải thực hiện sau khi hoàn thành bài tập. Ở đây, mỗi Vận động viên sẽ phải thực hiện các động tác cool down của bài tập ⇒ Đây chính là Teardown Test Case.
- Hoạt động “Sau khi kết thúc một bài tập trong giáo án”: Đây là các hoạt động mà sẽ ghi nhận lại các kết quả mỗi Vận động viên sau khi thực hiện các bài tập trong giáo án đề ra. Ở đây, bạn cũng không phải thực hiện một sự kiện hay hành động nào cả mà bạn sẽ ghi nhận lại tất cả các thông tin về mỗi Vận động viên qua từng bài tập. ⇒ Đây chính là After Test Case.
- Hoạt động “Kết thúc buổi tập”: Đây là các hoạt động mà bất cứ khi nào một buổi tập kết thúc sẽ phải thực hiện. Ở đây, chúng ta sẽ phải thực hiện các sự kiện hoặc hành động như thu dọn công cụ, dụng cụ, khu vực tập luyện,… ⇒ Đây chính là Teardown Test Suite.
- Hoạt động “Sau khi buổi tập kết thúc”: Mục tiêu cuối cùng của bạn đó là có được đầy đủ thông tin để có thể tổng hợp thành một Báo cáo đầy đủ và chi tiết nhất. Mục đích của bản báo cáo đó là để giúp các bạn đưa ra quyết định điều chỉnh ở các buổi tập tiếp theo nếu có một vấn đề nào đó chưa đạt yêu cầu. Và đây là các hoạt động để bạn thu thập tất cả các thông tin của buổi tập. ⇒ Đây chính là After Suite.
Áp dụng Test hooks cho Bộ kiểm thử Chức năng
- Listener
Ở các phần trên, nếu để ý thì các bạn có thể nhận thấy các thành phần có tiền tố Before, After đều sẽ là các hoạt động kiểm tra hoặc ghi nhận và không có một sự kiện hay hành động nào cả. Ngoài ra, các thành phần này cũng đều nằm trong một thành phần cha là Listener.
Trong một vòng đời thực thi của Test suite, việc lắng nghe các kết quả từ quá trình kiểm tra pre-conditions hoặc ghi nhận, tổng hợp post-condition là vô cùng quan trọng. Nó sẽ giúp cho các bạn kiểm soát được điểm đầu cuối của một Test Suite hoặc Test Case để các báo cáo Automation Test của bạn sẽ trở nên đáng tin cậy hơn. Mặt khác, trong một số trường hợp nó còn giúp tối ưu thời gian thực thi một Test Suite của bạn, đặc biệt là đối với Bộ kiểm thử theo Business flow (Test Mentor sẽ giới thiệu ở phần tiếp theo).
Và đối với các thành phần này, áp dụng Test hooks sẽ là tạo ra các đoạn code thực hiện chức năng lắng nghe hoặc ghi nhận các trạng thái, sự kiện trong quá trình thực thi của Test Suite
Test Mentor xin đưa ra một vài công việc có thể đưa vào trong Listener như sau:
- Before Suite: Kiểm tra tình trạng môi trường thực thi kiểm thử, kết nối tới server, tình trạng Database của chương trình, trình duyệt đã đúng bản cập nhật theo yêu cầu…
- After Suite: Ghi nhận lại các số lượng Test case Pass/Fail, ghi nhận lại các vấn đề (issues) xảy ra ở mỗi Test case,…
- Before Test Case: Kiểm tra các dữ liệu đầu vào (input data),…
- After Test Case: Ghi nhận lại các vấn đề (issues) xảy ra ở mỗi Test case,…
- Setup & Teardown
Đối với các thành phần có tiền tố Setup hoặc Teardown, là các thành phần sẽ bao gồm tập hợp các sự kiện hoặc hành động mà Test Suite/Test Case nào cũng đều sẽ phải thực hiện. Và đối với các thành phần này, áp dụng Test hooks sẽ đơn giản là tạo ra các đoạn code thực hiện nhiệm vụ này.
Test Mentor xin đưa ra một vài công việc có thể đưa vào trong Setup & Teardown như sau:
- Setup Test Suite: Truyền dữ liệu và các biến Global, thực hiện các chức năng tiên quyết đã được test done (nếu chức năng trong Bộ kiểm thử có yêu cầu về điều kiện tiên quyết (dependency))
- Teardown Test Suite: Dọn dẹp và giải phóng dữ liệu trong Database, …
- Setup Test Case: Mở trình duyệt, thực hiện chức năng Đăng nhập, truyền dữ liệu vào các biến Local của Test case,…
- Teardown Test Case: Thực hiện chức năng Đăng xuất, đóng trình duyệt,…
Kết luận
Qua bài viết trên, chúng ta có thể thấy lợi ích mà Test hooks đem lại khi nó giúp việc quản lý Test Suite trở nên rõ ràng, tường minh và có độ tin cậy cao hơn. Mặt khác, nếu không có Test hooks thì tất cả những phần có trong Listeners, Setup, Teardown đều sẽ được viết code trong từng script Test case. Việc này là sẽ dẫn tới dư thừa code. Ngoài ra, nó còn là rủi ro trong quá trình vận hành và bảo trì script Test case. Dễ nhận ra nhất đó là khi kịch bản có sự thay đổi, chúng ta sẽ phải thay đổi lại tất cả các đoạn code liên quan trong script Test case của Test Suite, điều này sẽ làm tốn rất nhiều effort để xử lý.
Trên thực tế, đối với mỗi một dự án sẽ có những yêu cầu khác nhau, từ đó sẽ có những kịch bản kiểm thử khác nhau nên việc tổ chức Test Suite ra sao, cấu hình Test Hooks cũng sẽ rất khác nhau. Việc có đầy đủ các thành phần (ngoại trừ phần thực thi kịch bản) trong vòng đời thực thi Test Suite là điều không bắt buộc. Sẽ có những kịch bản không nhất thiết phải có một số thành phần. Điều này là hoàn toàn phụ thuộc vào khả năng và tư duy của các bạn khi thiết kế kịch bản cũng như xây dựng script automation test.
Ở phần tiếp theo, Test Mentor sẽ giới thiệu thêm về cách để các bạn có thể tùy biến Execution cho Bộ kiểm thử theo Business flow. Hẹn gặp lại ở phần tiếp theo!
Chuột Béo Tester
Leave a Comment