Nếu bạn là một automation tester, bạn có thể có những câu hỏi này:
- 1 kịch bản automation test như thế nào là 1 kịch bản tốt?
- Các kịch bản test, automation test project đã được tổ chức 1 cách hợp lý hay chưa?
- Khi chuẩn bị viết 1 dòng hoặc method hoặc 1 class mới, bạn băn khoăn nên đặt nó ở đâu? Trong bài viết này sẽ hướng dẫn bạn cách tổ chức automation test project theo kiến trúc nhất định và tối ưu.
Kiến trúc tầng lớp (Layered Architecture)
Layered architecture là một trong các kiểu kiến trúc rất phổ biến được dùng trong việc phát triển sản phẩm phần mềm. Nó được sử dụng để phân loại các thành phần của project/framework thành các lớp khác nhau ứng với các mục đích nhất định. Thông thường có 3 hoặc 4 lớp:
- Presentation Layer: Lớp này cung cấp giao diện cho các thành phần khác trong project.
- Business Logic Layer: Lớp này cung cấp các chức năng thực tế cho các thành phần khác trong project.
- Persistence Layer: Lớp này cung cấp các chức năng lưu trữ cho các thành phần khác trong project.
- Data Access Layer: Lớp này cung cấp các chức năng truy cập vào dữ liệu cho các thành phần khác trong project.
Ảnh được lấy từ sách “Software architecture patterns.” của Mark Richard.
Trong bài viết này sẽ không đi sâu vào kiến thức chuyên sâu của kiến trúc này, vì các bạn có thể tìm hiểu nó ở rất nhiều bài viết trên internet. Mà ta sẽ ứng dụng các layer này vào trong việc tổ chức test automation project/framwork, bởi vì việc viết các kịch bản automation test cũng như việc phát triển phần mềm.
Test automation layers
Hãy lấy 1 ví dụ cụ thể để có thể thấy được các tầng lớp cơ bản trong automation test. Ví dụ sau sẽ là một ví dụ web automation sử dụng Selenium Webdriver:
public class LoginTest{
@Test
public void loginSuccessfully(){
loginPage.login(username, password);
Assert.assertTrue(homePage.isDisplayed());
}
}
public class LoginPage(){
public void login(String username, String password){
this.txtUsername.sendKeys(username);
this.txtPassword.sendKeys(password);
this.btnLogin.click();
}
}
- Test layer là một tập hợp các class test, method test để tạo scenario và checkpoint verification. Khi run test, test layer sẽ gọi các method từ business layer (
loginPage.login()
) và core layer (Assert.assertTrue()
). Trong thực tế, một method test là một tập hợp các bước scenario và expected result. - Business layer là một tập hợp các tính năng của ứng dụng và lập trình các logic đó vào các method với các tham số (nếu cần). Các method này mô tả các bước mà 1 user sẽ thực hiện theo 1 kịch bản nhất định (use case). Các method này sẽ không bao gồm các logic kiểm thử, vì vậy các câu lệnh assert/verify không nên xuất hiện tại layer này. Thông thường, Page Object sẽ thuộc Business Layer.
- Core layer là một tập hợp các method có thể sử dụng trong các thư viện/framework để thực thi test trên ứng dụng. Các method này có thể từ:
- Test libraries/frameworks:
Assert.assertTrue()
,Assert.assertEquals()
- Web automation:
sendKeys()
,click()
, etc. từ Selenium WebDriver - API automation:
given()
,when()
,then()
từ Rest Assured. - Tùy thuộc vào cách tổ chức của project hay framework, mà các methods này có thể được đóng gói thành 1 layer nữa, ví dụ bạn cần 1 method để xóa text trước khi điền text mới.
- Test libraries/frameworks:
public void setText(By by, String text){
WebElement element = driver.findElement(by);
element.clear();
element.sendKeys(text);
}
Layer Principles
Nguyên tắc khi xác định các layer, có một khái niệm quan trọng để xác định vị trí của layer, đó là dependency (sự phụ thuộc). Để xác định với vị trí của đoạn code thuộc layer nào, bạn có thể trả lời một số câu hỏi cơ bản:
Responsibility
– Đoạn code đó dùng để làm gì? Dùng cho test, hay nghiệp vụ (business), hay automation, hay hỗ trợ (support).Dependencies
– Đoạn code đó sẽ phụ thuộc vào layer nào? Test layer có 2 dependencies: Business layer và Core layer. Nhưng Business layer phụ thuộc vào Core layer.Dependents
– Đoạn code nào sẽ dùng nó? hay Đoạn code nào sẽ phụ thuộc vào nó? Test layer không có dependents, Business layer có 1 dependent là Test layer, Core layer có 2 dependents (Business layer và Test layer).
Kết luận
Bài viết này tóm tắt 3 lớp cơ bản của kiến trúc cho tự động hóa thử nghiệm. Nó có thể đóng vai trò như 1 guideline rất hữu ích và cơ bản để cấu trúc automation test project. Không dễ để phân loại mọi thứ nằm trong một trong 3 lớp trong một dự án tự động hóa. Tuy nhiên, chỉ cần nhớ từ khóa DEPENDENCY và bạn có thể tự do tạo lớp mới theo ý muốn.
Discover more from Test Automation Development
Subscribe to get the latest posts sent to your email.