一、什么是Selenium?
Selenium是一個基于瀏覽器的自動化測試工具,它提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。
-
Selenium IDE:Firefox的一個擴(kuò)展,它可以進(jìn)行錄制回放,并把錄制的操作以多種語言(例如java、python等)的形式導(dǎo)出成測試用例。
-
Selenium WebDriver:提供Web自動化所需的API,主要用作瀏覽器控制、頁面元素選擇和調(diào)試。不同的瀏覽器需要不同的WebDriver。
-
Selenium Grid:提供了在不同機(jī)器的不同瀏覽器上運(yùn)行selenium測試的能力。
本文將詳細(xì)介紹如何運(yùn)用Python結(jié)合Selenium WebDriver庫搭建web自動化測試框架。
二、自動化測試框架
一個典型的自動化測試框架一般包括用例管理模塊、自動化執(zhí)行控制器、報表生成模塊和log模塊,這些模塊相輔相成。
接下來介紹各模塊的邏輯單元:
1、用例管理模塊
用例管理模塊包括新增、修改、刪除等操作單元,這些單元又會涉及到用例書寫模式,測試數(shù)據(jù)庫的管理、可復(fù)用庫等。
2、自動化控制器
控制器是自動化用例執(zhí)行的組織模塊,主要是負(fù)責(zé)以什么方法執(zhí)行我們的測試用例.
3、報表生成模塊
主要負(fù)責(zé)執(zhí)行用例后的生成報告,一般以HTML格式居多,信息主要是用例執(zhí)行情況。另外還可以配置發(fā)送郵件功能。
4、log模塊
主要用來記錄用例執(zhí)行情況,以便于高效的調(diào)查用例失敗信息以及追蹤用例執(zhí)行情況。
三、自動化框架的設(shè)計和實(shí)現(xiàn)
1、需求分析
首先我們的測試對象是一個web平臺,基于此平臺設(shè)計的框架要包含測試用例管理、測試執(zhí)行控制器、測試報告以及測試日志的生成。
2、設(shè)計和實(shí)現(xiàn)
頁面管理
假設(shè)測試web對象為一個典型單頁面應(yīng)用,所以我們采用頁面模式。頁面模式是頁面與測試用例之間的紐帶,它將每個頁面抽象成一個單獨(dú)的類,為測試用例提供頁面元素的定位和操作。
BaseClass作為父類只包含driver成員變量,用來標(biāo)識Selenium中的WebDriver,以便在子類中定位頁面元素。LoginClass和PageClass作為子類,可以提供頁面元素的定位和操作方法。比如登錄頁面。
從頁面看,需要操作的元素分別為:登錄用戶名、密碼、下次自動登錄和登錄按鈕。具體實(shí)現(xiàn)代碼如下:
頁面父類BaseClass.py
LoginClass繼承自BaseClass,并進(jìn)行登錄的元素定位以及操作實(shí)現(xiàn)。代碼中定位了username和password,并添加了設(shè)置用戶名和密碼的操作。
[外鏈圖片轉(zhuǎn)存失敗(img-bYDjyKch-1568254467332)(http://college.creditease.cn/resources/upload/image/20181113/1542074413177087788.png)]
公共庫模塊
公共庫模塊是為創(chuàng)建測試用例服務(wù)的,主要包括常量、公共函數(shù)、日志、報告等。
Common.py
測試用例信息類用來標(biāo)識測試用例,并且包括執(zhí)行用例、執(zhí)行結(jié)果信息,主要包括以下字段。
日志主要用來記錄測試用例執(zhí)行步驟及產(chǎn)生的錯誤信息,不同的信息有不同的日志級別,比如Information、Warning、Critical和Debug。由于每個測試用例產(chǎn)生的日志條目比較少,所以在測試框架中只利用了最高級別的日志打印,即Debug級別,該級別也會將其他所有的日志級別的信息同樣打印出來。在具體的實(shí)現(xiàn)中引用了Python標(biāo)準(zhǔn)庫中的logging類庫,以便更方便的控制日志輸出。
測試用例倉庫
用例倉庫主要用來組織自動化測試用例。每條測試用例都被抽象成一個獨(dú)立的類,并且均繼承自unittest.TestCase類。 Python中的unittest庫提供了豐富的測試框架支持,包括測試用例的setUp和tearDown方法,在實(shí)現(xiàn)用例的過程中可以重寫。依托頁面管理和公共庫模塊實(shí)現(xiàn)的頁面方法和公共函數(shù),每一個測試用例腳本的書寫都會非常清晰簡潔。
從這個測試用例中,我們可以看到
- Setup中定義了執(zhí)行測試用例前的一些實(shí)例化工作
- tearDown對執(zhí)行完測試做了清理和寫日志文件工作
- 測試步驟、測試數(shù)據(jù)和測試檢查點(diǎn)非常清晰,易修改(比如用戶名密碼)
- 日志級別僅有Debug,所以寫日志僅需用同一Log方法
3、用例執(zhí)行模塊
執(zhí)行模塊主要用來控制測試用例腳本的批量執(zhí)行,形成一個測試集。用例的執(zhí)行引用了Python標(biāo)準(zhǔn)庫中的subprocess來執(zhí)行nosetests的shell命令,從而執(zhí)行給定測試用例集中的用例。測試用例集是一個簡單的純文本文件,實(shí)現(xiàn)過程中利用了.txt文件testcases.txt。
用例前沒有“#“標(biāo)記的測試用例腳本會被執(zhí)行,而有”#“標(biāo)記的則會被忽略,這樣可以很方便的控制測試集的執(zhí)行,當(dāng)然也可以創(chuàng)建不同的文件來執(zhí)行不同的測試集。
四、需要改進(jìn)的模塊
對于現(xiàn)有實(shí)現(xiàn)的測試框架,已經(jīng)可以滿足web對象的自動化需求,但還是有些可以改進(jìn)提高的地方,比如:
- 部分用例可以嘗試數(shù)據(jù)驅(qū)動。
- 二次封裝selenium的By函數(shù),以便更高效定位元素。
- 沒有進(jìn)行持續(xù)化集成。
五、總結(jié)
基于Selenium實(shí)現(xiàn)的web自動化測試框架不僅輕量級而且靈活,可以快速地開發(fā)自動化測試用例,結(jié)合本篇的框架設(shè)計和一些好的實(shí)踐,希望對大家以后的web自動化框架的設(shè)計和實(shí)現(xiàn)有所幫助。
作者:武貫祥
來源:宜信技術(shù)學(xué)院
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
