Test case cho tool test và test thủ công

Hướng dẫn sử dụng và các lệnh của công cụ kiểm thử giao diện, chức năng Selenium.
Post Reply
tvn
Admin
Posts: 4900
Joined: Tue 10 Aug, 2010 10:11 am
Location: HCM
Contact:

Test case cho tool test và test thủ công

Post by tvn »

Thiết kế test case cho kiểm thử tự động bằng tool test và kiểm thử tự động thường là khác nhau, vì đối với kiểm thử bằng tay thì đa phần là thực hiện test theo kỹ thuật blackbox và mỗi test case sẽ bao gồm các điều kiện nhập, các sự kiện và kết quả mong muốn, nghĩa là mỗi điều kiện nhập đầu vào khác nhau là 1 test case khác nhau. Còn trong kiểm thử tự động thì test case là một đoạn script, là một hàm hoặc class,... là tập hợp các sự kiện/action và một tập các dữ liệu nhập và kết quả mong muốn. Ví dụ cho chức năng thêm một record mới thì viết test case như sau:

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 GUITest 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.
Đây là một test case selenium mẫu

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();
	}
}
Hoặc test case sau:

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ư test case trên thì test case là cả đoạn code, và dữ liệu test là các giá trị nhập vào Test1, Test2, Test3Đăng ký thành công
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,...).



Trang Candy
Hoc Tester
Posts: 5
Joined: Tue 06 Nov, 2012 6:05 pm
Contact:

Re: Test case cho tool test và test thủ công

Post by Trang Candy »

Cảm ơn bạn, bài viết rất hữu ích!



blackcat218
Hoc Tester
Posts: 7
Joined: Wed 28 Aug, 2013 4:30 pm
Contact:

Re: Test case cho tool test và test thủ công

Post by blackcat218 »

"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,...)."
anh vtv ơi em thắc mắc một chút là chỉ sử dụng chế độ command thì mới thiết kế đượ ctaapj dữ liệu test đúng ko ạ? Nếu dùng record màn hình thì có được không?
Ví dụ em có một trường input: chỉ cho phép nhập số nguyên dương không được nhập text, số thập phân, ký tự đặc biệt, khoảng trắng thì thiết kế dữ liệu test cho một test case thế nào ạ?



tvn
Admin
Posts: 4900
Joined: Tue 10 Aug, 2010 10:11 am
Location: HCM
Contact:

Re: Test case cho tool test và test thủ công

Post by tvn »

blackcat218 wrote: anh tvn ơi em thắc mắc một chút là chỉ sử dụng chế độ command thì mới thiết kế đượ ctaapj dữ liệu test đúng ko ạ? Nếu dùng record màn hình thì có được không?
Ví dụ em có một trường input: chỉ cho phép nhập số nguyên dương không được nhập text, số thập phân, ký tự đặc biệt, khoảng trắng thì thiết kế dữ liệu test cho một test case thế nào ạ?
1. "Dùng record" ý bạn là đang sử dụng selenium ide, thì trong đó không hỗ trợ data driven. Mình cũng không sửa được gì nhiều. Nên không test được nhiều dữ liệu test cho 1 test case. Mà phải clone test case đó ra rồi sửa input data tương ứng cho từng test case.

3. Câu hỏi này, bạn tham khảo topic cách thiết kế test case sẽ rõ nhé.



smallring
Hoc Tester
Posts: 2
Joined: Wed 04 May, 2011 5:08 pm
Contact:

Re: Test case cho tool test và test thủ công

Post by smallring »

blackcat218 wrote:"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,...)."
anh vtv ơi em thắc mắc một chút là chỉ sử dụng chế độ command thì mới thiết kế đượ ctaapj dữ liệu test đúng ko ạ? Nếu dùng record màn hình thì có được không?
Ví dụ em có một trường input: chỉ cho phép nhập số nguyên dương không được nhập text, số thập phân, ký tự đặc biệt, khoảng trắng thì thiết kế dữ liệu test cho một test case thế nào ạ?
Hi bạn!
Record màn hình chỉ ghi lại các thao tác thực hiện. Để kiểm tra nhiều trường hợp dữ liệu đầu vào và sử dụng 1 testcase thì bạn đưa các dữ liệu đầu vào ra file .xml rồi chỉnh sửa lại lệnh 1 chút là dùng được.
Mình đang sử dụng Sel IDE và cách mình làm là:
1. Record màn hình để lưu lại các bước thực hiện.
2. Kiểm tra dữ liệu đầu vào cần validate những gì-> đưa vào file test data. (file .xml)
3. Chỉnh sửa lại testcase đã record ở trên và truyền file test data vào để test. (Mình có cài thêm add on Sel Blocks- This is an extension for Selenium IDE that provides commands for javascript-like looping and callable functions, with scoped variables, and XML driven parameterization.)
VD: Với trường hợp trường dữ liệu đầu vào của bạn ở trên có thể đưa ra file test data như sau:

Code: Select all

<testdata>
	<vars Integer="abc" ValidationMsg="Dữ liệu nhập không hợp lệ. Giá trị hợp lệ là 1 số nguyên dương" />
    	<vars Integer="1.2" ValidationMsg="Dữ liệu nhập không hợp lệ. Giá trị hợp lệ là 1 số nguyên dương"/>
	<vars Integer="%&*(" ValidationMsg="Dữ liệu nhập không hợp lệ. Giá trị hợp lệ là 1 số nguyên dương"/>
	<vars Integer="Test2" ValidationMsg="Dữ liệu nhập không hợp lệ. Giá trị hợp lệ là 1 số nguyên dương"/> 
</testdata>
Lưu file dưới dạng .xml-> test.xml và đặt cùng thư mục với testcase

File testcase mình có thể ví dụ như sau:

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="https://localhost/" />
<title>Test</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">New Test</td></tr>
</thead><tbody>
<tr>
	<td>forXml</td>
	<td>test.xml</td>
	<td></td>
</tr>
<tr>
	<td>open</td>
	<td>link form bạn cần nhập dữ liệu</td>
	<td></td>
</tr>
<tr>
	<td>type</td>
	<td>vị trí cần nhập</td>
	<td>${Integer}</td>
</tr>
<tr>
	<td>click</td>
	<td>vị trí nút Ghi lại</td>
	<td></td>
</tr>
<tr>
	<td>assertTextPresent</td>
	<td>${ValidationMsg}</td>
	<td></td>
</tr>
<tr>
	<td>endForXml</td>
	<td></td>
	<td></td>
</tr>
</tbody></table>
</body>
</html>
Bạn tham khảo xem sao nhé;)



tvn
Admin
Posts: 4900
Joined: Tue 10 Aug, 2010 10:11 am
Location: HCM
Contact:

Re: Test case cho tool test và test thủ công

Post by tvn »

Thanks smallring, để mình thử cái này xem sao.



smallring
Hoc Tester
Posts: 2
Joined: Wed 04 May, 2011 5:08 pm
Contact:

Re: Test case cho tool test và test thủ công

Post by smallring »

^^. Hì. Em cũng mới nghiên cứu sel ide. Rất mong được học hỏi các anh chị trên diễn đàn:)



Post Reply

Return to “Hướng Dẫn Sử Dụng Selenium”