鄭海鵬
(淮南聯(lián)合大學(xué)信息工程學(xué)院 安徽淮南 232001)
目前,數(shù)據(jù)獲取的渠道主要有三種:自有、爬取或購買。其中數(shù)據(jù)爬取方式屬于數(shù)據(jù)自動獲取的范疇,可以通過Python編寫Web站點數(shù)據(jù)獲取自動化測試用例加以實現(xiàn),并可將獲取到的實驗數(shù)據(jù)用于數(shù)據(jù)分析。自動化測試通常用于替代人工方式,去執(zhí)行那些繁雜的、高重復(fù)性的操作,進(jìn)而節(jié)約大量的人力資源。Selenium為Web站點數(shù)據(jù)自動獲取提供了基礎(chǔ)框架,憑借其自身強大的功能,市場占有額越來越高。本文以Python+Selenium為核心,利用Web Driver數(shù)據(jù)驅(qū)動實現(xiàn)了數(shù)據(jù)自動獲取功能。
Selenium通常用來編寫Web應(yīng)用的自動化測試腳本。早期Selenium1.x主要使用Selenium RC(Selenium Remote Control)進(jìn)行自動化測試。Selenium2.x集成了Selenium和Web Driver的功能。Selenium可以用來模擬用戶在瀏覽器中的操作。軟件測試開發(fā)人員能夠使用不同的編程語言如Java、Scala、Python等編寫測試腳本,并且兼容在Google Chrome、IE、Firefox等瀏覽器中運行測試腳本[1]。基于Selenium是開源的,測試人員可以按需進(jìn)行個性化定制。
Selenium主要由IDE、Grid和RC三個組件構(gòu)成[2],其中IDE為瀏覽器插件,提供腳本編輯、錄制及回放功能,錄制腳本可以轉(zhuǎn)換為Java、Python、PHP等多種腳本語言;Grid實際上是一個jar包,由hub節(jié)點及node節(jié)點構(gòu)成,可在Dos命令行下執(zhí)行。主要用于測試腳本的分布式處理,允許在多機(jī)及異構(gòu)環(huán)境下運行測試腳本;RC(Remote Control)作為Selenium核心組件,由selenium Server和Client Libraries組成。其中Selenium Server用于控制瀏覽器行為,Client Libraries則在自動化測試腳本執(zhí)行過程中,用以控制selenium Server庫,以便達(dá)到自動化測試目的[3]。在Selenium2.x及后續(xù)版本中,使用Web Driver替代了Selenium RC。其中,Web Driver API是客戶端、Web Driver作為瀏覽器驅(qū)動。對于程序執(zhí)行過程中的每一條Selenium腳本,均會創(chuàng)建一個HTTP請求,并將該HTTP請求發(fā)送給瀏覽器的驅(qū)動Web Driver,由 Web Driver中HTTP Server接收這些 HTTP請求,依據(jù)HTTP Server接收到的請求,來具體操控對應(yīng)瀏覽器。瀏覽器執(zhí)行具體的測試步驟,并將執(zhí)行結(jié)果返回給 HTTP Server,HTTP Server又將結(jié)果返回給 Selenium的腳本[4](Selenium工作流程圖如圖1所示)。其詳細(xì)工作流程如下:
圖1 Selenium工作流程
1)編寫基于Selenium支持的測試腳本程序。
2)執(zhí)行測試腳本程序。
3)Selenium Client向Web Driver發(fā)送請求。
4)Web Driver接收、解析相關(guān)請求,并將請求發(fā)送給瀏覽器。
5)瀏覽器接收請求后,執(zhí)行對應(yīng)操作,返回執(zhí)行結(jié)果。
(一)實驗數(shù)據(jù)需求分析。本文實驗數(shù)據(jù)來源于域名為http://www.ahcyfc.com的安徽朝陽房產(chǎn)網(wǎng)。打開網(wǎng)站中二手房首頁,仔細(xì)查看其中的某條二手房房產(chǎn)信息(如圖2所示),對其中數(shù)據(jù)做需求分析,為后續(xù)的數(shù)據(jù)獲取及Web前端展示做鋪墊,需要從中提取的房屋詳細(xì)信息包括:二手房所在小區(qū)、戶型、建筑面積、房屋朝向、總價、每平米單價、實際看房人數(shù)。編寫Python程序?qū)隨elenium庫,用以實現(xiàn)該網(wǎng)站數(shù)據(jù)自動化獲取操作。
圖2 二手房詳細(xì)信息
(二)腳本設(shè)計。Selenium兼容多種瀏覽器。編寫測試腳本過程中,需指明具體瀏覽器,本文使用 Firefox。
1.驅(qū)動并打開瀏覽器。
2.定位到對應(yīng)元素。Selenium在操作瀏覽器時,應(yīng)先定位到對應(yīng)的元素。目前,主要有八種定位方法,如表1所示。
表1 Selenium元素定位方法功能描述
在獲取二手房詳細(xì)信息的需求過程中,需要定位二手房所在小區(qū)、戶型、建筑面積、房屋朝向、總價、每平米單價、實際看房人數(shù)等數(shù)據(jù)對象。
3.設(shè)置Selenium定位方法參數(shù)。設(shè)置Selenium定位方法參數(shù)的實際作用是利用數(shù)據(jù)驅(qū)動將數(shù)據(jù)和腳本相分離[5]。本研究主要利用的Selenium定位方法為:find_element_by_xpath,即根據(jù)路徑表達(dá)式來定位二手房測試實驗數(shù)據(jù)。
全選一條二手房信息,選擇:右擊->審查元素,或按F12鍵來查看網(wǎng)頁源碼,發(fā)現(xiàn)房屋詳細(xì)信息的路徑為:
圖3 房屋詳細(xì)信息的路徑
根據(jù)實驗需求,對二手房所在小區(qū)等7個對象數(shù)據(jù)進(jìn)行參數(shù)設(shè)置。具體腳本設(shè)計如下:
(一)數(shù)據(jù)驅(qū)動。在自動獲取實驗數(shù)據(jù)過程中,采用CSV文件格式來存放實驗數(shù)據(jù),在get_houseInfo()方法的末尾加入如下數(shù)據(jù)驅(qū)動腳本代碼:
(二)程序?qū)崿F(xiàn)。編寫主程序,在主程序中調(diào)用get_houseInfo()方法,具體實現(xiàn)代碼如下:
運行程序,顯示實驗數(shù)據(jù)獲取過程(如圖4所示),并將實驗數(shù)據(jù)保存至House.csv文件中(如圖5所示),進(jìn)而實現(xiàn)了實驗數(shù)據(jù)的自動獲取。
圖4 控制臺輸出自動獲取到的實驗數(shù)據(jù)
圖5 將實驗數(shù)據(jù)保存至House.csv文件
本文數(shù)據(jù)分析針對淮南二手房的每平米單價與房屋面積之間做K-Means聚類關(guān)聯(lián)分析,給即將買房的人提供買房意見,具體實現(xiàn)過程主要代碼如下(聚類結(jié)果如圖6所示):
圖6 房屋單價及面積聚類離散圖
依據(jù)聚類結(jié)果,將淮南市二手房大體劃分為以下五種類型:
1.郊區(qū)型(紅色區(qū)域):此類房型多數(shù)地處郊區(qū)、面積適中,價格低廉。對于購房資金不充足的買房人而言,將是不錯的選擇。
2.市區(qū)中心型(地段好、橙色區(qū)域):此類房型多數(shù)地處淮南市核心地段(交通便捷、多數(shù)為學(xué)區(qū)房),均價最高,而且物以稀為貴在房子上也能驗證。這類房子數(shù)量并不多。建議有一定經(jīng)濟(jì)實力的買家購買,可以獲取周邊更好的配套設(shè)施及教育資源。
3.剛需型(淺黃色區(qū)域) :此類房型多數(shù)地處市內(nèi),交通便捷,出行辦事方便,面積、價格適中,房源充足。但地段一般,建議有結(jié)婚需求的年輕人購買。
4.“破舊小”型(淺綠色區(qū)域):此類房型面積最小,建筑歷史年代久遠(yuǎn),集中處于舊城、老城區(qū)。但其價格并不便宜。若短期內(nèi)沒有拆遷需求,不建議購買。
5.大戶型(藍(lán)色區(qū)域):此類房型面積最大,價格合理,多為別墅、復(fù)式大戶型。建議成功人士購買。
本研究實現(xiàn)了Web網(wǎng)站數(shù)據(jù)的自動獲取功能,并對獲取到的實驗數(shù)據(jù)做了簡明的數(shù)據(jù)分析。實驗表明:基于Selenium的自動化測試框架,用于實現(xiàn)數(shù)據(jù)的自動獲取,在很大程度上提高了數(shù)據(jù)的獲取效率[6],可以節(jié)省大量的人力資源。