如果你是學(xué)習(xí)網(wǎng)絡(luò)爬蟲然评,那么到這里就不用再繼續(xù)看了颖榜。如果你是做自動化測試惊科,那么接下來才是重點拍摇。
關(guān)于 unittest 框架的用法,請參考Python 測試框架馆截。
前面我們一直在講 Selenium 對各種操作的模擬充活,以及處理各種特殊頁面元素和結(jié)構(gòu)。雖然通過 assert 語句增加了一些預(yù)期結(jié)果與實際結(jié)果的判斷孙咪,但是并未形成真正的自動化測試框架堪唐。
通過對 unittest 框架的理解,已經(jīng)了解了 Python 中單元測試框架的用途翎蹈。雖然 unittest 是單元測試框架淮菠,依然可以用于自動化測試,UI 自動化測試與單元測試都是一種自動化測試荤堪。unittest 的主要內(nèi)容是如何編寫用例合陵、組織用例、運(yùn)行用例和運(yùn)用測試固件澄阳,所有的測試都基于這些框架基礎(chǔ)拥知。包括基于移動界面的自動化測試,以及基于接口層面的測試碎赢,都可以應(yīng)用這些測試框架低剔。
回顧一下 unittest 框架中的基本思想:
支持各種層面的自動化測試;
測試用例共享 setUp 初始化和 tearDown 清理代碼肮塞;
通過各種方式組織測試和規(guī)劃測試用例襟齿;
保持測試代碼與測試運(yùn)行之間的的獨立性。
那么如何使用 unittest 結(jié)合 Selenium 來實現(xiàn)自動化測試枕赵?
test fixture
在測試固件中的 setUp() 方法中加入瀏覽器初始化猜欺、配置初始化、數(shù)據(jù)庫連接等動作拷窜。
在 tearDown() 方法中退出瀏覽器开皿、還原配置涧黄、斷開數(shù)據(jù)庫連接等。
或者其他需要在測試過程中清理和初始化的動作赋荆。
test case
測試用例盡可能保持代碼和數(shù)據(jù)的獨立性笋妥,畢竟 UI 自動化測試步驟非常復(fù)雜,用例之間的依賴會因某一個用例的失敗而導(dǎo)致與之相關(guān)的用例全部失敗糠睡。
測試用例盡可能保持可獨立執(zhí)行狀態(tài)挽鞠,可任意根據(jù)需要執(zhí)行某個或者某類的測試用例。
UI 自動化測試因其受界面元素變化影響非常大狈孔,因此用例編寫盡量基于流程的測試信认,這也是 UI 自動化測試的意義所在。單個功能的測試用例過多均抽,大量的手工用例被自動化會導(dǎo)致自動化測試代碼的維護(hù)量非常之大嫁赏,這樣也是自動化測試失敗的根源。
盡量少或者不編寫關(guān)于導(dǎo)致流程失敗的逆向用例油挥,逆向用例可能性過多潦蝇。并且實際自動化測試的使用場景,是基于已完善的功能深寥,檢查其沒有被新功能修改所影響攘乒。正向用例的意義更大。
謹(jǐn)慎選擇加入自動化測試的手工用例惋鹅,但凡提自動化測試覆蓋度的團(tuán)隊则酝,自動化測試實施的失敗也就在三個月左右。一定要謹(jǐn)記闰集,用例越多維護(hù)成本就越高沽讹。所以用例選擇一定要選擇高頻率、高優(yōu)先級武鲁、非常重要的用例爽雄,有余力再逐次添加。
如果選擇的流程自動化測試實現(xiàn)難度較高沐鼠,建議推后自動化測試挚瘟。并非要實現(xiàn) 100% 自動化測試,所以先以較易入手的測試流程加入饲梭。先易后難乘盖,團(tuán)隊需要信心。
自動化測試排拷,特別是 UI 自動化測試成功率低侧漓,主要原因集中于環(huán)境問題锅尘、團(tuán)隊期望监氢、維護(hù)成本等布蔗。其實很多時候核心問題都集中在測試用例的選擇上。不要想一蹴而就浪腐,在找到適合當(dāng)前團(tuán)隊的自動化策略后纵揍,逐步提高自動化測試覆蓋度,才能讓自動化測試達(dá)到提高團(tuán)隊效率的作用议街。
test suite
通過 discover 加載和構(gòu)建測試套件泽谨,由于我們在編寫用例的時候有可獨立運(yùn)行的前提,所以不用在意用例的加載順序特漩,如果非要加載順序建議好好研究一下 discover 的查找規(guī)則吧雹。
通過用例的不同命名方式(如產(chǎn)品類的測試用例使用 *product*.py
),跳過規(guī)則(如 skipIf涂身、skipUnless)等策略構(gòu)建不同的測試套件雄卷。以期達(dá)到在冒煙測試、BVT 測試蛤售、兼容性測試丁鹉、核心流程回歸、線上巡檢等應(yīng)用場景中都能快捷方便的選擇需要的測試套件悴能。
test runner
借助 HTMLTestRunner 或 Beautiful Report 等運(yùn)行測試套件并展示 html 格式的測試報告揣钦。
如果運(yùn)行速度過慢,可以引入多線程或者多進(jìn)程結(jié)合瀏覽器的無頭模式加快用例的運(yùn)行速度漠酿。
同時也可以將運(yùn)行代碼與持續(xù)集成結(jié)合冯凹。