自動(dòng)化測(cè)試培訓(xùn)_第1頁(yè)
自動(dòng)化測(cè)試培訓(xùn)_第2頁(yè)
自動(dòng)化測(cè)試培訓(xùn)_第3頁(yè)
自動(dòng)化測(cè)試培訓(xùn)_第4頁(yè)
自動(dòng)化測(cè)試培訓(xùn)_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

AutomationTestTraining劉萬(wàn)紅2015-08-15課程安排時(shí)間安排課程內(nèi)容2015/08/229:30am—12:00am測(cè)試流程SecurityTesting2015/08/2213:00pm—18:00pm自動(dòng)化測(cè)試?yán)碚揝eleniumwebdriver2015/08/239:30am—12:00am自動(dòng)化測(cè)試框架搭建2015/08/2313:00pm—18:00pm自動(dòng)化測(cè)試框架使用目標(biāo)一

本次培訓(xùn)目標(biāo):了解Selenium基本框架結(jié)構(gòu)具備自動(dòng)化測(cè)試思想

會(huì)搭建自動(dòng)化測(cè)試環(huán)境了解selenium常用API了解自動(dòng)化測(cè)試開(kāi)展過(guò)程中的注意事項(xiàng)目標(biāo)二

能夠在原有框架基礎(chǔ)上進(jìn)行二次開(kāi)發(fā)(框架升級(jí)維護(hù)和使用)具備安全性測(cè)試思想了解常見(jiàn)安全性問(wèn)題類(lèi)型原理會(huì)使用APPScan進(jìn)行代碼掃描并提交分析報(bào)告測(cè)試管理流程Q/A大綱一

自動(dòng)化測(cè)試行業(yè)現(xiàn)狀自動(dòng)化測(cè)試投入產(chǎn)出分析

什么時(shí)候開(kāi)展自動(dòng)化測(cè)試

自動(dòng)化測(cè)試最新的發(fā)展技術(shù)自動(dòng)化測(cè)試工具比較

自動(dòng)化測(cè)試環(huán)境搭建Selenium框架介紹Xpath基礎(chǔ)介紹大綱二

小工具介紹Firebug/xpather/iedeveloperSelenium常用API現(xiàn)有框架詳細(xì)解析自動(dòng)化測(cè)試開(kāi)展過(guò)程中的注意事項(xiàng)實(shí)戰(zhàn)-搭建本公司自動(dòng)化測(cè)試框架安全性測(cè)試介紹APPScan使用介紹測(cè)試管理流程

測(cè)試流程

發(fā)布流程:FATUAT點(diǎn)火堡壘測(cè)試(smoking)Baking(灰度)Rolling(Prod)質(zhì)量報(bào)告

SecurityTestTraining2014重大安全事故

2014年2月比特幣交易站受攻擊破產(chǎn)2014年4月中國(guó)快遞1400萬(wàn)信息泄露2014年5月22日,eBay要求近1.28億活躍用戶(hù)全部重新設(shè)置2014年9月,大約有500萬(wàn)谷歌的賬戶(hù)和密碼的數(shù)據(jù)庫(kù)被泄露密2014年12月25日,烏云漏洞報(bào)告平臺(tái)報(bào)告稱(chēng),大量12306用戶(hù)數(shù)據(jù)在互聯(lián)網(wǎng)瘋傳,內(nèi)容包括用戶(hù)帳號(hào)、明文密碼、身份證號(hào)碼、手機(jī)號(hào)碼和電子郵箱等碼安全測(cè)試測(cè)試經(jīng)理以以及領(lǐng)導(dǎo)對(duì)對(duì)安全測(cè)試試要足夠重重視安全測(cè)試也也要有測(cè)試試計(jì)劃安全測(cè)試是是一個(gè)體系系,需要從從需求/設(shè)計(jì)/開(kāi)發(fā)規(guī)范/編碼到測(cè)試試一起努力力。從測(cè)試的角角度,必須須有部分手手工安全性性驗(yàn)證的case,有必要在在發(fā)布之前前建立安全全checklist代碼掃描只只是安全測(cè)測(cè)試的一部部分工作開(kāi)發(fā)團(tuán)隊(duì)要要有專(zhuān)人解解決安全性性問(wèn)題安全測(cè)試case分層從測(cè)試工程程師角度去去設(shè)計(jì)Testcase:應(yīng)用程序安安全測(cè)試(密碼/權(quán)限劃分/超時(shí)/代碼掃描)操作系統(tǒng)安安全測(cè)試((帳號(hào)/文件服務(wù)/日志)數(shù)據(jù)庫(kù)安全全測(cè)試(賬賬戶(hù)/口令/IP限制/定期備份/演練方案))服務(wù)器安全全測(cè)試(日日志/補(bǔ)丁/身份驗(yàn)證/超時(shí)設(shè)置/跳板機(jī))網(wǎng)絡(luò)環(huán)境安安全測(cè)試((防火墻/網(wǎng)段/異地備份))安全性測(cè)試試常見(jiàn)安全問(wèn)問(wèn)題類(lèi)型CSRF(Cross-siterequestforgery),跨站請(qǐng)請(qǐng)求偽造XSS又叫CSS(CrossSiteScript),跨站腳本本攻擊SQLInjection(SQL注入)傳輸中與存存儲(chǔ)時(shí)的密密碼沒(méi)有加加密,不不安全的通通信目錄遍歷緩沖區(qū)溢出出CSRF跨站請(qǐng)求偽偽造(英語(yǔ):Cross-siterequestforgery),也被稱(chēng)稱(chēng)為one-clickattack或者sessionriding,通常縮寫(xiě)寫(xiě)為CSRF或者XSRF,是一種種挾制用戶(hù)戶(hù)在當(dāng)前已已登錄的Web應(yīng)用程序上上執(zhí)行非本本意的操作作的攻擊方方法。跟跨跨網(wǎng)站腳本本(XSS)相比,XSS利用的是用用戶(hù)對(duì)指定定網(wǎng)站的信信任,CSRF利用的是網(wǎng)網(wǎng)站對(duì)用戶(hù)戶(hù)網(wǎng)頁(yè)瀏覽覽器的信任任敏感頁(yè)面要要采用https訪(fǎng)問(wèn)不要選擇記記住密碼XSSXSS又叫CSS(CrossSiteScript),跨站腳本攻攻擊。它指的的是惡意攻擊擊者往Web頁(yè)面里插入惡惡意腳本代碼碼,當(dāng)用戶(hù)瀏瀏覽該頁(yè)之時(shí)時(shí),嵌入其中中Web里面的腳本代代碼會(huì)被執(zhí)行行,從而達(dá)到到惡意攻擊用用戶(hù)的特殊目目的。最常見(jiàn)見(jiàn)就是釣魚(yú)網(wǎng)網(wǎng)站(在有漏漏洞的正規(guī)網(wǎng)網(wǎng)站上嵌入登登陸框套取賬賬戶(hù)和密碼))測(cè)試方法:在在輸入框中輸輸入下列字符符,可直接輸輸入腳本來(lái)看看HTML標(biāo)簽:<…>…</…>轉(zhuǎn)義字符:&(&);<(<);>(>); (空格);腳本語(yǔ)言:<script>alert(document.cookie);</script>特殊字符:‘

’<>/最小和最大的的長(zhǎng)度是否允許空輸輸入對(duì)Grid、Label、Treeview類(lèi)的輸入框未未作驗(yàn)證,輸輸入的內(nèi)容會(huì)會(huì)按照html語(yǔ)法解析出來(lái)來(lái),要控制腳腳本注入的語(yǔ)語(yǔ)法要素。比比如:javascript離不開(kāi):“<”、“>”、“(”、“)”、“;”.在輸入或輸出出時(shí)對(duì)其進(jìn)行行字符過(guò)濾或或轉(zhuǎn)義處理SQLInjectionSQL注入是描述一一個(gè)利用寫(xiě)入入特殊SQL程序碼攻擊應(yīng)應(yīng)用程序的動(dòng)動(dòng)作,用戶(hù)可可以提交一段段數(shù)據(jù)庫(kù)查詢(xún)?cè)兇a,根據(jù)據(jù)程序返回的的結(jié)果,獲得得某些他想得得知的數(shù)據(jù).只要是帶有參參數(shù)的動(dòng)態(tài)網(wǎng)網(wǎng)頁(yè)且此網(wǎng)頁(yè)頁(yè)訪(fǎng)問(wèn)了數(shù)據(jù)據(jù)庫(kù),那么就就有可能存在在SQL注入例:一個(gè)驗(yàn)證證用戶(hù)登陸的的頁(yè)面,如果使用的sql語(yǔ)句為:Select*fromtableAwhereusername=’’+username+’’andpassword…..則在Sql語(yǔ)句后面輸輸入‘or1=1――就可以不輸入入任何password進(jìn)行攻擊SELECTcount(*)FROMusers

WHEREusername='a'or'a'='a'ANDpassword='a'or'a'='a'解決方案:1、轉(zhuǎn)義敏感字字符及字符串串,SQL的敏感字符包包括:”Union”,”cmd”,”+”,”//”,”..”,”;””,”‘”,”--”,”%”,””0x”,””><=!-*/()|”,和”空格”.

2、屏蔽出錯(cuò)信信息:阻止攻攻擊者知道攻攻擊的結(jié)果3、在服務(wù)端正正式處理之前前提交數(shù)據(jù)的的合法性(數(shù)據(jù)類(lèi)型,數(shù)據(jù)長(zhǎng)度,敏感字符的校校驗(yàn))從測(cè)試人員的的角度來(lái)講,在程序開(kāi)發(fā)前前(即需求階段),我們就應(yīng)該有有意識(shí)的將安安全性檢查查應(yīng)用到需求求測(cè)試中,例如對(duì)一個(gè)表表單需求進(jìn)行行檢查時(shí),我們一般檢驗(yàn)驗(yàn)以下幾項(xiàng)項(xiàng)安全

性問(wèn)問(wèn)題:

1、需求中應(yīng)說(shuō)說(shuō)明表單中某某一FIELD的類(lèi)型,長(zhǎng)度,以及取值范圍圍(主要作用就是是禁止輸入敏敏感字符)

2、需求中應(yīng)說(shuō)說(shuō)明如果超出出表單規(guī)定的的類(lèi)型,長(zhǎng)度,以及取值范圍圍的,應(yīng)用程序應(yīng)給給出不

包含含任何代碼或或數(shù)據(jù)庫(kù)信息息的錯(cuò)誤提示示.目錄遍歷舉例:那現(xiàn)在把這個(gè)個(gè)URL改裝裝一下:/usr/local/apache/conf/里的所有文件件都出來(lái)了解決方案:1、限制Web應(yīng)用在服務(wù)器器上的運(yùn)行,,格設(shè)定WEB服務(wù)器的目錄錄訪(fǎng)問(wèn)權(quán)限22、進(jìn)行嚴(yán)嚴(yán)格的輸入驗(yàn)驗(yàn)證,控制用用戶(hù)輸入非法法路徑,如在在每個(gè)目錄訪(fǎng)訪(fǎng)問(wèn)時(shí)有index.htm緩沖區(qū)溢出緩存溢出(Bufferoverflow)是指在存在緩緩存溢出安全全漏洞的計(jì)算算機(jī)中,攻擊擊者可以用超超出常規(guī)長(zhǎng)度度的字符數(shù)來(lái)來(lái)填滿(mǎn)一個(gè)域域,通常是內(nèi)內(nèi)存區(qū)地址。。在某些情況況下,這些過(guò)過(guò)量的字符能能夠作為“可可執(zhí)行”代碼碼來(lái)運(yùn)行。從從而使得攻擊擊者可以不受受安全措施的的約束來(lái)控制制被攻擊的計(jì)計(jì)算機(jī)。用戶(hù)戶(hù)使用緩沖區(qū)區(qū)溢出來(lái)破壞壞web應(yīng)用程序的棧棧,通過(guò)發(fā)送送特別編寫(xiě)的的代碼到web程序中,攻擊擊者可以讓web應(yīng)用程序來(lái)執(zhí)執(zhí)行任意代碼碼WEB服務(wù)器沒(méi)有對(duì)對(duì)用戶(hù)提交的的超長(zhǎng)請(qǐng)求沒(méi)沒(méi)有進(jìn)行合適適的處理,這這種請(qǐng)求可能能包括超長(zhǎng)URL,超長(zhǎng)HTTPHeader域,或者是其其它超長(zhǎng)的數(shù)數(shù)據(jù)不安全的存儲(chǔ)儲(chǔ)/上傳沒(méi)有做過(guò)過(guò)濾如何測(cè)試:沒(méi)沒(méi)有加密關(guān)鍵鍵數(shù)據(jù)

例::view-source:http地址可以查看看源代碼在在頁(yè)面輸入密密碼,頁(yè)面顯顯示的是*****,右鍵,查看源源不恰當(dāng)?shù)漠惓3L幚矸治觯撼绦蛟谠趻伋霎惓5牡臅r(shí)候給出了了比較詳細(xì)的的內(nèi)部錯(cuò)誤信信息,,暴露了不應(yīng)應(yīng)該顯示的執(zhí)執(zhí)行細(xì)節(jié),網(wǎng)網(wǎng)站存在潛在在漏洞,文件就可以看看見(jiàn)剛才輸入入的密碼,APPScan配置要求IBMAPPScanAPPScan安裝破解由于新版7.8以前的產(chǎn)品的的舊格式(.lic)許可證可以以繼續(xù)用于新新版本的APPSCAN所以可以使用用以下方法進(jìn)進(jìn)行破解。解壓AppScan7.8破解.rar你會(huì)看到:patch.exekeygen.exe如果沒(méi)有看到到keygen.exe那肯定被你的的殺毒軟件給給干了.解壓之前一定定要關(guān)掉所有有殺毒的(包包括關(guān)閉自動(dòng)動(dòng)防護(hù)).第一步:打開(kāi)patch.exe>patch>Cannotfindthefile.Searchthefile?>是>(AppScan安裝目錄下)選中engine_control.dll>OK第二步:打開(kāi)keygen.exe>在第一個(gè)框TeamEDGE輸入隨便輸入入如:keygen>Generate>當(dāng)前目錄生成成license.lic第三步:將自動(dòng)生成的的license.lic復(fù)制到APPSCAN的安裝目錄下下。第四步:打開(kāi)APPSCAN程序,單擊幫幫助>許可證>裝入舊格式((.lic)許可可證APPScan掃描原原理一一APPScan掃描原原理二二執(zhí)行掃掃描的的原理理APPScan工作流流程APPScan工作流流程界面介介紹實(shí)例1實(shí)例2實(shí)例3實(shí)例4實(shí)例5在執(zhí)行行Web安全掃掃描任任務(wù)的的過(guò)程程中,,您可可以隨隨時(shí)查查看已已經(jīng)檢檢測(cè)出出的Web安全問(wèn)問(wèn)題。。掃描專(zhuān)專(zhuān)家評(píng)評(píng)估完完成后后,會(huì)會(huì)顯示示所建建議的的配置置更改改核實(shí)實(shí)表。。這里要要注意意的是是:如如果存存在用用戶(hù)輸輸入的的APPSCAN無(wú)法執(zhí)執(zhí)行的的更改改,那那么它它們的的復(fù)選選框會(huì)會(huì)顯示示成灰灰色且且為未未選中中狀態(tài)態(tài),如如果要要修改改這些些更改改,單單擊更更改的的鏈接接實(shí)例6實(shí)例7實(shí)例8AutomationTestTraining自動(dòng)化化測(cè)試試項(xiàng)目目要素素投入產(chǎn)產(chǎn)出迭代速速度工具選選擇環(huán)境搭搭建代碼管管理開(kāi)發(fā)周周期難點(diǎn)解解決后期維維護(hù)自動(dòng)化化測(cè)試試工作作開(kāi)展展如何在在項(xiàng)目目中快快速開(kāi)開(kāi)展自自動(dòng)化化測(cè)試試?團(tuán)隊(duì)(知識(shí)結(jié)結(jié)構(gòu),,性格格,職職業(yè)發(fā)發(fā)展)Troubleshooter,Teamlead流程(目標(biāo),,代碼碼,環(huán)環(huán)境)為什么么目標(biāo)標(biāo)很重重要??技術(shù)(語(yǔ)言,,框架架,工工具)如何選選擇??自動(dòng)化化測(cè)試試工具具Watij/Selenium/WebdirverQTP/Winrunner/AutorunnerRobotiumAppiumLoadrunnerUI自動(dòng)化化API自動(dòng)化化Mobile自動(dòng)化化分層自自動(dòng)化化概念念:UI自動(dòng)化化測(cè)試試工具具比較較Watij:開(kāi)源,,只支支持IE瀏覽器器,對(duì)對(duì)象識(shí)識(shí)別完完全開(kāi)開(kāi)發(fā),,只自自持B/S結(jié)構(gòu),,上手手需要要一定定代碼碼基礎(chǔ)礎(chǔ)QTP:商用用,,單單機(jī)機(jī)license5000美金金,,Vbscript語(yǔ)言言,,可可以以錄錄制制,,支支持持IE和firefox,上上手手容容易易,,支支持持CS結(jié)構(gòu)構(gòu)。。但但是是對(duì)對(duì)象象識(shí)識(shí)別別不不透透明明,,腳腳本本復(fù)復(fù)用用性性差差Webdirver:開(kāi)源源,,支支持持IE/Firefox/Chrome瀏覽覽器器,,對(duì)對(duì)象象識(shí)識(shí)別別完完全全開(kāi)開(kāi)發(fā)發(fā),,只只支支持持B/S結(jié)構(gòu)構(gòu),,需需要要一一定定代代碼碼基基礎(chǔ)礎(chǔ)Selenium自學(xué)學(xué)的的迷迷惑惑selenium的projects包含含如如下下幾幾個(gè)個(gè)方方面面::1.SeleniumIDE、2.SeleniumRemoteControl、3.SeleniumGrid、作為為Firefox上的的一一個(gè)個(gè)插插件件,,提提供供錄錄制制功功能能,,個(gè)個(gè)人人觀觀點(diǎn)點(diǎn),,如如果果能能手手寫(xiě)寫(xiě)代代碼碼,,就就不不要要用用這這個(gè)個(gè)東東西西。。2.SeleniumRemoteControl是一一個(gè)個(gè)客客戶(hù)戶(hù)端端/服務(wù)務(wù)器器系系統(tǒng)統(tǒng),,可可以以在在本本地地或或在在其其他他電電腦腦上上控控制制Web瀏覽覽器器,,使使用用幾幾乎乎任任何何編編程程語(yǔ)語(yǔ)言言和和測(cè)測(cè)試試框框架架。。3.SeleniumGrid可以以遠(yuǎn)遠(yuǎn)程程的的控控制制到到并并在在多多個(gè)個(gè)服服務(wù)務(wù)器器上上同同時(shí)時(shí)運(yùn)運(yùn)行行測(cè)測(cè)試試4.SeleniumWebDriver可以以在在本本地地或或遠(yuǎn)遠(yuǎn)程程計(jì)計(jì)算算機(jī)機(jī)上上的的驅(qū)驅(qū)動(dòng)動(dòng)瀏瀏覽覽器器初識(shí)識(shí)Webdriver自動(dòng)動(dòng)化化測(cè)測(cè)試試思想想Case層::Case層是是一一個(gè)個(gè)個(gè)個(gè)完完整整的的測(cè)測(cè)試試案案例例,,是是自自動(dòng)動(dòng)化化測(cè)測(cè)試試中中最最小小的的執(zhí)執(zhí)行行單單元元;;Flow層::Flow層是是對(duì)對(duì)測(cè)測(cè)試試所所執(zhí)執(zhí)行行的的操操作作的的抽抽象象,,每每一一個(gè)個(gè)測(cè)測(cè)試試案案例例都都是是由由一一系系列列的的測(cè)測(cè)試試操操作作組組合合而而成成,,F(xiàn)low層為為Case層提提供供了了可可組組合合的的操操作作集集;;Page層::Page層是是對(duì)對(duì)系系統(tǒng)統(tǒng)中中頁(yè)頁(yè)面面的的抽抽象象,,F(xiàn)low層是是一一系系列列對(duì)對(duì)于于頁(yè)頁(yè)面面或或者者頁(yè)頁(yè)面面上上數(shù)數(shù)據(jù)據(jù)的的操操作作的的組組合合。。Page層為為Flow層提提供供了了可可操操作作的的頁(yè)頁(yè)面面集集合合;;Data層::Data層是是對(duì)對(duì)頁(yè)頁(yè)面面上上可可操操作作的的數(shù)數(shù)據(jù)據(jù)的的抽抽象象,,為為Flow層提提供供了了頁(yè)頁(yè)面面上上可可操操作作數(shù)數(shù)據(jù)據(jù)的的集集合合;;Element層::Element是頁(yè)頁(yè)面面上上的的IE控件件的的抽抽象象,,每每一一個(gè)個(gè)Page都是是由由這這些些IE空間間組組合合而而成成,,Element層為為Page層提提供供了了IE控件件的的集集合合;;XML文件件::XML文件件的的作作用用是是為為Data層提提供供測(cè)測(cè)試試所所需需數(shù)數(shù)據(jù)據(jù);;框架架介介紹紹一一框架架介介紹紹二二框架架介介紹紹三三ResultcheckCaseExecute腳本本運(yùn)運(yùn)行行腳本本運(yùn)運(yùn)行行單個(gè)測(cè)試試腳本執(zhí)執(zhí)行:?jiǎn)螁蝹€(gè)執(zhí)行行的時(shí)候候使用了了Junit執(zhí)行,因因此在創(chuàng)創(chuàng)建時(shí)候候需要添添加@Test標(biāo)簽,運(yùn)運(yùn)行時(shí)選選擇Outline中的相應(yīng)應(yīng)方法點(diǎn)點(diǎn)擊右鍵鍵選擇RunAsJunit;多腳本執(zhí)執(zhí)行:在在執(zhí)行多多個(gè)測(cè)試試腳本的的時(shí)候框框架通過(guò)過(guò)Ant觸發(fā)TestDriver運(yùn)行,要要運(yùn)行的的Case集合配置置與TestCaseList.xml文件中,,TestCaseList.xml文件內(nèi)容容如下所所示:<TestCaseList><RunTimesvalue="1"/><TimeOutvalues="1800"/><TestClassname="TestCases.LS33Cases.RegressionCases"testAll="N"><Caseenable="Y">NBUTest_001</Case></TestClass></TestCaseList>其中:<RunTimesvalue="1"/>指定了Fail的Case的執(zhí)行次次數(shù),即即Fail的case否則重新新執(zhí)行;;<TimeOutvalues="1800"/>指定了每每個(gè)case的執(zhí)行時(shí)時(shí)間,如如果Case執(zhí)行超過(guò)過(guò)這個(gè)時(shí)時(shí)間將會(huì)會(huì)終止該該Case的執(zhí)行;;<TestClassname="TestCases.LS33Cases.RegressionCases"testAll="N"/>指定了運(yùn)運(yùn)行的Case集合,如如果testAll屬性的值是Y則執(zhí)行該該Class下的標(biāo)有有@Test標(biāo)簽的方方法,如如果是N則執(zhí)行<Caseenable="Y">NBUTest_001</Case>中標(biāo)識(shí)的的方法。。TestNG配置批量量執(zhí)行case1.安裝TestNGeclipseplugin:Eclipse:Help->SoftwareUpdates->FindandInstall->Searchfornewfeaturestoinstall按NewRemoteSiteName:TestNG

URL:/eclipse然后安裝裝即可2.接入,只只需要導(dǎo)導(dǎo)入的@Test,然后添加加TestNG對(duì)應(yīng)xml配置格式式如下<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEsuiteSYSTEM"/testng-1.0.dtd"><suitename="Releasetest"parallel="methods"configfailurepolicy="continue"thread-count="20"><testverbose="3"name="RegressionTest"><classes><classname="TestCase_Regression.Test_AppRollBack"/><classname="TestCase_Regression.Testcase_Part1_C365643_LDUatFail"/></classes>或者<packages><packagename="Configman"></package><packagename="CRoller"></package><packagename="CrollerToROP"></package></packages></test></suite>3.在xml右側(cè)菜單單運(yùn)行選選擇runastestng就能運(yùn)行行對(duì)應(yīng)的的testsuite,如果需要要不同的的suite,只需要添添加并配配置xml。環(huán)境搭建建測(cè)試環(huán)境境的搭建建代碼管理理開(kāi)發(fā)平臺(tái)臺(tái)Selenium2+Junit4+SVN+EclipseSelenium2+TestNG+SVN+EclipseseleniumJava環(huán)境搭建建Webdriver對(duì)瀏覽器器的支持持2.1HtmlUnitDriver優(yōu)點(diǎn):HtmlUnitDriver不會(huì)實(shí)際際打開(kāi)瀏瀏覽器,,運(yùn)行速速度很快快。對(duì)于于用FireFox等瀏覽器器來(lái)做測(cè)測(cè)試的自自動(dòng)化測(cè)測(cè)試用例例,運(yùn)行行速度通通常很慢慢,HtmlUnitDriver無(wú)疑是可可以很好好地解決決這個(gè)問(wèn)問(wèn)題。缺點(diǎn):它它對(duì)JavaScript的支持不不夠好,,當(dāng)頁(yè)面面上有復(fù)復(fù)雜JavaScript時(shí),經(jīng)常常會(huì)捕獲獲不到頁(yè)頁(yè)面元素素。使用:WebDriverdriver=newHtmlUnitDriver();2.2FireFoxDriver優(yōu)點(diǎn):FireFoxDirver對(duì)頁(yè)面的的自動(dòng)化化測(cè)試支支持得比比較好,,很直觀觀地模擬擬頁(yè)面的的操作,,對(duì)JavaScript的支持也也非常完完善,基基本上頁(yè)頁(yè)面上做做的所有有操作FireFoxDriver都可以模模擬。缺點(diǎn):?jiǎn)?dòng)很慢慢,運(yùn)行行也比較較慢,不不過(guò),啟啟動(dòng)之后后Webdriver的操作速速度雖然然不快但但還是可可以接受受的。使用:WebDriverdriver=newFirefoxDriver();2.3InternetExplorerDriver優(yōu)點(diǎn):直直觀地模模擬用戶(hù)戶(hù)的實(shí)際際操作,,對(duì)JavaScript提供完善善的支持持。缺點(diǎn):是是所有瀏瀏覽器中中運(yùn)行速速度最慢慢的,并并且只能能在Windows下運(yùn)行,,對(duì)CSS以及XPATH的支持也也不夠好好。使用:WebDriverdriver=newInternetExplorerDriver();對(duì)瀏覽器器的簡(jiǎn)單單操作一A.firefox//打開(kāi)默認(rèn)認(rèn)路徑的的firefox(路徑指指的是firefox的安裝路路徑)WebDriverdiver=newFirefoxDriver();//打開(kāi)指定定路徑的的firefox,方法1

System.setProperty("webdriver.firefox.bin","D:\\ProgramFiles\\MozillaFirefox\\firefox.exe");WebDriverdr=newFirefoxDriver();//打開(kāi)指指定路路徑的的firefox,方法2FilepathToFirefoxBinary=newFile("D:\\ProgramFiles\\MozillaFirefox\\firefox.exe");FirefoxBinaryfirefoxbin=newFirefoxBinary(pathToFirefoxBinary);WebDriverdriver1=newFirefoxDriver(firefoxbin,null);B.ie//打開(kāi)ieWebDriverie_driver=newInternetExplorerDriver();C.chrome因?yàn)镃hromeDriver是Chromium項(xiàng)目自己支支持和維護(hù)護(hù)的,所以以你必需另另外下載chromedriver.exe,放在目錄錄下C:\WINDOWS\system32下載地址::打開(kāi)chrome

WebDriverdriver=newChromeDriver();另一種啟動(dòng)動(dòng)chrome的方法wiki介紹:打開(kāi)chromeSystem.setProperty("webdriver.chrome.driver","D:\\chromedriver.exe");System.setProperty("webdriver.chrome.bin",C:\\DocumentsandSettings\\fy\\LocalSettings"+"\\ApplicationData\\Google\\Chrome\\Application\\chrome.exe");對(duì)瀏覽器的的簡(jiǎn)單操作作二最大化瀏覽覽器WebDriverdriver=newFirefoxDriver();driver.manage().window().maximize();Stringtitle=driver.getTitle();

//得到當(dāng)前頁(yè)頁(yè)面urlStringcurrentUrl=driver.getCurrentUrl();getWindowHandle()返回當(dāng)前的的瀏覽器的的窗口句柄柄getWindowHandles()返回當(dāng)前的的瀏覽器的的所有窗口口句柄getPageSource()返回當(dāng)前頁(yè)頁(yè)面的源碼碼//Strings=driver.getPageSource();s=s.substring(s.indexOf("{"),s.indexOf("}"));//System.out.println("當(dāng)前頁(yè)面的的源碼:"+s);如何找到頁(yè)頁(yè)面元素一Webdriver的findElement方法可以用用來(lái)找到頁(yè)頁(yè)面的某個(gè)個(gè)元素,最最常用的方方法是用id和name查找。幾種種比較常用用的方法。。4.1.1ByID假設(shè)頁(yè)面寫(xiě)寫(xiě)成這樣::<inputtype="text"name="passwd"id="passwd-id"/>那么可以這這樣找到頁(yè)頁(yè)面的元素素:通過(guò)id查找:WebElementelement=driver.findElement(By.id("passwd-id"));4.1.2ByName或通過(guò)name查找:WebElementelement=driver.findElement(B("passwd"));4.1.3ByXPATH或通過(guò)xpath查找:WebElementelement=driver.findElement(By.xpath("http://input[@id='passwd-id']"));如何找到頁(yè)頁(yè)面元素二如何對(duì)頁(yè)面面元素進(jìn)行行操作一輸入框(textfieldortextarea)找到輸入框框元素:WebElementelement=driver.findElement(By.id("passwd-id"));在輸入框中中輸入內(nèi)容容:element.sendKeys(“test”);將輸入框清清空:element.clear();獲取輸入框框的文本內(nèi)內(nèi)容:element.getText();下拉選擇框框(Select)找到下拉選選擇框的元元素:Selectselect=newSelect(driver.findElement(By.id("select")));選擇對(duì)應(yīng)的的選擇項(xiàng)::select.selectByVisibleText(“mediaAgencyA””);或select.selectByValue(“MA_ID_001”);不選擇對(duì)應(yīng)應(yīng)的選擇項(xiàng)項(xiàng):select.deselectAll();select.deselectByValue(“MA_ID_001”);select.deselectByVisibleText(“mediaAgencyA”);或者獲取選選擇項(xiàng)的值值:select.getAllSelectedOptions();select.getFirstSelectedOption();如何對(duì)頁(yè)面面元素進(jìn)行行操作二單選項(xiàng)(RadioButton)找到單選框框元素:WebElementbookMode=driver.findElement(By.id("BookMode"));選擇某個(gè)單單選項(xiàng):bookMode.click();清空某個(gè)單單選項(xiàng):bookMode.clear();判斷某個(gè)單單選項(xiàng)是否否已經(jīng)被選選擇:bookMode.isSelected();多選項(xiàng)(checkbox)多選項(xiàng)的操操作和單選選的差不多多:WebElementcheckbox=driver.findElement(By.id("myCheckbox."));checkbox.click();checkbox.clear();checkbox.isSelected();checkbox.isEnabled();按鈕(button)找到按鈕元元素:WebElementsaveButton=driver.findElement(By.id("save"));點(diǎn)擊擊按按鈕鈕::saveButton.click();判斷斷按按鈕鈕是是否否enable:saveButton.isEnabled();如何何對(duì)對(duì)頁(yè)頁(yè)面面元元素素進(jìn)進(jìn)行行操操作作三左右右選選擇擇框框也就就是是左左邊邊是是可可供供選選擇擇項(xiàng)項(xiàng),,選選擇擇后后移移動(dòng)動(dòng)到到右右邊邊的的框框中中,,反反之之亦亦然然。。例例如如::Selectlang=newSelect(driver.findElement(By.id("languages")));lang.selectByVisibleText(““English””);WebElementaddLanguage=driver.findElement(By.id("addButton"));addLanguage.click();彈出出對(duì)對(duì)話(huà)話(huà)框框(Popupdialogs)Alertalert=driver.switchTo().alert();alert.accept();alert.dismiss();alert.getText();表單單(Form)Form中的的元元素素的的操操作作和和其其它它的的元元素素操操作作一一樣樣,,對(duì)對(duì)元元素素操操作作完完成成后后對(duì)對(duì)表表單單的的提提交交可可以以::WebElementapprove=driver.findElement(By.id("approve"));approve.click();或approve.submit();//只適合于表單單的提交上傳文件(UploadFile)上傳文件的元元素操作:WebElementadFileUpload=driver.findElement(By.id("WAP-upload"));StringfilePath="C:\test\\uploadfile\\media_ads\\test.jpg";adFileUpload.sendKeys(filePath);如何對(duì)頁(yè)面元元素進(jìn)行操作作四Windows和Frames之間的切換一般來(lái)說(shuō),登登錄后建議是是先:driver.switchTo().defaultContent();切換到某個(gè)frame:driver.switchTo().frame("leftFrame");從一個(gè)frame切換到另一個(gè)個(gè)frame:driver.switchTo().frame("mainFrame");切換到某個(gè)window:driver.switchTo().window("windowName");如何對(duì)頁(yè)面元元素進(jìn)行操作作五調(diào)用JavaScriptWebdriver對(duì)JavaScript的調(diào)用是通過(guò)過(guò)JavascriptExecutor來(lái)實(shí)現(xiàn)的,例例如:JavascriptExecutorjs=(JavascriptExecutor)driver;js.executeScript("(function(){inventoryGridMgr.setTableFieldValue('"+inventoryId+"','"+fieldName+"','"+value+"');})()");截圖如果用webdriver截圖是:driver=webdriver.Firefox()

driver.save_screenshot("C:\error.jpg")讀取Cookies我們經(jīng)常要對(duì)對(duì)的值進(jìn)行讀讀取和設(shè)置。。增加cookie:Cookiecookie=newCookie("key","value");driver.manage().addCookie(cookie);獲取cookie的值:Set<Cookie>allCookies=driver.manage().getCookies();for(CookieloadedCookie:allCookies){System.out.println(String.format("%s->%s",loadedCookie.getName(),loadedCookie.getValue()));}根據(jù)某個(gè)cookie的name獲取cookie的值:driver.manage().getCookieNamed("mmsid");刪除cookie:driver.manage().deleteCookieNamed("CookieName");//ByCookiedriver.manage().deleteCookie(loadedCookie);//Orallofthemdriver.manage().deleteAllCookies();如何對(duì)頁(yè)面元元素進(jìn)行操作作六頁(yè)面等待因?yàn)長(zhǎng)oad頁(yè)面需要一段段時(shí)間,如果果頁(yè)面還沒(méi)加加載完就查找找元素,必然然是查找不到到的。最好的的方式,就是是設(shè)置一個(gè)默默認(rèn)等待時(shí)間間,在查找頁(yè)頁(yè)面元素的時(shí)時(shí)候如果找不不到就等待一一段時(shí)間再找找,直到超時(shí)時(shí)。Webdriver提供兩種方法法,一種是顯顯性等待,另另一種是隱性性等待。顯性等待:WebDriverdriver=newFirefoxDriver();driver.get("http://somedomain/url_that_delays_loading");WebElementmyDynamicElement=(newWebDriverWait(driver,10)).until(newExpectedCondition<WebElement>(){@OverridepublicWebElementapply(WebDriverd){returnd.findElement(By.id("myDynamicElement"));}});隱性等待:WebDriverdriver=newFirefoxDriver();driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);driver.get("http://somedomain/url_that_delays_loading");WebElementmyDynamicElement=driver.findElement(By.id("myDynamicElement"));元素實(shí)現(xiàn)的方方法給元素新增一一個(gè)方法的流流程元素方法的具具體實(shí)現(xiàn)特殊Selectlist的處理特殊Selectlist的處理二對(duì)日期控件的的處理webdriver如何處理時(shí)間間控件:1、使用比較普普遍,也很通通俗的方法先先切換到時(shí)時(shí)間控件的frame,再在frame中實(shí)現(xiàn)所要點(diǎn)點(diǎn)擊時(shí)間的操操作2、使用js,實(shí)現(xiàn)把時(shí)間間標(biāo)簽中的value屬性賦值,這這個(gè)值就是你你想要選擇的的時(shí)間,注意意時(shí)間格式;;若改時(shí)間標(biāo)標(biāo)簽為只讀,,需要把只讀讀限制去掉以以下為代碼碼:JavascriptExecutorremoveAttribute=(JavascriptExecutor)driver;//removereadonlyattributeremoveAttribute.executeScript("varsetDate=document.getElementById(\"train_date\");setDate.removeAttribute('readonly');");WebElementsetDatElement=driver.findElement(By.xpath("http://input[@id='train_date']"));setDatElement.clear();setDatElement.sendKeys("2015-02-18");一些經(jīng)驗(yàn)1Frame處理:frame=ControllerChoose.getSpecificController().getSelectList(Finder.cssSelector,"#iframeiframe");Objectframedriver=frame.switchToFrame();ReleasePoint=ControllerChoose.getSpecificController().getTextField(Finder.xpath,"http://table[@class='InputTB']/tbody/tr[1]/td[2]/span/input[1]",framedriver);日歷格處理:在page中定義Element為Date類(lèi)型Plandate在case中引用該Element的方法:BacicInfo.getInstance().plandate.DateValueUIC1_executeJScript("2014-10-10");一些經(jīng)驗(yàn)23.打開(kāi)多個(gè)Tab,返回到初始始的driverSet<String>handles=InitDriver.getWindowHandles();4.返回到指定url的driverInitDriver.SwitchToWindowByUrl("30/ropv2/ld_window/");5.Alert處理alert=ControllerChoose.getSpecificController().getAlertDialogue();//page中定義RollBackOperation.getInstance().alert.clickOK();//case中調(diào)用方法6.Select框處理VersionSelect=ControllerChoose.getSpecificController().getSelectList(Finder.id,““ContentPlaceHolder1_rptAppList_ddlVersion_0”);//page中定義RollBackOperation.getInstance().VersionSelect.selectValue(“v2”);//case中調(diào)用一些經(jīng)驗(yàn)3WebDriver每次啟動(dòng)一個(gè)個(gè)Firefox的實(shí)例時(shí),會(huì)會(huì)生成一個(gè)匿匿名的profile,并不會(huì)使用用當(dāng)前Firefox的profile。這點(diǎn)一定要要注意。比如如如果訪(fǎng)問(wèn)被被測(cè)試的web服務(wù)需要通過(guò)過(guò)代理,你想想直接設(shè)置Firefox的代理是行不不通的,因?yàn)闉閃ebDriver啟動(dòng)的Firefox實(shí)例并不會(huì)使使用你這個(gè)profile,正確的做法法是通過(guò)FirefoxProfile來(lái)設(shè)置。publicWebDrivercreate(){FirefoxProfilefirefoxProfile=newFirefoxProfile();firefoxProfile.setPreference("xy.type",1);firefoxProfile.setPreference("xy.http",yourProxy);firefoxProfile.setPreference("xy.http_port",yourPort);firefoxProfile.setPreference("xy.no_proxies_on","");returnnewFirefoxDriver(firefoxProfile);}通過(guò)FirefoProfile也可以設(shè)置Firefox其它各種配置置。如果要默默認(rèn)給Firefox安裝插件的話(huà)話(huà),可以將插插件放置到Firefox安裝目錄下的的默認(rèn)的plugin文件夾夾中,,這樣樣即使使是使使用一一個(gè)全全新的的profile也可以以應(yīng)用用此plugin一些經(jīng)經(jīng)驗(yàn)4使用WebDriver點(diǎn)擊界界面上上Button元素時(shí)時(shí),如如果當(dāng)當(dāng)前Button元素被被界面面上其其他元元素遮遮住了了,或或沒(méi)出出現(xiàn)在在界面面中((比如如Button在頁(yè)面面底部部,但但是屏屏幕只只能顯顯示頁(yè)頁(yè)面上上半部部分)),使使用默默認(rèn)的的WebElement.Click()可能會(huì)會(huì)觸發(fā)發(fā)不了了Click事件。。修正方方案是是找到到該頁(yè)頁(yè)面元元素后后直接接發(fā)送送一條條Click的JavaScript指令。。((JavascriptExecutor)webDriver).executeScript("arguments[0].click();",webElement);如果網(wǎng)網(wǎng)站使使用了了JQuery的動(dòng)畫(huà)畫(huà)效果果,我我們?cè)谠谶\(yùn)行行測(cè)試試的時(shí)時(shí)候其其實(shí)可可以disableJQuery的animation,一方方面可可以加加快測(cè)測(cè)試的的速度度,另另一方方面可可以加加強(qiáng)測(cè)測(cè)試的的穩(wěn)定定性((如果果啟用用了Animation,使用用WebDriver驅(qū)動(dòng)瀏瀏覽器器時(shí)可可能會(huì)會(huì)出現(xiàn)現(xiàn)一些些無(wú)法法預(yù)料料的異異常))。((JavascriptExecutor)driver).executeScript("jQuery.fx.off=true");由于WebDriver要驅(qū)動(dòng)動(dòng)瀏覽覽器,,所以以測(cè)試試運(yùn)行行的時(shí)時(shí)間比比較長(zhǎng)長(zhǎng),我我們可可以并并行跑跑測(cè)試試以節(jié)節(jié)省時(shí)時(shí)間。。如果果你使使用的的是maven構(gòu)建工工具,,可以以配置置surefireplugin時(shí),在在configruation節(jié)點(diǎn)加加入以以下配配置。。<parallel>classes</parallel><threadCount>3</threadCount><perCoreThreadCount>false</perCoreThreadCount>一些經(jīng)經(jīng)驗(yàn)5當(dāng)進(jìn)行行了一一些操操作發(fā)發(fā)生頁(yè)頁(yè)面跳跳轉(zhuǎn)時(shí)時(shí),最最好加加一個(gè)個(gè)Wait方法等等待pageload完成再再進(jìn)行行后續(xù)續(xù)操作作。方方法是是在某某個(gè)時(shí)時(shí)間段段內(nèi)判判斷document.readyState是不是是tectedFunction<WebDriver,Boolean>isPageLoaded(){returnnewFunction<WebDriver,Boolean>(){@OverridepublicBooleanapply(WebDriverdriver){return((JavascriptExecutor)driver).executeScript("returndocument.readyState").equals("complete");}};}publicvoidwaitForPageLoad(){WebDriverWaitwait=newWebDriverWait(webDriver,30);wait.until(isPageLoaded());}一些經(jīng)經(jīng)驗(yàn)6如果頁(yè)頁(yè)面有有Ajax操作,,需要要寫(xiě)一一個(gè)Wait方法等等待Ajax操作完完成。。方式式與上上一條條中的的基

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論