目錄
1. 單元測驗框架
2. Web自動化測驗框架
3. iOS自動化測驗框架
4. Android自動化測驗框架

1. 單元測驗框架
幾乎所有的主流語言,都會有其對應的單元測驗框架,下面簡單介紹一下python,java,C#三種語言的常見單元測驗框架
1.1 Python
python常見單元測驗框架包括unittest, pytest
1.1.1 unittest
- unittest單元測驗框架不僅可以適用于單元測驗,還可以適用WEB自動化測驗用例的開發與執行,該測驗框架可組織執行測驗用例,并且提供了豐富的斷言方法,判斷測驗用例是否通過,最終生成測驗結果,
- unittest為python內置庫,不需要單獨安裝(好像也和版本有關系)
1.1.2 pytest
pytest是一個非常成熟的全功能的Python測驗框架,主要有以下幾個特點:
- 簡單靈活,容易上手
- 支持引數化
- 能夠支持簡單的單元測驗和復雜的功能測驗,還可以用來做selenium/appnium等自動化測驗、介面自動化測驗(pytest+requests)
- pytest不是python內置庫,需要單獨安裝
1.1.3 unittest與pytest對比
- unittest提供了test cases、test suites、test fixtures、test runner相關的類,讓測驗更加明確、方便、可控,使用unittest撰寫用例,必須遵守以下規則:
(1)測驗檔案必須先import unittest
(2)測驗類必須繼承unittest.TestCase
(3)測驗方法必須以“test_”開頭
(4)測驗類必須要有unittest.main()方法
- pytest是python的第三方測驗框架,是基于unittest的擴展框架,比unittest更簡潔,更高效,使用pytest撰寫用例,必須遵守以下規則:
(1)測驗檔案名必須以“test_”開頭或者"test"結尾(如:test_ab.py)
(2)測驗方法必須以“test”開頭,
(3)測驗類命名以"Test"開頭,
- unittest提供了setUp/tearDown,只能針對所有用例,
- pytest提供了模塊級、函式級、類級、方法級的setup/teardown,比unittest的setUp/tearDown更靈活,
模塊級(setup_module/teardown_module)開始于模塊始末,全域的
函式級(setup_function/teardown_function)只對函式用例生效(不在類中)
類級(setup_class/teardown_class)只在類中前后運行一次(在類中)
方法級(setup_method/teardown_method)開始于方法始末(在類中)
類里面的(setup/teardown)運行在呼叫方法的前后
- pytest還可以在函式前加@pytest.fixture()裝飾器,在測驗用例中裝在fixture函式,fixture的使用范圍可以是function,module,class,session,
- fixture相對于setup和teardown來說有以下幾點優勢:
(1)命名方式靈活,不局限于setup和teardown這幾個命名
(2)conftest.py 配置里可以實作資料共享,不需要import就能自動找到一些配置,可供多個py檔案呼叫,
(3)scope="module" 可以實作多個.py跨檔案共享前置
(4)scope="session" 以實作多個.py跨檔案使用一個session來完成多個用例
(5)用yield來喚醒teardown的執行
-
斷言方面:
unittest提供了assertEqual、assertIn、assertTrue、assertFalse.
pytest直接使用assert 運算式,相對而言更簡單且高效. -
unittest不支持失敗重跑,pytest支持
-
unittest依賴ddt庫引數化,pytest直接使用@pytest.mark.parametrize裝飾器
pytest總的來說優于unittest,提供了更多的功能和可拓展性
1.2 Java
Java常見單元測驗框架包括Junit、testNG
1.3 C#
C#常見單元測驗框架包括NUnit
2. Web自動化測驗框架
2.1 Selenium
Selenium是一個用于Web應用程式測驗的工具,支持的瀏覽器包括IE、Mozilla Firefox、Mozilla Suite等,這個工具的主要功能包括:測驗與瀏覽器的兼容性——測驗你的應用程式看是否能夠很好得作業在不同瀏覽器和作業系統之上,Selenium 是一套完整的web應用程式測驗系統,包含了測驗的錄制(selenium IDE),撰寫及運行(Selenium Remote Control)和測驗的并行處理(Selenium Grid),Selenium的核心Selenium Core基于JsUnit,完全由JavaScript撰寫,因此可以用于任何支持JavaScript的瀏覽器上,Selenium可以模擬真實瀏覽器,自動化測驗工具,支持多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題,
selenium 1.0 包括以下兩部分:selenium server、 Client Libraries組成
2.1.1 selenium server
selenium server負責控制瀏覽器的行為,主要有launcher,Http Proxy,selenium core,selenium core使用Selenium Server嵌入到瀏覽器頁面中,實質上,selenium core是由JS函陣列成,這樣我們可以實作用程式對瀏覽器進行操作,
2.1.2 client Libraries
撰寫測驗用例時控制selenium server的庫
下圖介紹了testcase的執行程序:

執行程序
(1).測驗案例(Testcase)通過Client Lib的介面向Selenium Server發送Http請求,要求和Selenium Server建立連接,
為什么要通過發送Http請求控制Selenium Server而不采用其他方式呢?從勺ò干以看出,Selenium Server是一個獨立的中間服務器(確切地說是代理服務器),它可以架設在其他機器上!所以測驗案例通過發送HTTP請求去控制Selenium Server是很正常的,
(2).Selenium Server的Launcher啟動瀏覽器,把Selenium Core加載入瀏覽器頁面當中,并把瀏覽器的代理設定為Selenium Server的Http Proxy,
(3).測驗案例通過Client Lib的介面向Selenium Server發送Http請求,Selenium Server對請求進行決議,然后通過Http Proxy發送JS命令通知Selenium Core執行操作瀏覽器的動作,
(4).Selenium Core接收到指令后,執行操作,
(5).瀏覽器收到新的頁面請求資訊(因為在(4)中,Selenium Core的操作可能引發新的頁面請求),于是發送Http請求,請求新的<u style="box-sizing: border-box; font-family: __SYMBOL, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", SimSun, sans-serif; font-variant-ligatures: none; font-variant-numeric: tabular-nums; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);">Web</u>頁面,
由于Selenium Server在啟動瀏覽器時做了手腳,所以Selenium Server會接收到所有由它啟動的瀏覽器發送的請求,
(6).Selenium Server接收到瀏覽器的發送的Http請求后,自己重組Http請求,獲取對應的Web頁面,
(7).Selenium Server的Http Proxy把接收的Web頁面回傳給瀏覽器,
2.2 Selenium2(Webdriver)
Selenium 2將瀏覽器原生的API封裝成WebDriver API,可以直接操作瀏覽器頁面里的元素,甚至操作瀏覽器本身(截屏,視窗大小,啟動,關閉,安裝插件,配置證書之類的),所以就像真正的用戶在操作一樣,
下圖介紹了Selenium2的架構:

Selenium2架構
-
webdriver按照server–client的經典設計模式設計
-
server端就是remote server,可以是任意的瀏覽器:我們的腳本啟動瀏覽器后,該瀏覽器就是remote server,它的職責就是等待client發送請求并做出相應;
-
client端簡單說來就是我們的測驗代碼:們測驗代碼中的一些行為,比如打開瀏覽器,轉跳到特定的url等操作是以http請求的方式發送給被server端(也就是被測瀏覽器)server接受請求,并執行相應操作,并在response中回傳執行狀態、回傳值等資訊;
-
the WebDriver Wire Protocol是Selenium自己設計定義的協議,這套協議非常之強大,幾乎可以操作瀏覽器做任何事情,包括打開、關閉、最大化、最小化、元素定位、元素點擊、上傳檔案等,
-
WebDriver Wire協議是通用的,也就是說不管FirefoxDriver還是ChromeDriver,啟動之后都會在某一個埠啟動基于這套協議的Web Service,例如FirefoxDriver初始化成功,默認從http://localhost:7055開始,IE則是http://localhost:52432
webdriver的作業原理:
(1)啟動瀏覽器后,selenium-webdriver會將目標瀏覽器系結到特定的埠,啟動后的瀏覽器則作為webdriver的remote server,
(2)客戶端(也就是測驗腳本),借助ComandExecutor發送HTTP請求給sever端(通信協議:The WebDriver Wire Protocol,在HTTP request的body中,會以WebDriver Wire協議規定的JSON格式的字串來告訴Selenium我們希望瀏覽器接下來做什么事情),
(3)Sever端需要依賴原生的瀏覽器組件,轉化Web Service的命令為瀏覽器native的呼叫來完成操作,
3. iOS自動化測驗框架
3.1 XCTest
About Testing with Xcode
XCTest是蘋果在iOS 7和Xcode5引入的一個簡單而強大的測驗框架,它的測驗撰寫起來非常簡單,并且遵循xUnit風格,XCTest的優點是與Xcode深度集成,有專門的Test導航欄,但因為受限于官方測驗API,因此功能不是很豐富,
3.2 UIAutomation
https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UIAutomation.html
UIAutomation是蘋果提供的UI自動化測驗框架,使用Javascript撰寫,基于UIAutomation有擴展型的工具框架和驅動型的框架,擴展型框架以JavaScript擴展庫方法提供了很多好用js工具,注入式的框架通常會提供一些Lib或者是Framework,要求測驗人員在待測應用的代碼工程中匯入這些內容,框架可以通過他們完成對app的驅動,驅動型UI Automation 在自動化測驗底層使用了UI Automation庫,通過TCP通信的方式驅動UI Automation來完成自動化測驗,通過這種方式,編輯腳本的語言不再局限于JavaScript,
3.3 Frank
App Development Ireland - App Developers Dublin
Frank是iOS平臺一款非常受歡迎的app測驗框架,它使用Cucumber語言來撰寫測驗用例, Frank包含一個強大的“app inspector”–Symbiote,可以用它來獲得運行中app的詳細資訊,便于開發者將來進行測驗回顧, 它允許使用Cucumber撰寫結構化英陳述句子的測驗場景, Frank要求測驗時在應用程式內部編譯,這意味著對源代碼的改變是強制性的,操作方式為使用Cucumber和JSON組合命令,將命令發送到在本地應用程式內部運行的服務器上,并利用UISpec運行命令,
**優點: **測驗場景是在Cucumber的幫助下,用可理解的英陳述句子寫的,強大的Symbiote實時檢查工具, 活躍的社區支持, 不斷擴大中的庫,
缺點:對手勢的支持有限, 在設備上運行測驗有點難, 修改組態檔需要在實際設備上運行, 記錄功能不可用,
3.4 KIF
iOS 中使用 KIF 測驗 UI - OSCHINA - 中文開源技術交流社區
KIF是Keep It Functional專案的縮寫,是一款iOS app功能性測驗框架,使用Objective-C語言撰寫,對蘋果開發者來說非常容易上手,更是一款開發者廣為推薦的測驗工具,KIF tester使用私有API來了解App中的視圖層級,但缺點是運行較慢,
3.5 Calabash-ios
詳見Calabash-android 描述,
3.6 Subliminal
Subliminal
Subliminal是另一款與XCTest集成的框架,與KIF不同的是,它基于UIAutomation撰寫,旨在對開發者隱藏UIAutomation中一些復雜的細節,
3.7 Kiwi
https://github.com/kiwi-bdd/Kiwi/wiki/Getting-Started-with-Kiwi-2.0
Kiwi是對XCTest的一個完整替代,使用xSpec風格撰寫測驗, Kiwi帶有自己的一套工具集,包括expectations、mocks、stubs,甚至還支持異步測驗,它是一個適用于iOS 開發的Behavior Driven Development(BDD)庫,優點在于其簡潔的介面和可用性,易于設定和使用,非常適合新手開發者,Kiwi使用Objective-C語言撰寫,易于IOS開發人員上手,
3.8 Appium
Appium: Mobile App Automation Made Awesome.
Appium是一個開源的、跨平臺的自動化測驗工具,支持IOS、Android和FirefoxOS平臺, 通過Appium,開發者無需重新編譯app或者做任何調整,就可以測驗移動應用,可以使測驗代碼訪問后端API和資料庫,它是通過驅動蘋果的UIAutomation和Android的UiAutomator框架來實作的雙平臺支持,同時系結了Selenium WebDriver用于老的Android平臺測驗,開發者可以使用WebDriver兼容的任何語言撰寫測驗腳本,如Java, OC, JS, PHP,Python, Ruby, C#,Clojure 和Perl語言,
總結:IOS自動化測驗框架繼承關系如下. XCTest與 Xcode 的 IDE 直接集成,使用簡單, 但其不支持stub和mock, 所以單使用XCTest框架的較少. Kiwi是一個iOS平臺十分好用的行為驅動開發BDD的測驗框架,有著非常漂亮的語法,可以寫出結構性強,非常容易讀懂的測驗,UI Automation是Apple官方提供的UI自動化測驗的解決方法,但介面不夠豐富,
iOS自動化測驗框架
-
KIF、Frank、Calabash都是通過使用代碼的形式來模擬事件觸發,使得被測代碼就像是由用戶行為所觸發的一樣,但這樣的代價是插入一個額外層的復雜度,
-
IOS測驗框架中支持BDD的有calabash 和Kiwi,
-
可選用的單元測驗框架有Kiwi,Specta,Quick等,而KIF,Subliminal和calabash更適用于UI級驗收測驗,
4. Android自動化測驗框架
4.1 Instrumentation
https://developer.android.com/reference/android/app/Instrumentation.html
Instrumentaion 是Android自帶的一個測驗框架,是很多其它測驗框架的基礎,可以在同行程中加載被測組件,它有很多豐富的高層封裝,使用者可以使用基于instrumentation的其他框架,避免過多二次開發量,但Instrumentation不支持跨應用,導致基于instrumentation的框架都繼承了這個缺點,
4.2 Robotium
https://github.com/robotiumtech/robotium
Robotium是基于Instrumentation框架開發的一個更強的框架. 對常用的操作進行了易用性的封裝. 用于開發功能性、系統和驗收測驗場景,它運行時系結到GUI組件,它安裝了一個測驗用例套件作為在Android設備或仿真器上的應用程式,并提供用于執行測驗的真實環境,
優點: 容易在最短的時間內撰寫測驗腳本,易用性高,自動跟隨當前activity, 由于運行時系結到GUI組件,所以相比Appium,它的測驗執行更快,更強大, 不訪問代碼或不了解app實作,也可以作業, 支持Activities、Dialogs、Toasts、Menus、Context Menus和其他Android SDK控制元件,
缺點: 不能處理flash和web組件,在舊設備上會變得很慢, 由于不支持iOS設備,當自動化測驗同時覆寫 android與iOS的情況時,測驗會被中斷,沒有內置的記錄和回放功能.,使用記錄功能需要 TestDroid 和 Robotium Recorder 這樣的收費工具,
4.3 UIAutomator
https://google.github.io/android-testing-support-library/docs/uiautomator/
UIAutomator是由谷歌提供的測驗框架,它提供了原生Android app和游戲的高級UI測驗,這是一個包含API的Java庫,用來創建功能性UI測驗,還有運行測驗的執行引擎,該庫自帶Android SDK,
優點:它在運行訪問不同的行程時,會給JUnit測驗案例特權,庫由谷歌社區支持和維護,
缺點:僅支持android4.1(API level 16)及以上, 不支持腳本記錄, 支持的重點是Java, 你不能獲得當前活動或儀表化,目前不支持web視圖, 庫僅支持使用Java,因此很難和使用Ruby的cucumber混合,如想支持BDD框架,建議使用Java自己的BDD框架,例如Jbehave,
4.4 Espresso
https://google.github.io/android-testing-support-library/docs/espresso/index.html
Espresso是Google的開源自動化測驗框架,相對于Robotium和UIAutomator,它的特點是規模更小、更簡潔、API更加精確、撰寫測驗代碼簡單、容易快速上手,因為是基于Instrumentation的,所以不能跨App,
4.5 Calabash
https://github.com/calabash
Calabash是一個適用于iOS和Android開發者的跨平臺app測驗框架,可用來測驗螢屏截圖、手勢和實際功能代碼,Calabash開源免費并支持Cucumber語言,Cucumber能讓你用自然的英語語言表述app的行為,實作BDD(Behavior Driven Development,行為驅動開發), Cucumber中的所有陳述句使用Ruby定義,
**優點: **有大型社區支持,串列項 簡單,類似英語表述的測驗陳述句支持在螢屏上的所有動作,如滑動,縮放,旋轉,敲擊等, 跨平臺開發支持(同樣的代碼在Android和iOS設備中都適用),
缺點:測驗步驟失敗后,將跳過所有的后續步驟,這可能會導致錯過更嚴重的產品問題,測驗耗費時間,因為它總是默認先安裝app, 需要Calabash框架安裝在ios的ipa檔案中, 因此測驗人員必須要有iOS的app原始碼, 除了Ruby,對其他語言不友好,
4.6 Appium
Appium: Mobile App Automation Made Awesome.
Appium是一個開源的、跨平臺的自動化測驗工具,支持IOS、Android和FirefoxOS平臺, 通過Appium,開發者無需重新編譯app或者做任何調整,就可以測驗移動應用,可以使測驗代碼訪問后端API和資料庫,它是通過驅動蘋果的UIAutomation和Android的UiAutomator框架來實作的雙平臺支持,同時系結了Selenium WebDriver用于老的Android平臺測驗,開發者可以使用WebDriver兼容的任何語言撰寫測驗腳本,如Java, OC, JS, PHP,Python, Ruby, C#,Clojure 和Perl語言,
4.7 Selendroid
GitBook - Where software teams break knowledge silos.
Selendroid 是一個基于Instrumentation的一個框架. 完全兼容Webdriver協議, Selendroid 可以在模擬器和實際設備上使用,也可以集成網格節點作為縮放和并行測驗,
4.8 Robolectric
Robolectric
Robolectric 是一款Android單元測驗框架,但它并不依賴于Android提供的測驗功能,它通過實作一套JVM能運行的Android代碼,然后在unit test運行的時候去截取android相關的代碼呼叫,然后轉到Robolectric實作的代碼(shadow objects)去執行這個呼叫的程序,因此它不像模擬器或設備需要dexing(Android dex編譯器將類檔案編譯成Android設備上的Dalvik VM使用的格式)、打包、部署和運行的程序,大大減少了測驗執行的時間,Pivotal實驗室聲稱使用Robolectric可以在28秒內運行1047個測驗,
除了實作Android里面的類的現有介面,Robolectric還給每個Shadow類額外增加了很多介面,可以讀取對應的Android類的一些狀態,比如它為ImageView提供了getImageResourceId()方法,測驗者可以通過getImageResourceId()介面來確定是不是正確顯示了期望的Image,
4.9 RoboSpock
http://robospock.org/
RoboSpock是一個開源的Android測驗框架,它提供了簡單的撰寫BDD行為驅動開發規范的方法,使用Groovy語言,支持Google Guice庫,RoboSpock合并了Robolectic和Spock的功能,
4.10 Cafe
專案管理iCafe_專案進度管理-百度智能云
Cafe是百度出品的一個基于Robotium的測驗框架,它提供了跨行程的測驗解決方案,
4.11 Athrun
http://code.taobao.org/p/athrun/wiki/index/
Athrun 是taobao出的一個移動測驗框架,它支持Android和IOS,Android部分是基于Instrumentation,在Android原有的ActivityInstrumentationTestCase2類基礎上進行了擴展,提供了一整套面向物件的API, IOS上的自動化測驗包括注入式自動化框架AppFramework,和基于錄制的自動化框架Athrun_IOS, InstrumentDriver,
4.12 其他
其他自動化框架還有應用于穩定性測驗的Monkey系列(Monkey, Monkeyrunner, MonkeyTalk), 其中MonkeyTalk 支持iOS 和 Android,它可以為應用進行真實的,功能性互動測驗,MonkeyTalk 提供簡單的 “smoke tests”,復雜資料驅動的測驗套件,MonkeyTalk 支持原生,移動和混合應用,真實設備或者模擬器,MonkeyTalk 使得場景捕獲非常容易,可以記錄高級別,可讀的測驗腳本,還有適用于瀏覽器自動測驗的Selenium WebDriver,可以真實測驗用戶行為,用戶互動如觸摸、手指滾動、長按等,還支持HTML5的一些特性,比如本地存盤、session存盤、應用快取等,而CTS則是應用于兼容性測驗的自動化工具, CTS大部分是基于Junit和儀表盤技術撰寫的,還擴展了自動化測驗程序,可以自動執行用例,自動收集和匯總測驗結果,CTS采用XML組態檔的方式將這些測驗用例分組成多個測驗計劃(plan),第三方也可以創建自己的plan,
總結:
各個測驗框架的繼承關系如下,繼承關系決定了有些框架的先天優勢或先天不足. 在實際應用中可以集成多個框架,
Android 自動化測驗框架
-
基于Instrumentation的測驗框架,比如Espresso,Robotium,Selendroid等,都不能支持跨APP使用, 如自動化測驗中有跨APP操作,可以結合UiAutomator實作,
-
支持BDD的自動化框架比較少,可以在calabash 和 RoboSpock及Jbehave之間選擇,
-
若想同時支持Android和IOS,可選框架有Appium和Calabash,或AthRun,
-
若為單元測驗選擇框架,可選Instrumentation或Robolectric,Robolectric實作了shadow object 類,耗時短,

感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接免費拿走:
① 2000多本軟體測驗電子書(主流和經典的書籍應該都有了)
② 軟體測驗/自動化測驗標準庫資料(最全中文版)
③ 專案原始碼(四五十個有趣且經典的練手專案及原始碼)
④ Python編程語言、API介面自動化測驗、web自動化測驗、App自動化測驗(適合小白學習)


⑤ Python學習路線圖(告別不入流的學習)
上圖的資料 在我的QQ技術交流群里(技術交流和資源共享,廣告進來腿給你打斷)
可以自助拿走,群號953306497(備注“csdn111”)群里的免費資料都是筆者十多年測驗生涯的精華,還有同行大神一起交流技術哦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/394539.html
標籤:其他
上一篇:C語言 貪吃蛇
下一篇:yii2一次上傳很多檔案介面開發(yii自帶的UploadedFile類+postman(多檔案上傳)資料庫中能插入資料了,之前忘記了.哈哈
