1. 程式人生 > >VS2010測試功能之旅:編碼的UI測試(1)

VS2010測試功能之旅:編碼的UI測試(1)

VS2010測試功能之旅

——編碼的UI測試系列之一

RealZhao2011214

前言

研究VS2010的自動化測試有一段時間了,在研究的過程中,發現網上的VS2010相關的測試資料十分稀少,這給學習帶來比較大的困難。幸運的是,自己因為常用QuickTest Professional做自動化測試,並且對.Net程式碼比較瞭解,使得在學習的過程中並不是特別困難,對UI CODED TEST也已經有一定了解。本著與大家交流,共同進步的想法,思考之後,決定寫這些隨筆,來對VS2010的測試功能做一些探索和總結。希望大家能夠多多指教!

自動化測試

自動化測試指軟體測試的自動化,軟體測試就是在預設條件下執行系統或應用程式,評估執行結果,預先條件應包括正常條件和異常條件。

自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程。通常,在設計了測試用例並通過評審之後,由測試人員根據測試用例中描述的規程一步步執行測試,得到實際結果與期望結果的比較。在此過程中,為了節省人力、時間或硬體資源,提高測試效率,便引入了自動化測試的概念。

VS2010編碼的UI測試,屬於自動化測試中的一種,它可測試應用程式的使用者介面是否功能正常。 編碼的 UI 測試對應用程式的使用者介面控制元件執行操作,並驗證是否以正確的值顯示了正確的控制元件。

一個簡單的示例

在上面對於自動化測試的介紹中已經提到,編碼的UI測試將對應用程式的使用者介面進行操作之後進行驗證,對於介面的操作,我們需要預先錄製或者直接編寫(日後會介紹直接編寫的方式),在這個簡單的例項中,我們將先使用錄製進行操作,錄製完畢之後,使用回放功能進行回放(類似於錄音機,錄製之後再播放)

一.新建測試專案

1.首先開啟VS2010,選擇測試à新建測試

 

2.選擇編碼的UI測試,簡歷一個UI測試,名稱為CodedUITest1.cs

 

3.建立完成,我們可以看到建立之後,專案的目錄結構如下

下面做一個簡單的介紹

Solution Items:存放該解決方案中各個測試專案公用的設定

Local.testsetings檔案和TraceAndTestImpact.testsettings是對解決方案中的測試進行整體上的設定,這個是建立測試解決方案的時候預設自動建立的兩項,一個用於執行,一個用於除錯,當然這兩項是可以刪除的,testsettings型別檔案可以通過右擊

Solution Items的時候點選新增新建項建立

TestProject1.vsmdi是用於對專案中建立的測試method進行組織和管理,讓其能組織成流程線,一個個進行測試

TestProject:我們剛才建立的測試專案,可以看到剛才建立的UI測試CodedUITest1.cs

二.錄製程式並回放

1.假設我們現在有一個程式(這個示例程式在文章末尾有提供地址),現在我們需要對系統登入的部分進行測試,正確的使用者名稱為”Admin”,密碼為”123456”

測試的內容是:

(1).輸入錯誤的使用者名稱或輸入錯誤的密碼,檢測系統是否提示“使用者或密碼錯誤”

(2).輸入正確的使用者名稱和正確的密碼,檢測系統是否提示“登入成功”

程式的截圖如下所示:

2.現在我們可以開始進行錄製,將剛才的測試內容錄製成實際的操作

 

3.點選確定之後,可以看到螢幕的右下角彈出一個UI測試生成器,點選錄製之後,就可以進行操作了

 

4.之後首先輸入錯誤的使用者名稱和密碼,然後點選登入,之後彈出提示框“使用者名稱和密碼錯誤“

 

5.這個時候我們可以在錄製面板點選暫停錄製,然後點選”生成程式碼“,並將剛才的操作放入方法InputErrorUidPwd中(至於生成後的程式碼被放在了哪,現在可以先不用關心,最後我會進行說明)

 

6.這個時候點選錄製面板上的準星(這個時候準星已經Enable了),並一直按住滑鼠不放,將滑鼠拖到剛才的彈出框上面的文字再鬆開,然後測試生成器的物件庫視窗會自動彈出,VS2010將捕獲彈出框上的label物件,如下圖所示:

7.現在我們要進行第一個驗證,就是驗證這個彈出框使用者名稱或密碼錯誤!是否彈出來了,如果是,則測試通過,如果不是,則失敗,接著先前的步棸,首先要確認左邊的列表中“UI使用者名稱或者密碼錯誤Text“物件選中,之後選擇右邊的列表中的Exists屬性(該屬性表示label是否存在,存在則是True,不存在則是false),點選新增斷言

 

    然後彈出為Exists新增斷言的視窗,這裡我們需要選擇AreEqual,比較值是True,表示我們斷言使用者名稱或密碼錯誤這個label存在,如果執行測試的時候該label確實存在,則該測試步驟是通過的,否則就是失敗

    之後點選錄製面板的生成程式碼,為剛才新增的斷言生成方法AssertErrorWindow()(至於生成後的程式碼被放在了哪,現在可以先不用關心,最後我會進行說明)

 

8.然後我們繼續開始錄製,錄製開啟後,首先點選“使用者名稱或密碼錯誤“彈出框的確定,然後用上面介紹的同樣的方法,輸入正確的使用者名稱和密碼,判斷彈出框是否為登入成功,分別新增InputRightUidPwd()操作方法和AssertRightWinow()斷言方法,最後便可以錄製結束

9.之後我們可以點選執行來進行測試

之後VS2010會自動操作剛才演示的程式的登入視窗,然後報告測試結果

三.如果現在程式發生異常

假設現在剛才的示例程式,本來輸入錯誤的使用者名稱或密碼,應該彈出提示“使用者名稱或密碼錯誤”,現在因為開發人員一時疏忽,不慎將提示改成了亂碼“咪asd阿什頓”,那麼是否剛才錄製的測試能夠把這個測試出來呢?我們現在可以試試(這個錯誤的示例程式在文章最後也提供下載)

開始執行測試

最終不負我們所望,錯誤還是被測試出來了

四.錄製生成的程式碼被放在了哪裡?

    首先我們再看看專案的檔案結構

    可以發現剛才錄製之後,VS2010自動生成了UIMap.uitest檔案,我們自動生成的程式碼就放在UIMap.Designer.cs

    進入去檢視,可以看到剛才錄製為我們自動生成的四個方法InputErrorUidPwd()AssertErrorWinow()InputRightUidPwd()AssertRightWinow(),展開之後可以看到詳細操作

    而在CodeUITest1.cs檔案中,也自動添加了幾句程式碼,呼叫UIMap中錄製的測試操作

演示中提到的示例程式

說明:RightDemo.exe是演示中使用的沒有問題的程式,ErrorDemo.exe是演示中故意修改提示為亂碼的那個示例程式

下載點我

附:釋出計劃

編碼的UI測試系列之五:進階篇 常用測試要點和函式(1

編碼的UI測試系列之六:進階篇 常用測試要點和函式(2

編碼的UI測試系列之七:進階篇 UI測試之間的互相引用和測試組織

編碼的UI測試系列之八:高階篇 遠端呼叫其他機器進行測試

編碼的UI測試系列之九:高階篇 使用MS測試管理器組織測試

相關推薦

VS2010測試功能編碼UI測試1

VS2010測試功能之旅 ——編碼的UI測試系列之一 RealZhao,2011年2月14日 前言 研究VS2010的自動化測試有一段時間了,在研究的過程中,發現網上的VS2010相關的測試資料十分稀少,這給學習帶來比較大的困難。幸運的是,自己因為常用QuickTest Professional做

魔法web學習~咒語記錄~防忘記1

基本格式 <!DOCTYPE html> 版本 <html lang="en"> 使用語言 <head> 頭部     <meta charset="utf-8"> 字符集     <title></titl

敏捷開發績效管理敏捷開發生產率簡化功能點分析,NESMA,兩級簡化

這是敏捷開發績效管理的第七篇。(之一,之二,之三,之四,之五,之六,之七)續前文……功能點估算第一級簡化上次說到只用資料+操作就能準確計算規模,聽起來夠簡單了,但其實還不夠。誰能在剛拿出2頁紙的需求文件時(假設昨天老闆在酒桌上剛從客戶那記下來的),就猜出有多少個操作?而且還不

單元測試系列4使用Unitils測試DAO層

Spring 的測試框架為我們提供一個強大的測試環境,解決日常單元測試中遇到的大部分測試難題:如執行多個測試用例和測試方法時,Spring上下文只需建立一次;資料庫現場不受破壞;方便手工指定Spring配置檔案、手工設定Spring容器是否需要重新載入等。但也存在不足的地方,

UVM序列篇sequence和item

技術 一點 目標 idt 需要 開始 掛載 ron 前行 無論是自駕item,穿過sequencer交通站,通往終點driver,還是坐上sequence的大巴,一路沿途觀光,最終跟隨導遊停靠到風景點driver,在介紹如何駕駛item和sequence,遵守什麽交規,最終

Spark源代碼分析Task調度

oge 3.4 總結 utili filter 相關 .com ram 順序 話說在《Spark源代碼分析之五:Task調度(一)》一文中,我們對Task調度分析到了DriverEndpoint的makeOffers()方法。這種方法針對接收到的Re

Oracle數據庫中心雙活ASM vs VPLEX

復用 讀寫 並且 壓力測試 發出 我們 config 影響 計算節點 雙活方案對比:ASM vs V-PLEX 作者:王文傑 Oracle公司 Principle system analyst Oracle高級服務部 Oracle數據庫中心的災備的演變,經歷了多年的

python用戶輸入

老師 用法 inf 代碼 用戶輸入 display 用戶 -- class python之路:用戶輸入(一) 好了,現在我學了點博客的用法,現在不會像以前的那麽土了。好吧,不多說,我要講課了。 今天,我會用情景實例給大家說這個用戶輸入。 情景是:你是IT教育的python帶

linux學習2.基本指令2

inux 可執行文件 選項 說明 獨立 選項說明 img color 配置 一、在線求助:man page 與info page 1.man(manual:操作說明) page 我想查看日歷,所以我輸入man cal 效果如圖: 圖中CAL(1)中,在不同的指令中數字的含

C++11併發學習執行緒同步

有時候,在第一個執行緒完成前,可能需要等待另一個執行緒執行完成。C++標準庫提供了一些工具可用於這種同步操作,形式上表現為條件變數(condition variable)和期望(future)。 一.條件變數(condition variable) C++標準庫對條件變數有兩套實現:std::c

unittest單元測試框架unittest 框架的總結2

unittest 下的屬性 1.Unittest.TestCase:所有測試用例類繼承的基本類 2.Unittest.main():將一個單元測試模組變為可直接執行的測試指令碼 If __name__ == “__main__”: Unittest.main() 3.U

程式設計菜鳥到大佬C語言程式

第五天學習精要 關係運算符和邏輯表示式 關係運算符 六種關係運算符用於數值的比較:相等 ==、不等 !=、大於 >、小於 <、大於等於 >=、小於等於 <=。 比較的結果是bool型別,成立則為true,反之為false。

程式設計菜鳥到大佬C語言程式

第六天學習精要 if語句 條件分支結構之if 語句 有時,並非所有的程式語句都要被順序執行到,會希望滿足某種條件就執行這部分語句,滿足另一條件就執行另一部分語句,這就需要“條件分支結構”。 依次計算表示式1、表示式2…只要碰到一個表示式i為真,則執行語

程式設計菜鳥到大佬C語言程式

第七天學習精要 for迴圈 for迴圈語句 for迴圈一般用於將某段程式碼(語句組)重複執行若干次。 第一步:計算“表示式1”。 第二步:計算“表示式2”,若其值為true,則執行“{ }”中的語句組,然後轉到第三步;若為false,則不再執行“{}”中的

資料結構與算法系列課程複雜度分析

資料結構和演算法,本身就是要解決 “快” 和 “省” 的問題。考量的指標分別就是 “時間複雜度” 和 “空間複雜度”。 時間複雜度表示程式碼執行時間隨著資料規模增長的變化趨勢,也叫漸進時間複雜度。 空間複雜度,全稱漸進空間複雜度,表示演算法的儲存空間和資料規模之間的增長關

程式設計菜鳥到大佬C語言程式

第八天學習精要 break語句和continue語句 break語句 可以出現在迴圈體中(for、 while、 do…while迴圈均可),其作用是跳出迴圈。 在多重迴圈的情況下,break語句只能跳出直接包含它的那一重迴圈。 例題:如果兩個不同

Godot3遊戲引擎入門上下左右移動動畫

一、前言 本篇是上一節文章:Godot3遊戲引擎入門之五:上下左右移動動畫(上)的繼續。上一篇使用動畫和程式碼實現了玩家的上下左右移動功能,接下來我們解決一個問題:給遊戲新增碰撞體,讓玩家在有限的地圖中移動。 注意:我目前使用的是 Godot 3.1 預覽版,與

OC中UITableView自定義cell的使用1通過xib建立

在使用UITableView做開發時,常常會遇到 系統提供的樣式無法滿足專案需求的情況,這時就需要根據需求來自定義cell。 自定義cell有兩種方式:   · 通過xib自定義cell(適用於cell中子控制元件個數固定、cell樣式統一的結構,例如:商品的列表頁面)

敏捷開發績效管理敏捷開發生產率故事點估算

這是敏捷開發績效管理的第五篇。(之一,之二,之三,之四,之五,之六,之七)度量敏捷開發的生產率一直是個難題,確切說度量任何開發方法的生產率都是一個難題,但它實際上有答案,這個答案是本文的主要內容。度量敏捷生產率的目的真正難以回答的是度量生產率的目的是什麼?很多人都認為是考核績

Linux作業系統備份通過二進位制拷貝dd方式實現Linux作業系統資料的備份

今天我們介紹另外一種粗曠,但是相對簡單的備份方法:通過dd命令二進位制拷貝方式備份作業系統資料。dd拷貝的方式不能線上實施,因為dd是二進位制的塊拷貝,若拷貝過程中有寫檔案操作,會導致檔案系統不一致(如某個節點建立到一半被dd拷貝走了),因此,這種方式必須進入記憶體操作系的單使用者模式下操作,實施