Sau khi thực chạy chương trình duyệt tất cả các trường hợp kiểm thử khi thực hiện đăng nhập, kết quả thu được cụ thể:
46
Kết quả ghi ra Excel:
Kết quả được ghi vào tệp tin Excel, ghi lại các trường hợp kiểm thử và trạng thái là thành công hay thất bại.
Hình 4.14. Kết quả ghi ra kiểm thử Login ghi ra tệp tin Excel.
Trường hợp 1 với việc nhập User name là anhnv, Password là anhnvpwd123, Ngôn ngữ là Vietnamese-VN => Ở cột Results thông báo là đăng nhập thành công.
Trường hợp 2 với việc nhập User name là anhnv, Password là anhnvpwd123, Ngôn ngữ là English (United Kingdom) => Ở cột Results thông báo là đăng nhập thành công.
Trường hợp 3 với việc nhập User name là anhnv, Password để ” trống”, Ngôn ngữ là Vietnamese-VN => Ở cột Results thông báo là đăng nhập Thất bại.
Trường hợp 4 với việc nhập User name để “trống”, Password là anhnvpwd123, Ngôn ngữ là Vietnamese-VN => Ở cột Results thông báo là đăng nhập Thất bại.
Trường hợp 5 với việc nhập User name để “trống”, Password để “trống”, Ngôn ngữ là Vietnamese-VN => Ở cột Results thông báo là đăng nhập Thất bại.
Kết quả ghi ra XML:
Kết quả được ghi nhận vào tệp tin XML, liệt kê tất cả các trường hợp kiểm thử
47
Với mỗi thẻ <LoginTest name = “TestLong1”> Ghi nhận các trường hợp kiểm thử xem có đúng không </LoginTest>. Ở hình trên có thể thấy
<LoginTest name="TestLogin1"> <username>anhnv</username> <password>anhnvpwd123</password> <Language>Vietnamese-VN</Language> </LoginTest> -> Nhập Username là anhnv -> Mật khẩu là anhnvpwd123 -> Ngôn ngữ là Vietnamese-VN
Màn hình đăng nhập thành công với Username là anhnv , Password là anhvnpwd123 và ngôn ngữ là Vietnamese-VN.
Hình4.15. Trường hợp đăng nhập thành công
Trường hợp đăng nhập không thành công với việc để Username và Password để trắng.
48
4.5. Ý nghĩa chƣơng trình kiểm thử tự động
Chương trình kiểm thử tự động ứng dụng Web đã được thực nghiệm với hơn 10 Website khác nhau thỏa mãn cấu trúc của bài toán. Và kết quả đạt được đáp ứng với yêu cầu của bài toán. Với việc kiểm thử thành công với các ứng dụng Web khác nhau, cho thấy ý nghĩa quan trọng trong việc thực hiện kiểm thử tự động, đồng thời giải quyết được các vấn đề mà kiểm thử thủ công gặp phải như một số kiểm thử bị bỏ qua, không thể ghi nhận được lỗi phát sinh…Và cũng với kiểm thử tự động sẽ giúp cho việc kiểm thử đỡ tốn thời gian và buồn tẻ hơn.
Với việc xây dựng và thực nghiệm thành công chương trình kiểm thử tự động đăng nhập ứng dụng Web, sẽ làm nền tảng để có thể phát hiển một chương trình hoản chỉnh đảm bảo có thể kiểm thử toàn bộ ứng dụng một ứng dụng Web cụ thể.
Ngoài ra trong nội dung luận văn tôi còn xây dựng một số chương trình kiểm thử như: kiểm thử tự động việc đăng nội dung bài viết, kiểm thử việc ẩn hiện bài viết, kiểm thử việc tìm kiếm google chi tiết có thể thao khảo ở phục lục B.
49
CHƢƠNG 5 KẾT LUẬN
Ngày này với cơ sở hạ tầng về mạng Internet phát triển rất mạnh mẽ, cùng với đó là sự ra đời của hàng hoạt các ứng dụng Web để đáp ứng nhu cầu của người sử trong mọi lĩnh vực của cuộc sống. Cùng với sự đa dạng và phức tạp của các ứng dụng Web là đòi hỏi của người dùng ngày một cao hơn như ứng dụng yêu cầu thân thiện hơn, sử dụng nhanh hơn, các chức năng thì thuận tiện với thao tác của người sử dụng, đặc biệt là không có lỗi khi sử dụng.
Với đề tài “Nghiên cứu về kiểm thử mô hình ứng dụng Web” nội dung luận văn đã giới thiệu về kiểm thử và kiểm thử về các thành phần ứng dụng Web. Đồng thời tìm hiểu các thành phần của công cụ kiểm thử nguồn mở WebDriver cung cấp các thư viện các hàm API để giúp cho việc xây dựng chương trình kiểm thử tự động ứng dụng Web. Với việc xây dựng và thực nghiệm thành công chương trình kiểm thử tự động việc đăng nhập vào ứng dụng Web và một số chương trình kiểm thử việc đăng tin, ẩn bài tin [Phục lục B] tự động không chỉ chứng minh được việc sử dụng công cụ kiểm thử tự động có hiệu quả hơn việc kiểm thử thủ công mà còn có thể áp dụng vào thực tế với hầu hết các ứng dụng thỏa mãn cấu trúc của chương trình nghĩa là thỏa mãn yêu cầu bài toán (Chương 3).
Hƣớng phát triển
Nội dung trong luận văn đã nêu lên được các nội dung của kiểm thử và kiểm thử ứng dụng Web. Cùng với đó là đã xây dựng thành công chương trình kiểm thử tự động, tuy nhiên, chương trình chỉ tập trung kiểm thử một số thành phần nhất định của một ứng dụng Web, và chưa mang tình chất tổng qua cho cả ứng dụng Web. Chính vì vậy mà hướng nghiên cứu tiếp theo của tôi sẽ tối ưu hóa chương trình hiện tại và xây dựng một công cụ kiểm thử đầy đủ để thực hiện việc kiểm thử toàn bộ ứng dụng Web một cách tổng thể không chỉ là kiểm thử chức năng nữa mà còn có thể kiểm thử hiệu năng, kiểm thử giao diện,…
50
TÀI LIỆU THAM KHẢO Tiếng Việt
[1] Thạch Bình Cường (2011), Kiểm thử và đảm bảo chất lượng phần mềm, Đại học Bách khoa Hà Nội.
[2] Pressman R (1997), Introduction to Software Engineering, Ngô Trung Việt dịch, NXB Giáo dục.
[3] Trung tâm Học liệu (2009), Kiểm thử phần mềm, Đại học Thái Nguyên
[4] Nguyễn Xuân Huy (2007), Công nghệ phần mềm, NXB Đại học Tổng hợp TP. Hồ Chí Minh.
Tiếng Anh
[5] Hung Q.Nguyen, Bob Johnson, Michael Hacket (2009), Testing Applications on the Web.
[6] Glenford J.Myers (2004), The Art Of Software Testing, pp 4-5.
[7] Jeffrey Feldstein (2005-2006), Model-Based Testing for Java and Web applications.
[8] Oluwaseun Akinmade (2008), Automated Model-Based Testing of Web Applications.
Website tham khảo
[9] http://www.softwaretestinghelp.com/web-application-testing/
[10] http://www.softwaretestinghelp.com/web-application-testing/
51
PHỤC LỤC
Phụ lục A. Chƣơng trình kiểm thử đăng nhập tự động ứng dụng Web
1. Chƣơng trình đọc tệp tin Excel đầu vào chứa chứa tất cả các trƣờng hợp kiểm thử:
Đoạn lệnh giúp cho việc đọc thông tin trong tệp tin Excel: sheetName: tên của Sheet, colNum: số thứ tự của Cột, rowNum: số thứ tự của Hàng.[13]
public String getCellData(String sheetName,int colNum,int rowNum){
try{
if(rowNum <=0)
return"";
int index = workbook.getSheetIndex(sheetName);
if(index==-1)
return"";
sheet = workbook.getSheetAt(index);
row = sheet.getRow(rowNum-1);
if(row==null)
return"";
cell = row.getCell(colNum);
if(cell==null)
return"";
if(cell.getCellType()==Cell.CELL_TYPE_STRING)
returncell.getStringCellValue();
elseif(cell.getCellType()==Cell.CELL_TYPE_NUMERIC ||
cell.getCellType()==Cell.CELL_TYPE_FORMULA ){
.DAY_OF_MONTH) + "/" + cellText; } return cellText;
}elseif(cell.getCellType()==Cell.CELL_TYPE_BLANK)
return""; else
return String.valueOf(cell.getBooleanCellValue()); }
catch(Exception e){
e.printStackTrace();
return"row "+rowNum+" or column "+colNum +" does not exist in xls";
} }
2. Hàm thực hiện việc kiểm thử:
52
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost/manews.vn/administrator/");
//driver.manage().window().maximize();
Xls_Reader data = readFile("C:\\Users\\Nguyen Viet
Anh\\workspace\\Webdriver_info\\src\\Data.xlsx"); String username="";
String password=""; String language="";
for(int i=2;i<=data.getRowCount("LoginTest");i++) {
username = data.getCellData("LoginTest", "username", i); password = data.getCellData("LoginTest", "password", i); language = data.getCellData("LoginTest", "Language", i);
//Làm chậm thời gian đang nhập //Thread.sleep(5000L);
driver.findElement(By.id("modlgn_username")).sendKeys(username);
driver.findElement(By.id("modlgn_passwd")).sendKeys(password); WebElement select = driver.findElement(By.tagName("Select")); List<WebElement> allOptions =
select.findElements(By.tagName("option"));
for(WebElement option: allOptions){
if(option.getText().equals(language)){ option.click(); break; } } //Thread.sleep(5000L);
WebElement element = driver.findElement(By.className("button1")); element.submit();
String results="";
try {
String ele=driver.findElement(By.id("modlgn_username")).toString();
if(ele.length()>=0){ results="Lỗi";
//Chụp lại màn hình
captureScreen(driver);
//Ghi kết quả vào Excel
writeTestResult(username,password,language,results,i);
// Ghi kết quả vào file Xml
writeToXML(username,password,language,i-1);
continue; }
} catch (NoSuchElementException e) {
53
results="Thành công";
//Chụp màn hình
captureScreen(driver);
//Ghi kết quả vào file Excel
writeTestResult(username,password,language,results,i);
//Ghi kết quả vào file XML
writeToXML(username,password,language,i-1);
//Tìm phần tử Logout
WebElement logoutLink = driver.findElement(By.xpath(".//*[@id='module-
status']/span[3]/a"));
logoutLink.click();
while(true){
try{
String ele=driver.findElement(By.id("modlgn_username")).toString();
if(ele.length() >=0){
break; }
}catch(NoSuchElementException ex){ }
}
continue; }
}
//Lệnh thực hiện ghi ra file
workbook.write(fileOut);//Ghi vào bộ nhớ buffer mã thôi
fileOut.flush();//Ghi ra file
fileOut.close();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("C:\\LoginTest.xml"));
//Thread.sleep(5000L);
driver.close(); }
3. Hàm chụp kết quả kiểm thử:
privatevoid captureScreen(WebDriver driver) throws IOException{
//Chụp lại màn hình
DateFormat dateFormat = new
SimpleDateFormat("dd_MM_yyy_HH_mm_ss"); Calendar cal = Calendar.getInstance();
File scrFile =
((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new
File(System.getProperty("user.dir") + "\\screenshots\\" + "LoginWebDriverTest_" + dateFormat.format(cal.getTime()) +".png"));
54
4. Hàm ghi kết quả ra XML:
privatevoid writeToXML(String username, String password, String language, int index){
try {
// staff
Element staff = doc.createElement("LoginTest");
rootElement.appendChild(staff);
// Đặt thuộc tính
Attr attr = doc.createAttribute("name"); attr.setValue("TestLogin"+index); staff.setAttributeNode(attr);
// Username
Element user = doc.createElement("username");
user.appendChild(doc.createTextNode(username));
staff.appendChild(user);
Element pass = doc.createElement("password");
pass.appendChild(doc.createTextNode(password));
staff.appendChild(pass);
} catch (Exception tfe) { tfe.printStackTrace(); }
}
Phụ lục B. Trƣờng hợp kiểm thử đăng bài viết mới
Các trường hợp để thực hiện việc kiểm thử cho việc tạo bài viết mới trong ứng dụng Web là rất lờn, vì vậy trong phạm vi bài luận văn này chỉ xin trình một trường kiểm thử trong tập hợp các trường hợp kiểm thử. Kiểm thử việc đăng nhập và tạo bài viết sau đó xem bài viết đó có được đăng trên trang Web không?
Đọc một tệp tin đầu vào:
Hình B.1: Tệp tin đầu vào tạo bài viết.
1. Đoạn chƣơng trình thực hiện việc tạo bài viết:
publicclass ArticleTest {
publicvoid Article_Title()throws IOException, InterruptedException{
55
WebDriver driver = new FirefoxDriver();
//Gọi trang đăng nhập
driver.get("http://localhost/manews.vn/administrator/");
WebElement element = driver.findElement(By.className("button1")); element.submit();
//Thêm bài viết mới với trường hợp nhập Title
driver.findElement(By.xpath("//*[@id='cpanel']/div[2]/div/a")).click(); driver.findElement(By.xpath("//*[@id='toolbar-new']/a")).click()
//Dừng màn hình
Thread.sleep(5000L);
driver.findElement(By.xpath(".//*[@id='home_right1']")).click(); driver.switchTo().frame("text_ifr");
WebElement txtArea = driver.findElement(By.id("tinymce")); txtArea.sendKeys(Content);
driver.switchTo().defaultContent();
Thread.sleep(5000L);
driver.findElement(By.xpath("//*[@id='toolbar-save']/a")).click();
Thread.sleep(5000L);
driver.get("http://localhost/manews.vn/");
Thread.sleep(5000L);
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("D:\\Thesis\\News.png"));
driver.findElement(By.linkText("Ngân hàng đòi khách hơn 6.800 chỉ vàng")).click();
File scrFileTitle = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFileTitle, new File("D:\\Thesis\\Article.png")); }
2. Kết quả chạy chƣơng trình:
56
Hình B.3. Giao diện truy cập vào bài viết vừa được tạo.
Phụ lục C. Trƣờng hợp kiểm thử với Ẩn/Hiện bài viết
Khi bài viết được tạo ra nó có thể Ẩn/Hiện bài viết trong ứng dụng, giả sử như phải kiểm tra rất nhiều bài viết xem bài viết Ẩn/Hiện nếu thực hiện thủ cồng thì sẽ phải thao tác rất nhiều. Kiểm thử Ẩn/Hiện bài viết sẽ giúp cho việc kiểm thử này trở lên dễ dàng hơn rất nhiều.
1. Hàm kiểm thử ẩn/hiện bài viết
publicclass EditArticle {
publicstaticvoid main(String[] args) throws IOException { WebDriver driver = new FirefoxDriver();
driver.get("http://localhost/manews.vn/administrator/"); Xls_Reader data = new Xls_Reader("C:\\Users\\Nguyen Viet Anh\\workspace\\Webdriver_info\\src\\Data.xlsx");
String values = data.getCellData("Droplist", "checkbox", 2); String selections[] = values.split(",");
//Kiểm thử việc thực hiện bật các
String xpath_start =
"//*[@id='elementbox']/div[2]/form/table[2]/tbody/tr["; String xpath_end = "]/td[5]/span/a/img";
for(int i = 1; i<=selections.length; i++)
driver.findElement(By.xpath(xpath_start + selections[i-1] + xpath_end)).click();
} }
57
2. Kết quả thực hiện chƣơng trình:
Hình C.1. Trước khi chạy chương trình.
Hình C.2. Sau khi thực hiện chương trình.
Phụ lục D. Một số hàm API khác 1. Kiểm thử tìm kiếm Google:
publicclass GoogleTest {
publicstaticvoid main(String[] args) {
WebDriver driver = new FirefoxDriver();
// Truy cập vào website google
driver.get("http://www.google.com.vn"); // Tìm phần từ có tên là q
WebElement element = driver.findElement(By.name("q")); // Nhập thông tin tìm kiếm
element.sendKeys("Kiểm thử Ứng dụng Web"); element.submit();
58
System.out.println("Tiều đề trang: " + driver.getTitle()); }
}
2. Kiểm thử CheckBox với website http://www.jobserve.com
publicclass JobServe {
publicstaticvoid main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("http://www.jobserve.com/");
driver.findElement(By.xpath("//*[@id='ddcl-selInd']/span")).click();
Xls_Reader data = new Xls_Reader("C:\\Users\\Nguyen Viet
Anh\\workspace\\Webdriver_info\\src\\Data.xlsx");
String values = data.getCellData("Droplist", "checkbox", 2); String selections[] = values.split(",");
//Tìm phần tử đầu tiên và thực hiện check theo tệp tin đầu vào
String xpath_start =
"html/body/form/div[4]/div[1]/div[9]/div[1]/div/div[2]/div[2]/div/div[1]/div[2]/div/div/div["; String xpath_end = "]/input";
//check step 5
for(int i = 1; i<=selections.length; i++)
driver.findElement(By.xpath(xpath_start + selections[i-1] +
xpath_end)).click(); }