自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

自動化功能性測試的分步指南

譯文 精選
開發(fā) 測試
本文將和您探討如何基于Web應(yīng)用,設(shè)計出功能性測試用例,并使用典型的測試工具對其自動化。

譯者 | 陳峻

審校 | 孫淑娟

眾所周知,無論是桌面應(yīng)用、Web應(yīng)用、還是移動應(yīng)用,在投放到市場之前,都需要經(jīng)過嚴格的測試。而由于功能性測試能夠檢驗應(yīng)用程序的各項操作與功能,是否符合既定的需求規(guī)范,因此它往往被認為是在整個測試生命周期中,最關(guān)鍵且成本最高的一項活動。對此,自動化的功能性測試則能夠在提升軟件質(zhì)量的同時,降低有效的成本。下面,我將和您一起探討如何基于Web應(yīng)用,設(shè)計出功能性測試用例,并使用典型的測試工具對其自動化。

功能性測試的流程與分類

在功能性測試中,測試人員會根據(jù)所有的功能需求規(guī)范,驗證被測軟件是否符合要求,是否能夠按照預(yù)期工作,及時發(fā)現(xiàn)它與規(guī)范之間的“差異”。簡單而言,這是一種黑盒技術(shù),測試人員并不知道軟件的內(nèi)部邏輯與細節(jié)(如圖1),只需讓測試用例遵從規(guī)范開展即可。通常,功能性測試的流程包括:

1.向被測系統(tǒng)提供測試性輸入

2.從被測系統(tǒng)獲取結(jié)果輸出

3.驗證實際輸出是否符合規(guī)范所預(yù)期的輸出

圖1-功能性黑盒測試

從測試類型上分,功能性測試包括如下幾種(如圖2):

  • 單元
  • 冒用
  • 健全測試(Sanity)
  • 集成
  • 系統(tǒng)
  • 回歸測試
  • 其他更多

圖2-功能性測試類型

在此,我將重點介紹用于測試應(yīng)用功能的集成性系統(tǒng)測試。

自動化功能性測試

從測試伊始,我們就知道可以采取手動與自動兩種不同的執(zhí)行方式。其中,手動測試是指測試人員需要直接與應(yīng)用程序進行交互;而自動化測試是指測試人員使用諸如Maveryx之類的自動化工具,通過編程的方式、或基于腳本來自動實現(xiàn),以及在無代碼的自動化(例如,關(guān)鍵字驅(qū)動方法)環(huán)境中實現(xiàn)。

注意,此處的基于腳本的測試是指用Java、C#和Python等編程語言來編寫測試腳本。當(dāng)然,這對測試人員的編程水平要求較高。而無代碼測試則是構(gòu)建在諸如:從下拉菜單中選擇,或者通過拖放測試組件等方式之上。因此,它對于測試人員的編程水平要求不高。

一個測試用例

許多Web應(yīng)用都離不開用戶登錄這一基本功能。下面,我將在https://opensource-demo.orangehrmlive.com/上,擬定如下功能規(guī)范:

  • 用戶可以根據(jù)登錄頁面上的提示,使用用戶名和密碼憑證(如圖3)登錄并訪問OrangeHRM演示系統(tǒng)。

圖3-OrangeHRM演示網(wǎng)站

  • 當(dāng)用戶輸入有效的用戶名和密碼,并單擊登錄按鈕時,用戶可以看到應(yīng)用的儀表板界面(如圖4)。

圖4-儀表板網(wǎng)頁

  • 當(dāng)用戶輸入無效的名稱和/或密碼,并單擊登錄按鈕時,系統(tǒng)會顯示一條錯誤消息:“無效憑據(jù)”(如圖5)。

圖5-無效憑據(jù)錯誤

  • 如果用戶名或密碼為空,單擊登錄按鈕,系統(tǒng)將顯示錯誤消息:“用戶名不能為空”或“密碼不能為空”(如圖6)。

圖6-用戶名和密碼為空的錯誤

由上述規(guī)范可知,我們需要設(shè)計針對如下方面的功能性測試用例:

測試用例名稱

測試用例的描述

預(yù)期輸出

TC_001號


輸入有效的用戶名和有效的密碼,然后單擊登錄按鈕。


用戶登錄到應(yīng)用程序,并訪問位于??https://opensource-demo.orangehrmlive.com/index.php/dashboard?? 的儀表板頁面

TC_002號


輸入無效用戶名和有效的密碼,然后單擊登錄按鈕。


錯誤:“無效憑據(jù)?!?/p>

用戶仍在登錄頁面??https://opensource-demo.orangehrmlive.com/index.php/auth/validateCredentials?

TC_003號


輸入有效的用戶名和無效密碼,然后單擊登錄按鈕。


錯誤:“無效憑據(jù)。”

用戶仍在登錄頁面??https://opensource-demo.orangehrmlive.com/index.php/auth/validateCredentials?


TC_004號

輸入無效用戶名和無效密碼,然后單擊登錄按鈕。


錯誤:“無效憑據(jù)?!?/p>

用戶仍在登錄頁面??https://opensource-demo.orangehrmlive.com/index.php/auth/validateCredentials?

TC_005號


留下空白的用戶名和空白的密碼,然后單擊登錄按鈕。


錯誤:“用戶名不能為空?!?/p>

用戶仍在登錄頁面??https://opensource-demo.orangehrmlive.com/?

TC_006號


留下空白的用戶名并輸入有效的密碼,然后單擊登錄按鈕。


錯誤:“用戶名不能為空?!?/p>

用戶仍在登錄頁面上??https://opensource-demo.orangehrmlive.com/??

TC_007號


輸入有效的用戶名并留下空白的密碼,然后單擊登錄按鈕。


錯誤:“密碼不能為空?!?/p>

用戶仍在登錄頁面https://opensource-demo.orangehrmlive.com/ 

讓我們采取如下步驟來測試第一個測試用例(TC_001):

測試步驟(/輸入)

預(yù)期輸出

啟動瀏覽器


導(dǎo)航到OrangeHRM演示網(wǎng)站:??https://opensource-demo.orangehrmlive.com/??

OrangeHRM演示網(wǎng)站將通過URL-- ??https://opensource-demo.orangehrmlive.com/?? 被打開


輸入有效用戶名?“Admin”

用戶名字段被填如“Admin”

輸入有效密碼?“ admin123”

密碼字段已填充

單擊登錄按鈕

儀表板頁面通過??https://opensource-demo.orangehrmlive.com/index.php/dashboard??被顯示

自動化功能性測試腳本

我將使用??Maveryx???和??Java??來自動化其功能性測試。其中,Maveryx是一種自動化的功能和回歸測試工具。它提供了功能、回歸、用戶界面、無代碼、以及數(shù)據(jù)驅(qū)動測試等自動化測試功能。它能夠支持包括基于Web、.Net、Java等一系列應(yīng)用。下面我將通過代碼的形式,逐步展示編寫TC_001測試用例的腳本:

1.啟動瀏覽器。

Java
//launch Chrome browser
Bootstrap.startApplication(chrome);

//new browser instance
GuiBrowser browser = new GuiBrowser();

2.通過URL--https://opensource-demo.orangehrmlive.com/導(dǎo)航到OrangeHRM演示網(wǎng)站。

Java
//OrangeHRM demo Website page URL
String pageURL = "https://opensource-demo.orangehrmlive.com/";

//navigate to the OrangeHRM demo Website
browser.navigateTo(pageURL);

//check the landing page URL
assertEquals(pageURL, browser.getCurrentPageUrl());

在此,我建議您使用斷言,來驗證預(yù)期的結(jié)果(如圖7)。如果實際結(jié)果與斷言的預(yù)期結(jié)果相匹配,則該測試用例算作通過,否則算作失敗。

圖7-JUnit斷言列表

3.在用戶名字段處輸入合法的數(shù)值“Admin”。

Java
//the username
String username = "Admin";

//the Username text field
GuiText usrName = new GuiText("Username");
//set the username
usrName.setText(username);

//check that the username has been correctly inserted
assertEquals(username, usrName.getText());

不同于??Selenium??,Maveryx并不使用包括XPath的“定位器”,來識別它與測試腳本通過交互而復(fù)制過來用戶的操作元素。用戶可以直接使用Maveryx,來描述待測試的UI元素,就像它們出現(xiàn)在應(yīng)用程序中一樣。在本例中,我使用“username”作為用戶名文本字段的占位符,來識別對象(如圖8)。

測試對象通??梢栽谶\行時中被直接識別,而無需使用任何預(yù)先錄制(pre-recorded)的UI映射,或測試對象與鏡像存儲庫。

圖8-用戶名文本字段

4.輸入有效的Password=“admin123”來填充密碼字段。

Java
//the password
String pwd = "admin123";

//the Passoword text field
GuiPasswordText password = new GuiPasswordText("Password");
//set the password
password.setText(pwd);

//check that the password has been correctly inserted
assertEquals(pwd, password.getText());

密碼的文本字段由其占位符“password”來標(biāo)識(如圖9)。

圖9-密碼文本字段

5.單擊登錄按鈕,應(yīng)用將加載儀表板頁面https://opensource-demo.orangehrmlive.com/index.php/dashboard,如圖10。

Java
//click The Login button
new GuiButton("LOGIN").click();

//check that the header "Dashboard" is present (fig.10)
new GuiHtmlElement("Dashboard", AccessibleRoleMaveryx.WEB_H1).waitForObject(5, 1);

//the Dashboard page URL
String dashboardURL = "https://opensource-demo.orangehrmlive.com/index.php/dashboard";
//check the Dashboard page URL
assertEquals(dashboardURL, new GuiBrowser().getCurrentPageUrl());

圖10-“儀表板”的標(biāo)題

根據(jù)上述邏輯,我們便可以開始執(zhí)行測試腳本了。Maveryx將啟動Chrome瀏覽器,并在執(zhí)行代碼時,打開OrangeHRM的登錄頁面。然后,它將使用相關(guān)憑據(jù)進行登錄,并通過斷言檢查的方式,比較預(yù)期和實際結(jié)果。

同理,測試用例2(TC_002)將會生成如下Maveryx測試腳本:

Java
//invalid username
String username = "Admi";

//the Username text field
GuiText usrName = new GuiText("Username");

//set the invalid username
usrName.setText(username);

//check that the username has been correctly inserted
assertEquals(username, usrName.getText());

//the password (valid)
String pwd = "admin123";

//the Passoword text field
GuiPasswordText password = new GuiPasswordText("Password");
//set the password
password.setText(pwd);

//check that the password has been correctly inserted
assertEquals(pwd, password.getText());

//click The Login button
new GuiButton("LOGIN").click();

//check that the message "Invalid credentials" is present (fig.5)
new GuiHtmlElement("Invalid credentials").waitForObject(5, 1);

按照這樣的思路和方法,我們還可以編寫出適用于不同場景的測試用例。

結(jié)論

如前文所示,功能性測試是最容易發(fā)現(xiàn)軟件缺陷的一種測試類型,也是最考驗我們編寫測試用例的能力與邏輯的環(huán)節(jié)。希望上面探討的各個功能性測試案例,能夠協(xié)助您從現(xiàn)有的規(guī)范中,創(chuàng)建出能夠符合實際要求的自動化功能性測試用例。 

譯者介紹

陳峻 (Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項目實施經(jīng)驗,善于對內(nèi)外部資源與風(fēng)險實施管控,專注傳播網(wǎng)絡(luò)與信息安全知識與經(jīng)驗;持續(xù)以博文、專題和譯文等形式,分享前沿技術(shù)與新知;經(jīng)常以線上、線下等方式,開展信息安全類培訓(xùn)與授課。

原文標(biāo)題:??Automated Functional Testing: A Step-by-Step Guide??,作者:Gabriele Piantadosi

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2021-12-29 21:15:08

軟件測試軟件開發(fā)

2010-08-10 14:18:15

RationalFunFlex

2011-04-18 12:52:37

自動化測試功能測試軟件測試

2012-02-27 17:34:12

Facebook自動化

2023-05-08 15:59:27

UI自動化腳本鴻蒙

2018-12-12 08:15:13

物聯(lián)網(wǎng)設(shè)備物聯(lián)網(wǎng)IOT

2024-09-25 08:46:31

2022-02-17 10:37:16

自動化開發(fā)團隊預(yù)測

2021-02-04 09:00:00

跨瀏覽器移動測試工具

2009-07-06 10:08:03

Flex自動化

2023-03-27 15:37:43

自動化測試開發(fā)

2015-03-19 09:35:36

OpenStack平臺性能測試Rally功能測試Tempest

2022-06-08 14:22:55

自動化測試測試

2022-05-10 11:18:42

自動化測試軟件測試

2009-08-12 18:37:46

VSTS2005單元測

2022-11-23 15:57:40

測試開發(fā)Java

2021-09-03 09:56:18

鴻蒙HarmonyOS應(yīng)用

2010-08-10 14:34:37

QTPFlex

2013-05-16 10:58:44

Android開發(fā)自動化測試

2014-04-16 14:15:01

QCon2014
點贊
收藏

51CTO技術(shù)棧公眾號