上面的 RF、Selenium2library凯傲、IntelliBot插件 Run Robot Framework file 和 Run Robot Framework TestCase 都安裝好后我們來看一個例子
*** Settings ***
Library SeleniumLibrary
*** Test Cases ***
百度搜索宋曲
Open Browser http://www.baidu.com chrome
Set Selenium Implicit Wait 5
Input Text id=kw 宋曲\n
${firstRet}= Get Text id=1
Should Contain ${firstRet} 宋曲
百度搜索宋曲霞溪,這段代碼的意思是订框,打開了一個百度搜索的網(wǎng)址楣责,設置了全局等待時間淆储,然后搜索宋曲笋轨,之后取它的內容做一個檢查秆剪。具體的細節(jié)先不用糾結,我們先大概看懂它做什么用的爵政,后面會詳細的講解 Robot 的語法仅讽。
這里面有一點要注意的是,我們以前做 selenium 自動化的時候钾挟, Selenium 庫它需要知道 Webdriver 程序的路徑洁灵,都是我們在代碼里面指定的路徑。但是 Robot 里面掺出,在導入測試用例的時候它是沒有地方去指定這個路徑的处渣,這里我們有個辦法解決。方法: 在我們環(huán)境變量里面添加 Chromdriver 的路徑
test suite 和 testcase
測試套件蛛砰,就是測試用例的集合罐栈。一般我們把功能相關的測試用例組合起來放在一起,成為某個測試套件泥畅,這個套件具體有多少用例要根據(jù)情況而定了荠诬,看看你的測試用例有多少功能相近或者是初始化條件一致的,大家把它放在一起位仁。測試套件可以是一個目錄也可以是一個文件柑贞。
我們把上面的代碼執(zhí)行一下,首先要切到這個目錄聂抢。
剛才的測試用例就打開了一個百度搜索的網(wǎng)頁钧嘶,然后百度宋曲,然后去做了一些檢查琳疏。我們看一下這里有一些執(zhí)行的結果
接下來我們看一下它們做了哪些事情下面簡單解釋一下有决。首先我們這里有個測試用例叫 *** Test Cases ***
,這里面 ***
開頭的我們稱它為一種表空盼,Robot 的數(shù)據(jù)文件中大體都是由表構成的书幕,我們這里的文件就包含了兩個表,一個是 Settings 表揽趾,一個是 Test Cases 表台汇。從名字上看 Settings 做一些配置的設置一些東西, Test Cases 就是用例表。Robot 總共支持四種表苟呐,分別為:Settings, Variables, Test Cases, Keywords
表名必須出現(xiàn)在第一單元格中痒芝。表名大小寫不敏感
Settings 表,是這個測試套件的 全局配置表牵素。比如严衬,說明這個測試套件要使用的測試庫、資源文件两波,測試套件的環(huán)境初始化(setup)和清除(tear down)瞳步,該套件內的標簽等等。比如說 python 里面 import 跟這里面的 Library一樣的腰奋。導入一個庫单起,就像 python 里面 import 某個 selenium 的庫類似這種,比如說這個測試套件要使用的庫劣坊,我們就把它放進去嘀倒。
Test Cases表,是用來定義這個測試套件的 測試用例的局冰。比如說我們這個測試用例测蘑,這里有個頂頭寫的百度搜索宋曲這是我們測試用例的名字,接下來每一行都有黃色的我們剛稱它為關鍵字康二。這個關鍵字它是我們編程語言里面對應函數(shù)的概念碳胳,它對應我們 python 里面的函數(shù)調用,它實現(xiàn)了一個基本的功能沫勿,所以我們運行用例的時候是不是打開了一個網(wǎng)頁挨约,就是執(zhí)行了測試用例的第一行,然后設置全局等待時間产雹,然后輸入宋曲诫惭,然后取它的內容去做檢查,這就是我們用例執(zhí)行的基本過程蔓挖,所以我們前面講 Robot 的核心就是關鍵字夕土,關鍵字它提供了我們自動化的一些能力集,所以我們經(jīng)常說 Robot 是一個關鍵字驅動的一個測試框架瘟判。
Variables 表怨绣,就是這個測試套件的 全局變量表
Keywords表,是用來定義這個測試套件的荒适,用戶關鍵字的測試用例表里面的每個測試用例 大概可以分為 :配置部分 梨熙、主體部分,
用例配置部分:[Documentation]該用例的文字說明刀诬、[Tags]該用例的標簽、[Setup], [Teardown]該用例的初始化和清除操作、[Template]聲明該用例是模板關鍵字驅動的陕壹。本用例只包含測試數(shù)據(jù)质欲、[Timeout]設置用例超時時間。
用例主體部分主要是由關鍵字組成的:
- 關鍵字的來源:測試庫糠馆、資源文件嘶伟、用例所在文件的關鍵字表。
- 用例主體部分也包含變量賦值
測試用例的主干
關鍵字
這里面測試用例部分除了第四行又碌,其它每一行的第一列都是關鍵字(keyword)九昧。RF 里面的關鍵字有我們可以看做是對應變成語言里面的函數(shù)的概念。關鍵字其實就是對應了 python 或者 java 里面的一個函數(shù)調用毕匀,實現(xiàn)一個基本的功能铸鹰。所以運行用例的時候,上面的每行皂岔,Robot Framework 基本上就是執(zhí)行了一個函數(shù)嗲用蹋笼。后面列有內容的是這個關鍵字對應的參數(shù),就像函數(shù)可能需要參數(shù)一樣躁垛。RF 的核心就是關鍵字剖毯,關鍵字提供了自動化的能力集。所以我們也經(jīng)常說 RF 是關鍵字驅動的測試框架教馆。測試庫
RF 有很多的關鍵字逊谋。不同的關鍵字由不同的測試庫實現(xiàn)。比如上面的例子中胶滋,我們對瀏覽器進行操作的關鍵字,就是來自于 selenium2library 這個庫舒憾。所以第一行代碼就是申明了镀钓,我們要導入 selenium2library 這個庫。實現(xiàn)關鍵字的庫镀迂,按類型來分丁溅,基本可以分為 RF 標準庫和擴展庫。-
標準庫
標準庫是安裝好 RF 后探遵,就已經(jīng)安裝好的 python 庫文件窟赏,一般放在 python 的 Lib\site-packages\robot\libraries 目錄下面。RF 標準庫箱季,具體來說涯穷,是下面這些。- BuiltIn
- Collections
- Data Time
- Dialogs
- OperatingSystem
- Process
- Screenshot
- String
- TeInet
- Xml
這些標準庫藏雏,根據(jù)名字就可以看出其不同的用途拷况。比如 Dialogs 庫,是提供了很多對話框給自動測試的過程中讓 QA 來確定或者輸入一些決定測試流程的信息用的。而 Datatime 庫則是提供日期赚瘦、時間相關的關鍵字給開發(fā)者使用的粟誓。
其中第一個標準庫 BuitIn 又是標準庫中很特別的一個。因為使用這個庫提供的關鍵字起意,事先是不需要導入的鹰服,直接使用。而要使用其它的庫里面的關鍵字揽咕,必須先導入悲酷,比如我們例子里面就是用 import Library 來導入的 selenium2library 庫的。
- 擴展庫
就像 python 語言雖然有豐富的內置庫亲善,但是我們要高效的開發(fā)各種各樣的程序设易,必須能夠自行開發(fā)擴展庫,提供更多的功能逗爹。
RF 也是一樣的亡嫌,光是靠標準庫,還遠遠不夠掘而。RF 可以讓開發(fā)者自行開發(fā)擴展庫挟冠。其實標準庫和擴展庫比起來,主要的區(qū)別就是沒有 RF 內置袍睡,其開發(fā)方式和標準庫并無不同知染。
由于 RF 在自動測試領域較為廣泛的應用,RF 開源社區(qū)已經(jīng)有一些比較優(yōu)秀第三方擴展庫斑胜,現(xiàn)在在 RF 官網(wǎng)已經(jīng)給出控淡,我們上例中的 Selenium2Library 就是其中之一。大家可以去這個網(wǎng)址去 查看其它的官方推薦擴展庫
如果以后有機會參與到比較大的 RF 自動化開發(fā)中去掺炭,肯定要針對具體項目的需求,自己開發(fā)擴展庫凭戴,提供一批和公司測試系統(tǒng)相關的關鍵字涧狮,供開發(fā)自動化用例的QA 使用。如何自行開發(fā)擴展庫么夫,后面我們會介紹者冤,下面我們先打開這個鏈接進入看一下。
點擊 EXTERNAL档痪。
就找到了 SeleniumLibrary 涉枫。
這個是 SeleniumLibrary 里面的 keyword documentation
大家可以點進去看一下。
之后再點擊 Keywords腐螟。
這個文檔里面就介紹了愿汰,里面有哪些 Keywords
我們可以看到有很多很多困后,后面再說怎么看這個文檔,大家先知道尼桶,如果我不知道哪里有我們可以去文檔查操灿,我們現(xiàn)在看到的這個是網(wǎng)上的第三方的庫selenium锯仪。相當于是別人寫好的泵督,我們可以自己去用的,如果我們要測試的這個場景沒有第三方的庫可以用庶喜,我們通常還可以自己去開發(fā)小腊,這種也是我們大家在日后的工作中經(jīng)常會做的,后面的章節(jié)有個案例測試一個教管系統(tǒng)久窟,它沒有現(xiàn)成的測試庫秩冈,那我們就需要自己去開發(fā)用 python 作為程序,去開發(fā)測試庫來提供函數(shù)作為我們測試庫里面的關鍵字斥扛,這樣 Robot 就可以使用我們 python 里面的關鍵字了入问。
測試用例的執(zhí)行
第一種是我們不推薦的直接在 robot 文件里面右鍵的。因為可能會出現(xiàn)一些問題稀颁。所以不建議在 pycharm 里面運行芬失。
第二種是切換到目錄里面執(zhí)行,這個是我們推薦的匾灶,后面我們運行程序都會通過這種方式棱烂。
大家看下它下面有三個文件 Output 輸出文件,一個 Log阶女,一個 Report颊糜。我們一般會看一下 Log 文件,大家只需要把它的路徑拷貝一下放到瀏覽器里面直接打開秃踩,就可以看到我們 Test Cases 執(zhí)行的日志衬鱼,我們簡單看一下這個日志。
最上面看到我們叫 T1 的 Test Log憔杨,這個 log 具體執(zhí)行的內容在這個地方鸟赫。
比如說我這個Test SUITE 叫 t1 大家看一下,我們測試套件文件叫做 testsuite 叫 t1芍秆。那我們 Log 名字就是 t1 test log惯疙。
然后它的 SUITE 名字叫 t1,下面的 Test 妖啥,一個 Test 對應一個測試用例霉颠,我們就叫百度搜索宋曲,可以看到上面 pycharm 里面的截圖里面有一個百度搜索宋曲 是 Test cases 下面的測試用例荆虱,如果下面有兩個的話蒿偎,他就會有兩個朽们。比如這里我們添加一個百度搜索宋曲2。
*** Settings ***
Library SeleniumLibrary
*** Test Cases ***
百度搜索宋曲
Open Browser http://www.baidu.com chrome
Set Selenium Implicit Wait 5
Input Text id=kw 宋曲\n
${firstRet}= Get Text id=1
Should Contain ${firstRet} 宋曲
百度搜索宋曲2
Open Browser http://www.baidu.com chrome
Set Selenium Implicit Wait 5
Input Text id=kw 宋曲\n
${firstRet}= Get Text id=1
Should Contain ${firstRet} 宋曲
我們再執(zhí)行一下诉位,運行結果如圖
我們把剛才的 Log 刷新一下骑脱。這里面就有兩個 Test。
都在一個測試套件的文件里苍糠,里面有兩個測試用例叁丧。這就是一個很漂亮的形式展示我們測試 Log。它上面還有一些統(tǒng)計岳瞭。
比如說總共執(zhí)行了2個測試用例拥娄,成功2個失敗0個等等,花了多少時間瞳筏,這里面都有很詳細的記錄稚瘾。比如我們 Input Text 打印的一些 log 有一些具體的內容時間等等,打印的都非常好姚炕,格式很漂亮很完美摊欠,這個大家心里先有個概念,看看長什么樣子柱宦。
用例文件語法
前面說過 Robot 是表格式的開發(fā)些椒,有一些圖形界面的開發(fā)工具,比如說 RIDE 它打開之后它是長這個樣子的:
***Test Case*** |
|||
---|---|---|---|
百度搜索 |
|||
Import Library |
Selenium2Library | ||
Open Browser |
http://www.baidu.com | chrome | |
Set Selenium Implicit Wait |
5 | ||
Input Text |
id=kw | 宋曲\n | |
${firstRet}= | Get Text | id=1 | |
Should Contain |
${firstRet} | 宋曲 |
有人會說跟我們剛才講的案例不一樣捷沸。如果你把它每一行每一列都加上橫豎線摊沉,其實它們長的是一樣的。這是它文件的樣式痒给。
- RF 的測試套件文件使用一種純文本的文件格式说墨,純文本文件擴展名可以是 .robot 或者 .txt,RF 官方推薦用 robot 苍柏。其實 RF 還支持其他的文件格式來記錄測試用例尼斧,比如 html,tvs 都是可以的试吁。 但是RF 官方推薦用 .robot pycharm 插件里面對 .robot 的支持比較好棺棵, .txt 有一些東西顯示不是那么完美。所以大家以后還是使用 .robot 吧熄捍。
另外一個大家需要注意下的我們 pychrom 缺省的編碼方式是 utf-8烛恤,在 pychrom 的右下角能看到。這樣的話對中文的支持會比較好一點余耽,大家如果這邊不是的話需要改一下缚柏。
純文本的格式
測試套件的文件都是由表組成的,就是已
***
開頭的就是表的名字(一個*
或以上都可以碟贾,四五個也可以)但是建議大家寫成三個币喧。而且表的首字母都是大寫的轨域,其實它大小寫是不敏感的,我們這里 Settings 和 Test Case 大寫的原因杀餐,是因為我們的插件不大寫就不能聯(lián)想干发。所以為了插件使用起來比較方便,建議大家首字母大寫史翘。測試用例里面枉长,測試用例的名字要放在第一列,要頂頭寫恶座。用例的具體內容是從第二列開始寫的搀暑。如果不加橫線豎線的話,那我們就用空格的形式跨琳。我們純文本格式怎么表示第一列是空格呢?
前面要加兩個以上的空格來表示桐罕,否則它就會作為一個新的測試用例的名稱了脉让,這里我們建議大家用四個空格。
我們說的純文本格式就是我們截圖的樣子功炮,它每張表里面每個表格的單元格之間都至少要空兩個或者以上的空格隔開溅潜。
如果你只空一個空格它會把它作為一個不認識的關鍵字,大家看薪伏,本來這是一個關鍵字如果中間我只空一個空格加上它的參數(shù)滚澜,它會把它作為一個不認識的關鍵字。我們這里也建議是四個空格嫁怀,這樣看起來更清晰一點设捐。
還有一種隔開方式就是用 | 隔開, | 前后都用一個空格塘淑。比如下面的代碼
| *** Test Cases *** |
| tc1 |
| | baidu search | 宋曲 | 宋曲 新書上傳 |
| | baidu search | 宋曲小說 | 宋曲小說(皓月未央) |
| tc3 |
| | ${ret}= | multiply | 2 | 3 |
| | log to console | ${ret} |
| tc4 |
| | ${q} | ${r}= | divide | 8 | 2 |
| | log to console | ${q}:${r} |
| *** Keywords *** |
| baidu search |
| | [Arguments] | ${keyword} | ${firstlinktxt} |
| | Open Browser | http://www.baidu.com | chrome |
| | Input Text | id=kw | ${keyword}\n |
| | Set Selenium Implicit Wait | 2 |
| | ${firstRet}= | Get Text | css=div.result:first-of-type>h3 |
| | Should Be Equal | ${firstRet} | ${firstlinktxt} |
| | Close Browser |
| multiply |
| | [Arguments] | ${x} | ${y} |
| | ${ret}= | Evaluate | ${x} * ${y} |
| | [Return] | ${ret} |
| divide |
| | [Arguments] | ${x} | ${y} |
| | ${q}= | Evaluate | ${x} / ${y} |
| | ${r}= | Evaluate | ${x} % ${y} |
| | [Return] | ${q} | ${r} |
就是每個需要空格的地方我都加了 | 萝招, | 的前后各有一個空格,這樣每一行各個元素的邊界很清晰的存捺。但是目前我們 Pycharm IDE 它不支持這種 | 的方式槐沼,所以看起來都是灰色的樣子。這里大家可以對比一下那個形式更好看一點或者更好些一點捌治。個人不喜歡 | 這種形式岗钩,比較麻煩而且Pycharm IDE 也不支持比較麻煩。
注意 一個關鍵字之間只能空一個空格肖油。