3.3. Selenium Remote Control (Selenium RC) 35
3.3.3.3. Dịch một kịch bản kiểm thử Selenium IDE thành kịch bản kiểm thử Selenium
Phần này c a đồ án trình bày cách dịch một test case Selenium IDE sang một test case Selenium RC d ới dạng một lớp Java và dựa trên JUnit framework.
Đ ÁN T T NGHI P Đ I H C Ch ng 3: Công c ki m th t đ ng Selenium
Trong phạm vi đồ án, chúng ta sẽ không đi sâu vào Junit mà chỉ giới thiệu sơ qua về công c này. JUnit là một framework dùng cho kiểm thửđơn vị tựđộng trong Java, đ ợc phát triển b i Erich Gamma và Kent Beck. Việc cài đặt Junit cũng hết s c đơn giản. Chúng ta chỉ cần download Junit từ trang http://www.junit.org , trong đồ án này chúng ta sẽ sử d ng JUnit 4. Sau khi download file jar về, ta add nó vào project c a chúng ta giống nh phần h ớng dẫn add Selenium đư nêu chi tiết phần 3.2.
Để dịch một kịch bản kiểm thử Selenium IDE thành một kịch bản kiểm thử Selenium RC ta cần thực hiện một sốb ớc nh sau:
- B ớc 1: M test case Selenium IDE muốn dịch. Ví d ta muốn dịch test case có tên testdangnhap1.html đư đ ợc tạo tr ớc đó sang testcase Selenium RC.
Bật trình duyệt firefox -> M Selenium IDE -> Chọn Tập tin -> Open -> Chọn tập tin muốn dịch sang Selenium RC-> Open
- B ớc 2: Export test case Selenium IDE sang test case Selenium RC d ới dạng ngôn ngữ lập trình Java và dựa trên framework Junit 4
Chọn Tập tin -> Export Test Case As -> Java/JUnit 4/ Remote Control - >Save As l u tên tập tin là dangnhapJUnit4.java
Đ ÁN T T NGHI P Đ I H C Ch ng 3: Công c ki m th t đ ng Selenium
Test Case đ ợc dịch có dạng nh mư nguồn d ới đây:
import com.thoughtworks.selenium.*; import org.junit.After;
import org.junit.Before; import org.junit.Test;
import java.util.regex.Pattern; public class dangnhapJunit4 {
public Selenium selenium;
@Before
public void setUp() throws Exception {
selenium = ne w DefaultSelenium("localhost", 4444, "*googlechrome", "https://mail.viettel.com.vn/");
selenium.start(); }
@Test
public void testDangnhapjunit4() throws Exception {
selenium.open("/"); selenium.type("name=user", "trangnh7"); selenium.type("name=password", "meo@Dien07"); selenium.click("id=button"); selenium.waitForPageToLoad("30000"); } @After
public void tearDown() throws Exception {
selenium.stop(); }
}
Hình 3.17: Test Case Selenium Remote Control được export từ test case Selenium IDE
- B ớc 3: Thêm tập tin vào Project - B ớc 4: Chạy test case.
Chuột phải -> Run As -> JUnit Test
Đ ÁN T T NGHI P Đ I H C Ch ng 3: Công c ki m th t đ ng Selenium
Hình 3.18 : Kết quả chạy test case trên Junit 4 3.3.3.4. Báo cáo kết quả kiểm thử
Selenium RC khơng có cơ chế tự báo cáo kết quả kiểm thử. Nh ng nó cho phép xây dựng báo cáo theo các đặc điểm c a ngôn ngữ lập trình. Chúng ta có thể sử d ng các framework kiểm thử c a các ngôn ngữ lập trình để xuất báo cáo. Trong Java có hai frame ork th ng đ ợc sử d ng là Junit và TestNG.
Phần này c a đồ án trình bày các b ớc để xuất một báo kiểm thử trong Eclipse dựa trên framework Junit. D ới đây là các b ớc cần thực hiện:
- B ớc 1: Chuột phải vào Project -> Click Export -> Chọn folder General -> Chọn Ant Buildfiles.
- B ớc 2: Chọn Project, điền thông tin th m c l u báo cáo vào textfield JUnit output directory -> Finish
Đ ÁN T T NGHI P Đ I H C Ch ng 3: Công c ki m th t đ ng Selenium
Sau khi click finish, file build.xml sẽđ ợc tạo trong Project First. - B ớc 3: Thêm file junit.jar vào Global Entries c a Ant:
Click Window -> Chọn Preferences -> Expand Ant -> Click Runtime -> Chọn tab
Classpath -> Expand Global Entries -> Click Add External JARs -> Vào th m c cài đặt Eclipse E:\eclipse\eclipse\plugins\org.junit_3.8.2.v3_8_2_v20100427-1100 chọn junit.jar -> Open
Hình 3.20: Thêm file junit.jar vào Global Entries của Ant
- B ớc 4: Chuột phải vào file build.html -> Chọn Run As -> Ant Build… -> Hiển thị cửa sổ Edit Configuration and launch -> Check vào các checkbox build, các testcase muốn chạy và junitreport -> Click nút Run.
Đ ÁN T T NGHI P Đ I H C Ch ng 3: Công c ki m th t đ ng Selenium
b ớc này, l u Ủ việc sắp xếp sao cho Eclipse thực thi junitreport cuối cùng để tránh báo cáo thiếu tr ng hợp.
Sau khi click nút Run, ch ơng trình sẽ thực hiện chạy các test case đ ợc chọn, và xuất báo cáo vào th m c đ ợc nhập vào tại b ớc tạo file build.xml.
- B ớc 5: Xem báo cáo kiểm thử. Tr ớc khi xem báo cáo kiểm thử, ta cần refresh lại project. Vào th m c đ ợc chọn để l u báo cáo, m file index. Báo cáo sẽ có dạng nh hình:
Hình 3.22: Mẫu báo cáo kết quả kiểm thử Selenium dựa trên JUnit
Ngồi ra báo cáo cịn hỗ trợ tìm ra nguyên nhân test case bị thất bại bằng cách click vào lớp c a test case.
3.4. T ng k t ch ng 3
Ch ơng 3 c a đồ án đư giới thiệu đ ợc về công c kiểm thử phần mềm Selenium và đư nêu đ ợc những đặc điểm và cách sử d ng c a hai bộ công c cơ bản và phổ biến là Selenium IDE và Selenium RC. Các nội dung c thểđư đ ợc làm rõ trong ch ơng 3 bao gồm: - Tổng quan về Selenium: Giới thiệu những nét chính về nguồn gốc, q trình phát triển và
các thành phần cơ bản c a Selenium.
- Selenium IDE: Trình bày đ ợc phạm vi ng d ng, cách cài đặt, cách sử d ng c a Selenium IDE.
- Selenium Remote Control: Trình bày về các thành phần c a Selenium RC, cách cài đặt và cách sử d ng một số ch c năng c a Selenium RC.
Từ những kiến th c tìm hiểu đ ợc trong nội dung ch ơng, em rút ra đ ợc một sốđánh giá với Selenium nh sau:
- Những u điểm chung Selenium:
Selenium là bộ công c mã nguồn m , do vậy mà nó hồn tồn miễn phí.
Selenium hỗ trợ nhiều ngơn ngữ lập trình nh Java, C#, Python… và kết hợp đ ợc với nhiều framework kiểm thửnh JUnit, NUnit, TestNG…
Selenium hỗ trợ kiểm thử trên rất nhiều trình duyệt eb nh Firefox, Googlechrome, Internet Explore…
Đ ÁN T T NGHI P Đ I H C Ch ng 3: Công c ki m th t đ ng Selenium
Hỗ trợ gỡ lỗi
- Những nh ợc điểm chung c a Selenium:
Nh ợc điểm lớn nhất c a Selenium là nó chỉ tích hợp với các hệ thống phát triển dựa trên các nền tảng eb, vì lỦ do đó mà nó khơng thể sử d ng để kiểm thử các phần mềm ng d ng khác.
Selenium không thể thực hiện kiểm thử nếu bản thân nó khơng nhận biết đ ợc đối t ợng.
Những hỗ trợđ ợc cung cấp cho Selenium khá ít nh việc Selenium không hỗ trợ việc xuất báo cáo kiểm thử mà ta phải làm điều đó dựa vào các framework kiểm thử khác. Khó chuẩn đốn những lỗi mới phát sinh.
Đ ÁN T T NGHI P Đ I H C Ch ng 4: Th nghi m
CH NG 4: TH NGHI M
4.1. BƠi toán th nghi m
- Vấn đề đặt ra là kiểm thử hai ch c năng cơ bản cho ng d ng web email c a tập đồn viễn thơng qn đội Viettel là ch c năng đăng nhập và ch c năng soạn thảo và gửi email. - Link ng d ng: https://mail.viettel.com.vn
- ng d ng đ ợc kiểm thử trên 3 trình duyệt: Mozilla Firefox, Internet Explore, Googlechrome.
- Ch c năng đăng nhập: Ch c năng này là một ch c năng đăng nhập thuần túy vào các ng d ng eb thông th ng giống nh các ng d ng khác nh yahoo, google, các forum. Các yếu tố cần kiểm tra:
Nếu đăng nhập đúng tên và mật khẩu thì tải đến trang ch c a ng d ng email.
Nếu đăng nhập sai tên hoặc mật khẩu thì đ a ra thông báo: “Tên đăng nhập hoặc mật khẩu đăng nhập không đúng”.
Nếu nhập thiếu tên đăng nhập thì đ a ra thơng báo: “Bạn phải nhập tên đăng nhập”. Nếu nhập thiếu mật khẩu thì đ a ra thơng báo: “Bạn phải nhập mật khẩu”.
- Ch c năng gửi email: ng d ng email c a Viettel có hai đặc điểm đặc tr ng tạo nên sự khác biệt khi viết kịch bản kiểm thử ch c năng này so với các ng d ng email khác là: Email Viettel là email nội bộ, chỉ cho phép gửi và nhận email giữa các địa chỉ nội bộ,
nghĩa là các địa chỉ có phần m rộng là @viettel.com.vn, ví d : trangnh7@viettel.com.vn. Các địa chỉ email có phần m rộng khác nh địa chỉ email c a google hay yahoo thì ng d ng sẽ không thể gửi email đến cũng nh khơng thể nhận email từcác địa chỉđó.
Email Viettel cũng cho phép ghi địa chỉ email mà không điền phần m rộng, ví d muốn gửi th đến địa chỉ email trangnh7@viettel.com.vn chúng ta cũng có thể cần điền trangnh7 vào địa chỉ gửi đi, ng d ng vẫn hiểu đ ợc địa chỉ email mà ng i gửi muốn gửi email đến là trangnh7@viettel.com.vn.
ng d ng email c a Viettel cũng có những đặc điểm chung giống nh các ng d ng email khác, và các yếu tố chính cần kiểm tra là:
Kiểm tra gửi email tới một hoặc nhiều địa chỉ hợp lệ thành công Kiểm tra hoạt động c a các ch c năng gửi Cc/ Bcc
Kiểm tra gửi email báo lỗi khi gửi email đến một địa chỉ không phải địa chỉ email nội bộ, đồng th i kiểm tra tại địa chỉ email nhận cũng không nhận đ ợc email đư gửi Kiểm tra ch c năng attack file
4.2. S khác nhau gi a k ch b n ki m th t đ ng vƠ k ch b n ki m th th công
Tr ớc khi thực hiện kiểm thử ng d ng, cần phải nói thêm về sự khác nhau giữa một kịch bản kiểm thử th công và một kịch bản kiểm thử tựđộng.
Với kiểm thử th công, kịch bản kiểm thử ch c năng thơng th ng đ ợc chia thành ba phần chính:
- Phần giao diện - Phần ch c năng
Đ ÁN T T NGHI P Đ I H C Ch ng 4: Th nghi m
Với kiểm thử tự động, có hai phần chính mà ta cần quan tâm là test case và dữ liệu kiểm thử. Trong đó:
- Test case: Có thể là một lớp hoặc một hàm hoặc một lớp ghi lại một chuỗi sự kiện mà ta thao tác với ng d ng cần kiểm thử. Khác với khái niệm test case khi thực hiện kiểm thử th công là c mỗi giá trịđầu vào khác nhau thì sẽ tạo thành một testcase.
- Dữ liệu kiểm thử: Là dữ liệu nhập vào để kiểm thử.
4.3. K ch b n ki m th th công4.3.1. Ch c năng đăng nh p 4.3.1. Ch c năng đăng nh p
- ch c năng đăng nhập, ba phần chính cần kiểm tra là:
Giao diện: Kiểm thử các yếu tố giao diện chung nh kiểm tra giao diện theo thiết kế, kiểm tra khi ấn tab, shift-tab, kiểm tra việc bị vỡ giao diện hay không, các giá trị mặc định c a textbox.
Ch c năng: Có bốn tr ng hợp ch c năng cần chính cần kiểm thử:
o Kiểm tra đăng nhập thành công với Tên đăng nhập/ Mật khẩu hợp lệ
o Kiểm tra đăng nhập không thành công khi sử d ng sai Tên đăng nhập/ Mật khẩu
o Kiểm tra thông báo khi không nhập Tên đăng nhập
o Kiểm tra thông báo khi không nhập mật khẩu
Kiểm thử an tồn bảo mật: Vì ch c năng đăng nhập không nhập số liệu vào cơ s dữ liệu do vậy ta có thể bỏ qua không kiểm tra một số lỗi an tồn thơng tin và chỉ cần kiểm tra một số lỗi sau:
o Lỗi SQL Injection
o Lỗi User Enumeration
o Kiểm tra lỗ hổng cho phép dị đốn mật khẩu
- Kịch bản kiểm thử c thể đ ợc trình bày định dạng excel đ ợc đính kèm trong ph l c c a đồ án.
4.2.2. Ch c năng so n th o vƠ g i e mail
Trong luồng công việc diễn ra từ khi bắt đầu soạn thảo đến lúc thực hiện gửi email thành cơng, chúng ta có thể phải thực hiện thao tác đính kèm file (attack file), do vậy attack file đ ợc coi là một ch c năng nhỏ trong ch c năng soạn thảo và gửi email và chúng ta cũng phải tiến hành kiểm thử ch c năng này.
- Ch c năng Attack file:
Giao diện: Kiểm tra giao diện chung
Ch c năng: Chúng ta phải kiểm tra đ ợc các tr ng hợp chính:
o Attack file có dung l ợng hợp lệ < 10240 kb thành công
o Kiểm tra thơng báo lỗi khi Attack file có dung l ợng > 10240 kb
o Kiểm tra thực hiện ch c năng c a button Chọn file, Add, Cancel, Attack, Help - Ch c năng chính soạn thảo và gửi email:
Giao diện: Kiểm tra giao diện chung, kiểm tra các combo-box
Ch c năng: Kịch bản kiểm thử phải đáp ng bao quát đ ợc một số ch c năng:
o Kiểm tra soạn thảo và gửi email thành cơng khơng có file attack
o Kiểm tra soạn thảo và gửi email thành cơng khi có file attack
Đ ÁN T T NGHI P Đ I H C Ch ng 4: Th nghi m
o Kiểm tra việc gửi email cho nhiều ng i một lúc
o Kiểm tra lựa chọn gửi Cc/Bcc
o Kiểm tra đ ợc điều kiện chỉ cho phép gửi email nội bộ (các địa chỉ email c a Viettel)
o Kiểm tra nhận email thông báo không gửi đ ợc email khi gửi email đến các địa chỉ email không phải email c a Viettel
o Kiểm tra cảnh báo khi nhập vào địa chỉ email Viettel khơng có thật An tồn thơng tin:
o Việc kiểm tra an tồn thơng tin t ơng tự nh với ch c năng đăng nhập, bổ xung thêm việc kiểm tra lỗi Session fixation và lỗi xác thực phân quyền.
- Kịch bản kiểm thử c thể đ ợc trình bày định dạng excel đ ợc đính kèm trong ph l c c a đồ án.
4.4. K ch b n ki m th t đ ng
Do những hạn chế về kinh nghiệm và th i gian tìm hiểu tool và sự ph c tạp c a ng d ng email, đồ án trình bày demo một số case cơ bản c a ch c năng đăng nhập bằng hai công c là Selenium IDE và Selenium RC và thực hiện báo cáo kết quả dựa trên framework kiểm thử JUnit. - Đăng nhập thành công bằng firefox.
import com.thoughtworks.selenium.*; import org.junit.After;
import org.junit.Before; import org.junit.Test;
public class DangNhapFirefox { public Selenium selenium;
@Before
public void setUp() throws Exception {
selenium = ne w DefaultSelenium("localhost", 4444,
"*firefox", "https://mail.viettel.com.vn/"); selenium.start(); }
@Test
public void testDangnhapjunit4() throws Exception {
selenium.open("/"); selenium.type("name=user", "trangnh7"); selenium.type("name=password", "meo@Dien07"); selenium.click("id=button"); selenium.waitForPageToLoad("30000"); } @After
public void tearDown() throws Exception {
selenium.stop(); }
}
Đ ÁN T T NGHI P Đ I H C Ch ng 4: Th nghi m
- Đăng nhập thành công bằng Internet Explore:
import com.thoughtworks.selenium.*; import org.junit.After;
import org.junit.Before; import org.junit.Test;
public class DangNhapIE { public Selenium selenium;
@Before
public void setUp() throws Exception {
selenium = ne w DefaultSelenium("localhost", 4444,
"*iexplore", "https://mail.viettel.com.vn/"); selenium.start(); }
@Test
public void testDangnhapjunit4() throws Exception {
selenium.open("/"); selenium.type("name=user", "trangnh7"); selenium.type("name=password", "meo@Dien07"); selenium.click("id=button"); selenium.waitForPageToLoad("30000"); } @After
public void tearDown() throws Exception {
selenium.stop(); }
}
Đ ÁN T T NGHI P Đ I H C Ch ng 4: Th nghi m
- Đăng nhập thành công Googlechrome:
import com.thoughtworks.selenium.*; import org.junit.After;
import org.junit.Before; import org.junit.Test;
public class DangNhapGC { public Selenium selenium;
@Before
public void setUp() throws Exception {
selenium = ne w DefaultSelenium("localhost", 4444,
"*googlechrome", "https://mail.viettel.com.vn/"); selenium.start();
}
@Test
public void testDangnhapjunit4() throws Exception {
selenium.open("/"); selenium.type("name=user", "trangnh7"); selenium.type("name=password", "meo@Dien07"); selenium.click("id=button"); selenium.waitForPageToLoad("30000"); } @After
public void tearDown() throws Exception {
selenium.stop(); }
}
Đ ÁN T T NGHI P Đ I H C Ch ng 4: Th nghi m