為什么學習Robot Framework
1.自動化測試的必要性
? ? ? ? 日常測試工作中存在大量重復的工作,例如下單在回歸驗收測試流程時會過于繁瑣,自動化測試是很必要的,更重要的是選擇合適的自動化測試框架和工具。
?2.Robot Framework的優勢
?開源
? ??????基于Python自動化測試工具多樣,2018年最好的自動化測試框架和工具包含Selenium、Katalon Studio、UFT、Ranorex及Robot Framework等,前十中證書開源或免費的有四款:Selenium、Katalon Studio、Watir和Robot Framework。
關鍵字驅動
? ??????Robot Framework是基于關鍵字驅動測試,不僅僅是測試網頁,同樣可以用來做Android 和 iOS 的自動化測試。關鍵字的來源不僅僅只有封裝好的Python庫,用戶還可以使用Python語法編寫相應的所需要的庫,從而創建更高級的關鍵字。
表格測試數據語法
? ??????RF具有易于實用的表格測試數據語法,將回歸驗收時重復進行的步驟自動化,表格式的關鍵字驅動使操作語句更加簡潔,能夠極大程度上減輕回歸驗收時的工作量。
Robot Framework模塊化執行
? ? ? Robot Framework具有模塊化結構,執行自動化測試腳本時,RF會首先解析測試數據,然后利用庫中的關鍵字與被測系統進行交互。
Robot Framework的安裝和使用
Robot Framework的安裝
1.安裝Python
????????RF框架是基于Python的,所以安裝RF前必須要安裝Python,現有的RF框架已經可以支持Python3,首先要安裝和自己系統位數相匹配的Python。
????????最新的Python下載鏈接:https://www.python.org/downloads/release/python-373/
????????安裝Python成功后,注意設置相應的環境變量。
2.安裝Robot Framework
? ? ? ? 進入windows命令行界面,輸入命令pip install robotframework。
3.安裝Robot Framework-Ride
????????Ride即是進行回歸驗收測試時進行填寫、編輯、運行的圖形界面的軟件。
? ??????進入windows命令行界面,輸入命令pip install robotframework-ride。
4.安裝Selenium2Library
????????Selenium2Library是RF中進行web自動化最基本的庫,基于Selenium2Library,才能對頁面的元素進行定位、填充、點擊等操作
? ???????進入windows命令行界面,輸入命令pip install robotframework-selenium2library。
5.下載安裝webdriver
????????RF使用的web自動化的瀏覽器驅動是firefox,而比較常用的是Chrome所以需要下載和Chrome瀏覽器版本一致的Chrome webdriver。
????????Chrome瀏覽器和webdriver的版本對應關系:https://blog.csdn.net/yoyocat915/article/details/80580066
????????Webdriver的下載鏈接:http://npm.taobao.org/mirrors/chromedriver/
????????根據自己的Chrome瀏覽器版本下載相應的webdriver,再將下載的webdriver放在Python3.5的安裝目錄下。
Robot Framework應用(自動化下單)
? ? 實現自動化下單主要包含三個內容:變量集中化,定位點擊,定位輸入和斷言。
? ? 1.變量集中化:
? ? ? ? ????自動化下單流程包含多個頁面,多個頁面有很多元素的值是相同的,即是說,在測試套件目錄下創建的變量是可以被多個頁面引用的,集中化變量可以避免相同元素被創建多次,這樣可以一定程度上簡潔腳本。
? ? ? ? ????基礎變量的類型大致有三種,分別是使用$定義的Scalar變量、使用@定義的List變量以及使用&定義的Dictionary變量。
? ? ? ? ????通常情況下,變量的作用域只限于你創建該變量時的目錄。TestCase下的變量,只作用于這個case內部;User Keyword下的變量,只作用于User Keyword內部;File類型的Suite下的變量,作用于該Suite以及該Suite下的所有Test Case;Dictionary類型的Suite下的變量只作用于該目錄內。變量的作用域不是一成不變的,是可以通過內建庫Builtin中的關鍵字進行修改的。$變量的范圍是包含@和&變量的,即是說,@和&變量是可以用$來定義的,反之則不行,所以大部分變量都是用$來定義的。
? ? ? ? ? ? Evaluate關鍵字是通過執行Python表達式,并將結果返回至變量來進行運算的。基本用法有兩種:第一種是直接將表達式結果賦值給變量,第二種是基于模塊,利用模塊中的方法進行運算,將結果返回至變量。例如下單中投被保人姓名、手機號、郵箱和銀行卡號等,可以利用Evaluate關鍵字,基于radom模塊,利用random.choice方法和列表拼接的方式,達到隨機生成相應數據的目的。下單頁中的投保人、被保人和受益人姓名都可使用下圖中的方法隨機生成,即是說,可以將該方法作為公有方法封裝起來,命名為raname,在下單時直接調用raname關鍵字,不需填寫入參,即可獲取相應的隨機姓名。
2.定位點擊&定位輸入
? ? ? ? ? ? 下單流程是基于H5頁面的,需模擬移動端配置,首先要編寫進入H5頁面的腳本。
? ? ? ? ? ? 2.1元素定位方法
? ? ? ? ? ? ? ? 1.基本元素定位背景
? ??????????????Id定位:id=id
????????????????Name定位:name=neme
????????????????Link定位:link=link_text
????????????????id,name和link這三種方式是最普通的定位方式,但是并不是每個元素都是有id和name這兩種屬性,即使有,id和name的值大多數情況下并不是唯一的,這也導致不能準確定位元素,而link應用于文本鏈接 ,所以這三種最為普通的定位方式并不是很實用。
? ??????????????Xpath定位:xpath=//*[@id='kw']
? ??????????????Css定位:css=#kw
? ? ? ? ? ? ? ? xpath和css定位相較于上述的三種定位方式更為普遍適用,xpath和css在一定程度上很相似,它們都可以通過元素的屬性及組合來進行元素定位,css還可以通過元素的標簽來進行定位,但是如果某個元素的屬性組合存在其他相同的元素,這時候css就沒辦法準確定位了,而xpath是可以準確定位的。因為元素的路徑是唯一的,即使標簽,id,類名這些組合存在相同的元素,xpath的層級結構確可以保證能夠準確的定位到元素。
? ? ? ? ? ? ? ? H5的頁面經常會造成一種局面,雖然執行的測試用例全部pass,但是頁面并沒有進行相應的操作。這是因為H5頁面的元素大多是動態元素,基本的定位方法是正確的,但是無法點擊,此時需要使用Selenium2Library庫中的execute javascript關鍵字來進行動態元素的定位點擊。
? ? ? ? ? ? ? ? Execute Javascript的定位點擊:
? ? ? ? ????????????document.getElementById('kw').click()
? ? ? ? ? ? ????????document.getElementByName('kw')[x].click()
? ? ? ? ? ????? ????document.getElementByClassName('kw')[x].click()
? ? ? ? ????????Execute Javascript的定位方法大體上只有這三種,因為想要定位的元素Id、Name或者 ClassName不只一個,所以后面會加上元素排行的下標(可以通過Chrome自帶的開發者模式去搜索元素的排行),但是這種定位方法有時候因為模糊搜索無法準確定位,所以有時候不準確。同時evaluate javascript方法也存在上述css定位的問題,并不是所有元素都有這三種屬性,所以有時候這種定位方式不太適用。
? ? ? ? ? ? ? ? 2. 下單頁面的元素定位
? ? ? ? ? ? ? ? ? ? 為了解決上述定位問題,開發大佬們將每個元素賦予相應且唯一的屬性data_key和data_value,而像日期、城市和職業等動態元素則寫了相應的js腳本供測試調用,同時為了不被惡意攻擊,這些特殊屬性是要在特定的user_agent下才會正常顯示的。利用xpath和css定位,加上動態元素的js方法調用,就可以準確的進行元素的點擊及輸入框的填寫。
? ? ? ? ? ? ? ? ? ? 定位動態元素的方法作為公有方法,可以將其封裝起來,命名為setvalue,填寫相應的入參。在下單流程中可以直接調用setvalue關鍵字,填寫相應的入參,即可獲取相應的數據。
3.斷言:
? ? ? ? 善用斷言利于調試,及時準確的發現錯誤的位置,在自動化測試流程中對測試用例的執行有很大的作用。
? ? ? ? 基本的斷言方法:
? ??????Should Be Empty:判斷變量需為空,否則報錯
????????Should Start With:判斷變量是否以特定的字符或字符串開頭,否則報錯
????????Should Not Start With:判斷變量是否不以特定的字符和字符串開頭,否則報錯
????????Should Match:判斷變量是否和特定的字符串匹配,否則報錯
????????Should Not Match:判斷變量是否不和特定的字符串匹配,否則報錯
????????Should Contain X Times:判斷變量中特定字符或字符串出現的次數是否是X次,否則報錯
????????Should Be Equal As Integers:以整數的形式進行相等比較,這里會將變量進行強制轉換,否則報錯
????????Should Be Equal As Strings:以字符串形式進行相等比較,這里會將變量進行強制轉換,否則報錯
????????Should Be Equal As Numbers:以number形式進行相等比較,這里會將變量進行強制轉換,否則報錯
????????Should Not Be Equal:判斷兩個變量是否不相等,否則報錯
????????Should Not Be Empty:判斷變量是否不為空,否則報錯
? ? ? ? ? ? ? ? 在試算頁面,使用get webelement關鍵字獲取頁面的保費元素,再利用should be equal關鍵字對保費進行校驗,可以作為一個特定的測試用例。在下單頁面,可以依據測試用例,獲取每個元素填寫錯誤信息時的頁面信息和已知的錯誤文案進行比較,來依據測試用例來判斷功能的正確性。
4.測試用例的執行及查看
????????測試用例的Run頁面,Excution Profile選擇pybot,多個測試用例的情況下,如果有勾選測試用例,則會執行勾選的測試用例,從上至下有序執行;如果沒有勾選測試用例,則會執行所有的測試用例,從上至下有序執行。頁面的下半部分展示執行結果,pass或者fail的細節都會展示,最后三行展示的是輸出、日志及測試報告鏈接,直接copy至瀏覽器就可查看。
Robot Framework學習中遇到的問題
????????1.webdriver的版本和瀏覽器版本不一致,無法調起瀏覽器,根據安裝步驟中的第五條下載相應的版本即可解決。
????????2.編寫的測試用例是正確的,但是執行過程會報錯,提示找不到元素,這種情況多半是因為頁面的加載速度趕不上用戶的操作速度,建議在input text以及頁面跳轉的時候加上sleep函數。
? ? ? ? 3.元素定位是基于元素可見的前提下進行的,即是說,在進行元素定位時,必須保證定位的元素是當前頁面可見的,所以需要頁面自動滑動來保證自動化的流暢性。將window.scrollTo()方法封裝成進行頁面的自動滑動的關鍵字,在測試用例中進行調用即可。
? ? ? ? 4.現有的下單流程只是基于單個被保人最基礎的下單,還需要將重要測試用例數據化,利用斷言打上正確節點,這樣在后續的回歸測試才能更大程度上縮減測試時間。