Test thủ công bằng tay:
Ví dụ chức năng trên, thì đối với test thủ công ta sẽ cần test các vấn đề sau:
Chia ra hai phần Test GUI và Test chức năng
1. Kiểm tra các item trên màn hình có đúng theo thiết kế chưa, mỗi item là 1 test case (test nội dung label, màu sắc, link, status, canh lề,....của từng item)
2. Kiểm tra validate cho các input item, mỗi item có nhiều vấn đề để check như min lenght, max lenght, cho nhập số, chữ hay ngày tháng, cho nhập ký tự đặc biệt không?... mỗi thứ là một test case x số item.
3. Kiểm tra chức năng insert xuống DB thành công => ktra trong DB có lưu đúng nội dung đã input trên màn hình không, có hiển thị thông báo gì không? có chuyển đến màn hình nào không?... - xem cách viết test case liên quan.
...
Kiểm thử tự động - ví dụ selenium
Đối với tool thì không thể viết "mấy chục" test case như trên được, mà phải viết bằng cách khác, và khái niệm test case khác với khái niệm trên.
Trong kiểm thử tự động thì test case là một hàm, một class,... là một chuỗi các sự kiện như input hoặc click và các test data - là dữ liệu nhập đầu vào. Vì vậy sẽ có 2 khái niệm là test case và tập hợp dữ liệu test.
- Test case: là một hàm hoặc class... khác với khái niệm test thủ công: mỗi giá trị nhập đầu vào khác nhau là 1 test case.
Dữ liệu test: là dữ liệu nhập vào để test.
Code: Select all
package com.example.tests;
import com.thoughtworks.selenium.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.regex.Pattern;
public class test case selenium extends SeleneseTestCase {
@Before
public void setUp() throws Exception {
selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://mail.google.com/");
selenium.start();
}
@Test
public void testTest case selenium() throws Exception {
selenium.open("/");
selenium.click("id=link-signup");
selenium.waitForPageToLoad("10000");
selenium.click("id=submitbutton");
selenium.click("id=TermsOfService");
selenium.click("id=Personalization");
selenium.click("id=submitbutton");
selenium.waitForPageToLoad("10000");
verifyTrue(selenium.isTextPresent("Bạn không được để trống trường này."));
}
@After
public void tearDown() throws Exception {
selenium.stop();
}
}
Code: Select all
@Test
public void testTest case selenium() throws Exception {
selenium.open("/");
selenium.click("id=link-signup");
selenium.waitForPageToLoad("10000");
selenium.click("id=submitbutton");
selenium.type("id=submitbutton","[color=#FF0000]Test1[/color]");
selenium.click("id=TermsOfService");
selenium.type("id=TermsOfService","[color=#FF0000]Test2[/color]");
selenium.click("id=Personalization");
selenium.type("id=Personalization","[color=#FF0000]Test3[/color]");
selenium.click("id=submitbutton");
selenium.waitForPageToLoad("10000");
verifyTrue(selenium.isTextPresent("[color=#FF0000]Đăng ký thành công[/color]"));
}
Như vậy, để tận dụng tối đa lợi thế test tự động, chúng ta viết một vòng lặp for() và đọc kết quả test từ 1 danh sách nào đó - như excel - rồi truyền vào các vị trí này. Thì chúng ta sẽ đỡ phải ngồi validate cho từng giá trị.
Để test validate cho các item thì mỗi item chỉ cần 1 test case như trên và 1 tập dữ liệu test.
Theo cách làm trên thì khi test bằng selenium chỉ cần vài test case là có thể thực hiện test hoàn chỉnh 1 chức năng (phải thiết kế tập dữ liệu test đính kèm cho mỗi test case - có thể sử dụng chung các loại data giống nhau để validate như số, ngày tháng,...).