張焱
隨著人工智能的發(fā)展,機(jī)器代替人工,已經(jīng)是未來發(fā)展的一種趨勢(shì),人工智能需要編程語言來實(shí)現(xiàn),而Python語言在這方面有極大的優(yōu)勢(shì),本篇文章主要介紹Python語言在自動(dòng)化方面的應(yīng)用。
【關(guān)鍵詞】Python Selenium 自動(dòng)化測(cè)試
1 概述
自動(dòng)化測(cè)試是指軟件測(cè)試的自動(dòng)化,軟件測(cè)試就是在預(yù)設(shè)條件下運(yùn)行系統(tǒng)或應(yīng)用程序,評(píng)估運(yùn)行結(jié)果,預(yù)先條件應(yīng)包括正常條件和異常條件。自動(dòng)化測(cè)試是把以人為驅(qū)動(dòng)的測(cè)試行為轉(zhuǎn)化為機(jī)器執(zhí)行的一種過程。
在做自動(dòng)化測(cè)試之前,首先應(yīng)該知道什么場(chǎng)景適合做自動(dòng)化測(cè)試,因?yàn)椴⒉皇撬许?xiàng)目都適合做自動(dòng)化測(cè)試的,項(xiàng)目滿足以下條件才可以進(jìn)行自動(dòng)化測(cè)試:
1.1 需求穩(wěn)定
為什么要求需求穩(wěn)定呢?
在一個(gè)項(xiàng)目組中如果需求經(jīng)常變動(dòng)的話,程序代碼也要做相應(yīng)的改動(dòng),一旦需求改動(dòng),測(cè)試人員所寫的測(cè)試用例也要做對(duì)應(yīng)的修改,測(cè)試用例修改了,測(cè)試用例對(duì)應(yīng)的自動(dòng)化測(cè)試腳本也要進(jìn)行調(diào)整,而對(duì)自動(dòng)化腳本的維護(hù)修改,需要花費(fèi)大量的人力物力,自動(dòng)化的一個(gè)主要目的就是節(jié)省人力成本,把人解放出來做更多的事情,重復(fù)的事情交給自動(dòng)化的代碼實(shí)現(xiàn),但如果代碼需要經(jīng)常維護(hù),人力就不能更好的解放出來,這就和自動(dòng)化的目的相違背。
當(dāng)然并不是說一個(gè)項(xiàng)目的需求不穩(wěn)定,就意味著完全不能自動(dòng)化測(cè)試了,對(duì)于某些功能文檔的模塊,我們還可以進(jìn)行自動(dòng)化測(cè)試,變動(dòng)頻繁的采用黑盒測(cè)試的方法,可以成為半自動(dòng)化測(cè)試。這就要求結(jié)合具體的項(xiàng)目做具體的分析,選用對(duì)應(yīng)的方法。
1.2 項(xiàng)目周期較長(zhǎng)
自動(dòng)化測(cè)試框架的選擇、設(shè)計(jì)、評(píng)審,腳本的編寫以及調(diào)試都需要一定的時(shí)間來完成,而這一過程基本可以理解為軟件開發(fā)的過程,這樣的一個(gè)周期是很長(zhǎng)時(shí)間的,如果項(xiàng)目的周期很短,自動(dòng)化測(cè)試的框架還沒確定好選取哪個(gè),項(xiàng)目就要上線運(yùn)行,那么就無法開展自動(dòng)化測(cè)試。
1.3 編寫的自動(dòng)化測(cè)試腳本復(fù)用度較高
經(jīng)過一個(gè)相對(duì)較長(zhǎng)的周期完成一個(gè)自動(dòng)化測(cè)試腳本的編寫,但是這些腳本只在上線前可以做回歸測(cè)試使用,以后再無用武之地,這樣的腳本復(fù)用度是很低的,是不符合現(xiàn)代化要求的,既然花那么大的成本開發(fā)一套腳本,就要有很強(qiáng)的復(fù)用性,這就要求在其他相似的項(xiàng)目中,對(duì)自動(dòng)化測(cè)試的腳本稍加改動(dòng),也能起到作用,這樣的腳本才能真正發(fā)揮它的價(jià)值,被廣泛地接受。
如果有些功能測(cè)試需要花費(fèi)大量的時(shí)間才能完成,就要想辦法引入自動(dòng)化測(cè)試,尤其是大數(shù)據(jù)量的測(cè)試,這些操作如果用人工測(cè)試的話,不僅花費(fèi)時(shí)間精力,而且最后測(cè)出的結(jié)果還不一定準(zhǔn)確,所以,遇到這樣的操作就要考慮引入自動(dòng)化測(cè)試。
我們所寫的自動(dòng)化腳本選擇python語言,那么多語言可以使用,為什么偏偏選用python語言。
首先Python是一種解釋型的、面向?qū)ο蟮摹?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)編程語言。解釋型,也就意味著開發(fā)過程中沒有了編譯源碼這個(gè)環(huán)節(jié);面向?qū)ο?,則意味著Python支持面向?qū)ο蟮娘L(fēng)格或代碼封裝在對(duì)象的編程技術(shù)。另外,其交互性意味著可以在一個(gè)Python提示符后,直接互動(dòng)寫和執(zhí)行程序。此外python語言還具有以下優(yōu)點(diǎn):
學(xué)起來簡(jiǎn)單:Python相對(duì)于其他語言來說有較少的關(guān)鍵字,語法結(jié)構(gòu)定義明確簡(jiǎn)單,這可以讓一個(gè)零基礎(chǔ)的學(xué)習(xí)者在短時(shí)間內(nèi)掌握該語言的語法并加以綜合的運(yùn)用實(shí)踐。
看起來容易:該語言寫的代碼順序簡(jiǎn)單清晰,可以順著自己的思路寫代碼,讓稍微懂一些語法的人都能很容易的讀懂代碼。
改起來方便:Python的源代碼不僅寫起來容易,而且還有一大優(yōu)點(diǎn)就是維護(hù)起來很方便。
較強(qiáng)的互動(dòng)模式:具有很強(qiáng)的互動(dòng)模式的支持,用戶可以從任意終端輸入任何結(jié)果正確的語言,讓互動(dòng)的測(cè)試和調(diào)試代碼片斷。
可擴(kuò)展性:在使用的過程中可以添加低層次的模塊到Python解釋器中。這些模塊使得程序員可以添加或定制自己的工具,更有效,更方便。
具有廣泛的標(biāo)準(zhǔn)庫:Python有一個(gè)很大的優(yōu)勢(shì)就是散裝庫是非常方便的、跨平臺(tái)上的linux系統(tǒng),Windows系統(tǒng)和Macintosh系統(tǒng)兼容。
2 自動(dòng)化測(cè)試的優(yōu)勢(shì)
在人工智能越來越重要的今天,自動(dòng)化的推廣顯得更加重要,同樣在軟件測(cè)試中推行自動(dòng)化測(cè)試也是勢(shì)在必行的,自動(dòng)化測(cè)試有以下幾方面優(yōu)勢(shì):
2.1大大節(jié)省回歸測(cè)試的效率
在每一次上線前或者復(fù)測(cè)bug的時(shí)候都需要把整個(gè)系統(tǒng)的業(yè)務(wù)流程都跑一遍,這樣的測(cè)試我們就可以稱為回歸測(cè)試,回歸測(cè)試的測(cè)試用例是固定的,而且量很大,此時(shí)再進(jìn)行人工的回歸測(cè)試,會(huì)花費(fèi)很多的時(shí)間,而且人都在做重復(fù)的操作,難免是人力的極大浪費(fèi),此時(shí)引入自動(dòng)化測(cè)試,可以大大的節(jié)省人力成本,提高工作效率。
2.2 可以高效率的執(zhí)行繁瑣的重復(fù)性的測(cè)試
自動(dòng)化測(cè)試相對(duì)于人工測(cè)試的一個(gè)明顯的優(yōu)點(diǎn)就是執(zhí)行效率高,測(cè)試人員在重復(fù)測(cè)試某個(gè)功能時(shí)會(huì)逐漸出現(xiàn)厭倦感,從而可能降低測(cè)試的效率,影響測(cè)試的效果,而自動(dòng)化測(cè)試就不會(huì)有這方面的顧慮,代碼去執(zhí)行測(cè)試,執(zhí)行的過程都是按照預(yù)設(shè)好的步驟代碼去執(zhí)行,最終測(cè)試人員只要看代碼即可。
2.3 能完成一些人工測(cè)試不能完成的測(cè)試
在測(cè)試數(shù)量較大且有隨機(jī)性特點(diǎn)的數(shù)據(jù)時(shí), 人工測(cè)試就不好完成,此時(shí)使用自動(dòng)化測(cè)試,隨機(jī)取一些沒有規(guī)律的數(shù)據(jù),就可達(dá)到模擬真實(shí)用戶測(cè)試數(shù)據(jù)的目的。
2.4 自動(dòng)化測(cè)試可以重復(fù)執(zhí)行且具有一致性
自動(dòng)化測(cè)試的腳本基本是固定的,在需要測(cè)試的時(shí)候,執(zhí)行下一腳本即可執(zhí)行測(cè)試,這樣可以反復(fù)執(zhí)行多次,在需要的時(shí)候執(zhí)行腳本即可完成測(cè)試。由于自動(dòng)化測(cè)試的腳本是固定的,每次執(zhí)行的內(nèi)容和執(zhí)行的結(jié)果的一致性是可以保證完全一樣的。
2.5 更好地利用人力資源endprint
將繁瑣的測(cè)試工作任務(wù)自動(dòng)化,可以提高測(cè)試的準(zhǔn)確性,也可以將測(cè)試技術(shù)人員解脫出來將更多精力投入到設(shè)計(jì)更好的測(cè)試用例中。有些測(cè)試項(xiàng)目模塊不適用于自動(dòng)測(cè)試,將可以執(zhí)行自動(dòng)測(cè)試的測(cè)試執(zhí)行自動(dòng)化測(cè)試之后,讓其余測(cè)試人員專注于不能自動(dòng)化測(cè)試的部分,從而提高手工測(cè)試的效率。圖1展示了在項(xiàng)目中自動(dòng)化測(cè)試的流程。
3 實(shí)驗(yàn)過程
3.1 環(huán)境配置
實(shí)驗(yàn)所需環(huán)境Windows7 64位操作系統(tǒng),python2+seleniun2,所用工具Pycharm45.0.2版本的火狐瀏覽器,以及火狐瀏覽器的插件Firebug、FirePathSeleniumBuilder。
3.2 技術(shù)分析
定位元素的確定可以通過百度的元素組成來查找,在編輯程序中輸入該命令的元素,便可執(zhí)行該命令,若有多個(gè)元素便可用以上方法來查找,利用列表中元素的位置所代表的數(shù)字也可以精確地執(zhí)行相關(guān)命令,這也體現(xiàn)了Python語言的準(zhǔn)確性,為工作提供了方便。
Selenium 是web應(yīng)用程序自動(dòng)化測(cè)試工具集,包括IDE、Grid、RC(selenium 1.0)、WebDriver(selenium 2.0)等,是直接運(yùn)行在瀏覽器中,模擬用戶在操作,具有很強(qiáng)的真實(shí)感。目前支持的瀏覽器包括IE系列、火狐瀏覽器、谷歌瀏覽器等。這個(gè)工具主要有以下功能:瀏覽器的兼容性測(cè)試--模擬應(yīng)用程序在IE瀏覽器 、火狐瀏覽器、谷歌瀏覽器的運(yùn)行情況,得出最終結(jié)果,查看哪個(gè)瀏覽器兼容性更好。測(cè)試整個(gè)系統(tǒng)的功能--創(chuàng)建回歸測(cè)試檢驗(yàn)軟件功能是否達(dá)到用戶需求。支持自動(dòng)錄制,錄制工具采用selenium IDE,錄制完可以自動(dòng)生成代碼,節(jié)省人力成本,并且支持其他不同語言的測(cè)試腳本。Selenium 是專門為Web應(yīng)用程序編寫的一個(gè)驗(yàn)收回歸測(cè)試的工具。
使用 python語言寫自動(dòng)化應(yīng)用到了該語言的類和方法以及對(duì)數(shù)據(jù)類型列表、 元組、 字典、字符串的常用操作,以及常用的if 判斷語句for、while循環(huán)語句,其中用到了該語言的面向?qū)ο蟮奶攸c(diǎn)(繼承、多態(tài)、封裝 )。
在用Pythonselenium實(shí)現(xiàn)自動(dòng)化測(cè)試的工程中最重要部分就是定位頁面元素,常用的定位頁面元素有8種方法以及這八種方法的復(fù)數(shù)形式,如果是通過復(fù)數(shù)定位到的元素則會(huì)定位到一組元素,這八種方法包含:通過id查找元素、通過name查找元素、通過classname查找元素、通過tagname查找元素、通過link_text查找元素、通過partial_link_text查找元素、通過xpath查找元素、通過css選擇器查找元素,其中除了xpath和css選擇器外,其他都是可以在頁面中通過F12查看到的,而xpath和css是一種特殊的語法。
XPath即為XML路徑語言,它是一種用來確定XML(標(biāo)準(zhǔn)通用標(biāo)記語言的子集)文檔中某部分的語言。XPath基于XML的樹狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹中找尋節(jié)點(diǎn)的能力這種途徑給編輯語言帶來了極大的便利,也為把繁瑣復(fù)雜的程序簡(jiǎn)單化提供了可能。
例如Python可以通過火狐瀏覽器自動(dòng)打開網(wǎng)頁,通過編輯程序可以執(zhí)行相關(guān)操作:
import webdriver 導(dǎo)入所需的框架,當(dāng)然在導(dǎo)入前,需要進(jìn)行安裝。webdriver.Firefox()自動(dòng)打開火狐瀏覽器,這里就對(duì)火狐瀏覽器的版本有要求,版本必須低于火狐46,否則不能自動(dòng)打開瀏覽器,selenium默認(rèn)支持火狐瀏覽器,如果需要在IE瀏覽器或者谷歌瀏覽器則需要下載對(duì)應(yīng)的驅(qū)動(dòng)。下面展示了部分代碼:
driver.get("https://www.baidu.com/")在火狐瀏覽器中自動(dòng)輸入百度的網(wǎng)址并打開
driver.find_element_by_id("kw").send_keys(u"2018高考")獲取百度搜索框并自動(dòng)輸入2018高考,當(dāng)然還可以輸入你需要搜索的任何內(nèi)容
find_element_by_id("su").click()定位到百度一下按鈕并自動(dòng)點(diǎn)擊該按鈕進(jìn)行搜索
close()然后使用該方法自動(dòng)關(guān)閉瀏覽器,否則運(yùn)行次數(shù)多的時(shí)候,系統(tǒng)會(huì)卡掉。
find_element_by_xpath("http://*[@id='kw']")此行代碼是通過xpath方法獲取百度搜索框,其中//表示從任何位置開始匹配,*代表匹配任何的標(biāo)簽,@id='kw'表示找到屬性名是id,值是kw的元素。
4 實(shí)驗(yàn)結(jié)果
通過模擬人工操作,使用代碼的形式編寫程序?qū)崿F(xiàn)對(duì)瀏覽器的常用操作,以及對(duì)頁面元素的操作,可以模擬常見的輸入、點(diǎn)擊、清除文本,輸入回車、空格、刪除字符以及瀏覽的最大化、截圖、指定瀏覽器頁面大小、關(guān)閉瀏覽器的操作。
5 結(jié)論
通過Python進(jìn)行自動(dòng)化測(cè)試大大節(jié)約了人力,通過Firebug和Fire Path可以得到有關(guān)按鍵的位置以及名稱,節(jié)省了大量的時(shí)間,為各種程序的設(shè)計(jì)者提供了方便,自動(dòng)化編輯更是迎來了廣闊的發(fā)展空間與前景,對(duì)于我國(guó)科技的進(jìn)步以及生產(chǎn)力的發(fā)展也起到了很大的推動(dòng)作用。
參考文獻(xiàn)
[1]網(wǎng)址http://www.w3.org/1999/xhtml.
[2]蟲師.《selenium webdriver python (第二版)[M].北京:電子工業(yè)出版社,2013.
作者單位
新泰一中 山東省新泰市 271200endprint