參考網站
- http://robotframework-userguide-cn.readthedocs.io/zh_CN/latest/ExtendingRobotFramework/CreatingTestLibraries.html
- https://github.com/robotframework
- http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html
- wxpython 2.8.12--https://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/
- http://robotframework.org/Selenium2Library/Selenium2Library-1.8.0.html
概念-什么是自動化測試框架
- 自動化測試框架能干什么
- 每次寫好的自動化的腳本的組織
- 有選擇的執行腳本,不需要人手動執行
- 每個檢查點是否通過的檢查
- 通用的功能進行組織到模塊中,供其它模塊的使用
- 執行的結果輸出報告形式
- 測試框架還能解決的問題
- 自動測試用例的實現方式
- 自動測試用例的開發支持--IDE&&庫
- 和用例管理系統的集成
- 測試執行
-
- 相關測試套件(suite)和測試用例的執行原則,可以支持隨意選擇其中的測試用例的執行
-
- 初始化和清除:執行測試條件的預置條件,這一步對於程序來說非常重要
-
- 測試報告
RF功能和特點
1.測試人員開發測試數據文件(Test Data)對應一個個測試用例
- 測試數據文件里面使用的功能小模塊叫關鍵字,由測試庫(Test Library)實現
- robot framework加載測試庫,並解釋執行Test Data也就是測試用例,測試庫一般需要自己開發
- 他提供簡單易懂的表達式的“語言”來開發自動測試用例
- 用關鍵字(keyword)的形式來開發測試用例
- 標准庫提供了常用的功能
- 第三方拓展庫
- 開發者根據產品自行開發庫
- 定義了靈活且易理解的測試用例執行控制(包括初始化和清楚環境)
- 有清晰的體制和報表功能,可以清楚的查看測試執行結果
- 開發人員划分
- 自動化框架、庫開發者
- 自動化用例開發者
RF安裝
- RF的安裝
- pip install robotframework - i https://pypi.douban.com/simple/
- RIDE的安裝 -- 不是必須的工具,可視化的編輯工具
- 一個簡單的IDE
- pip install robotframework-ride - i https://pypi.douban.com/simple/
- wxpython的安裝--RIDE依賴wxpython圖像庫最好用2.8.12.1,以上的版本不支持
- selenium2library的安裝-- web自動化
- 支持slelenium的自動化的rf擴展庫
4.上面的步驟做完后,使用win+r,輸入ride.py,不能執行的時候需要關聯python -
pip install robotframework-selenium2library
pycharm 的插件intellibot 的安裝
- browse respositities 選擇下載或者直接選擇第三個按鈕
-
intellibot 包下載地址:https://www.intellibotrobotics.com/
實戰
實戰1--使用RIDE圖形化--官網文檔地址:http://robotframework.org/Selenium2Library/Selenium2Library.html
- 設置RIDE
- 先自己創建一個文件,使用file-open dictory,選擇創建的目錄
- 自動識別library的關鍵字,做法:RIDE工具中修改tools-preference --defaulte file fotmat修改為 robot
- RIDE里面加入selenium2library的方法
-
- tools-->preference-->importing-->auto imports選擇selenium2library的名字和地址
-
- 把webdriver的地址加到系統環境變量中,不包含exe的目錄,修改好之后重新打開控制台,輸入ride.py
-
- 右擊->new suit ->file取名字--創建的是測試套件文件 or 選擇目錄,目錄中可以包含測試套件的子目錄和子套件文件,當文件有*表示沒有保存
-
- 右擊->new test case
-
- 使用edit,表格填寫的方式,函數不是內置的需要申明,是內置的不需要申明
-
- 申明selenium2library:第一行輸入ImportLi +(技巧)CTRL+ALTE+空格 自動搜索和補齊空格
-
- 設置庫的名字:import library +selenium2library
-
- 設置訪問地址:Open Browser +網址+瀏覽器
-
- 設置等待時間:Set Selenium Implicit Wait +5
-
- Import Text +id='kw'+ 搜索文本內容
-
- css查找,${firstRet}+Get Text+文本內容--意思是設置文本內容的變量為${firstRet}
-
- Should Contain +變量1-${firstRet}+變量2- 說明:變量1是否包含變量2的內容,should打頭是檢查點
-
- 執行-方法
- 方法1:勾選case,點擊白色的運行符號,點擊log,顯示測試的結果;點擊report,展示測試報告,出現錯誤時,直接在瀏覽器中打開Log和report的鏈接
- 方法2:點擊run
套件和用例的結構
套件的概念
- 測試套件是測試用例的集合
- 功能相近的測試套件有可以組成更大的套件
-
樹形結構,類似於文件的格式
`
*** Settings ***
Library Selenium2Library
*** Test Cases ***
測試1
Open Browser http://www.114time.com/ chrome
Set Selenium Implicit Wait 4
${date}= Get Text css=.date > b.year
log to console ${date}
Should Be Equal ${date} 2017
Close Browser
測試2
${var1} convert to integer 100
${var2} set variable 5
should be true $var1 * int($var2) == 500
`
套件(數據文件)文件的表
1. RF支持四種的表
- 分別為Settings,Variable,Test Case,Keywords
- 表名必須出現在第一單元中,表名大小寫不敏感
-
Settings表,是這個測試套件的全局配置表,比如這個測試套件要使用的測試庫,資源文件,測試套件的環境初始化(setup)和清除(tear down),該套件內的標簽等等
*** Settings *** --大小寫不敏感 - Test Case--用例的名字放在最前面
- 測試用例表里面的每個測試用例,大概可以分為
- 配置部分
-
主體部分
-
1. 用例配置部分
- [Documentation]--用例的文字說明
- [Tags]-該用例的標簽
- [Setuo],[Teardown]--用例初始化和清楚操作
- [Template]--申明該模塊是模板關鍵字驅動,本用例值包含測試數據
- [Timeup]--設置用例超時時間
-
2.主體部分主要是由關鍵字組成
- 關鍵字的來源:測試庫、資源文件、測試用例所在的文件的關鍵字表
-
用例主體部分也包含變量賦值
4. Variable-測試套件中的全局變量表
- ${javahome}
5. Keywords用來定義測試套件中的關鍵字
RF關鍵字的寫法
- 技巧:should be true 的用法和eval,should be true中的變能量的寫法,直接是$+變量名
認識測試庫
- 通常,關鍵字是由測試庫提供的
- 測試庫就是python 文件
- python 測試庫里面的關鍵字的實現方式
- 類的方法
- 函數
- RF 腳本使用函數名、方法名
- rf 如何發現路徑
- 和python 程序一樣,sys.path
庫的導入
- 除了builtin
- 一種是在settings表中進行導入 :library abc
- 一種是在測試用例中使用import library
- 庫導入的時候可以有參數,可以查看官方文檔,指導每次的導入的參數的意思
rf中的變量
1. rf中的變量,就是Python中的變量
-
它指向一個python對象
2. rf變量對應的是什么python對象,他就是什么類型的對象
3. rf中,對變量的不同的用法
- Scalar 方式
-
- ${var}-直接把變量所對應的python 對象傳遞給關鍵字對應的函數
- list 方式
-
- @{var} 展開list中的每個元素,作為多個參數傳入
- dictionary 方式
-
-
&{var} 展開dict中的每個元素,作為多個參數傳入
4. 訪問環境變量 %{env_var}
-
collection 標准庫
- 針對List和diction 的處理
- 創建並添加元素
- 數字變量${1},${2}
dialogs庫
- 關鍵字get value from user 彈出一個對話框,得到鍵盤輸入的數字
循環
- :For (inRange) +條件\ 直接是冒號+for
條件判斷、初始化和清除
- run keyword if 關鍵字做條件判斷
- 自動換行設置--Python中使用反斜杠進行換行 例如:\win;rf中使用將整體換行,使用三個點‘...加+換行內容’
- run keyword unless--當條件不成立的時候,執行if下面的語句
Evalute
- ${var}=set variable ${890}等價於 ${var}=evalute ${890}
- 復雜的表達式 :${var} = evalute 'hello '*10
初始化和清除
- setup是測試一個用例(套件)前面要做的事情
- tearup是測試后要做的事情
- 清除和初始化操作,每次放在都可以不影響后面的測試
- 測試套件目錄,測試套件文件和測試用例都應該有自己的清除操作
- 所有的清除和初始化操作只能有一個關鍵字構成
6. 用例的setup和tearup
7. 套件中的setup和tearup
-
- 寫在測試套件文件的settings
-
- 兩種類型
- Suite setup/tearup--進入和退出這個suite執行用例前后必須執行且分別執行一次
- Test setup和tearup ---當suite本身沒有setup和tearup才執行
-
- 測試套件的setup/tearup
- 在其init的初始化文件-init-.txt或者_init_.robot里面的settings表中
-
setup和tearup使用和上面的兩種類型中的方法相同
遵循就近原則
關鍵字
- 用戶關鍵字解決重復性的代碼,把多個關鍵字組成一個'宏'關鍵字
-
定義好用戶關鍵字后,該測試套件中里面就可以使用該用戶關鍵,就和庫關鍵一樣
3. 寫法
- Keywords表中定義,通用,和測試用例表中定義一樣
- 把代碼公共的部分提取出來,放進一個關鍵字中
- 使用參數解決公共部分不同的,使用[arguments]來進行配置
- [Arguments]
${name} ${desc} ${displayidx} -
[Return]表示有返回
資源文件-python中庫的概念
共享變量和python測試庫
變量表中聲明變量
- 首先我們要創建Variable表
*** Variable
${MgLoginUrl1} http://www.1234.com
list變量----@{database} 127.0.0.1 3306
-1. @{database}[0]--去除列表中第一個元素
* Dict變量--&{user1} name=auto pw=123** - Variable中申明文件的地址,如果是在本問價的地址中,就直接寫地址,不在本文件的地址中是a\b,使用相對路徑查找
- Variable中申明的文件在其他文件或者模塊中-----win+R 輸入set Pythonpath=‘要查找的文件路勁’
- Variable中申明的文件在其他文件或者模塊中-----win+R 輸入robot -- Pythonpath ‘要查找的文件路勁’
Python拓展關鍵字
- Python模塊作為測試庫
- 模塊文件名作為測試庫的名字
- 比如Python模塊中叫Mylibrary,對應的Python文件就是Mylibrary.py,那么測試庫的名字就是Mylibrary
- 定義在Python模塊文件中的函數,名稱前有**_**前綴的不會作為關鍵字
python 擴展庫的搜索規則
- 完全按照python的模塊和搜索規則來的
- 如果在包內 pylib/login/rightpass.py
Settings
Library pylib.login.rightpass
- 在settings中聲明資源文件和變量文件
- 路勁,目錄之間的分隔符,不用點.,而是用斜杠/
- 在settings中聲明測試庫:
- 路勁,目錄之間的分隔符,可以用點.,也可以用斜杠/
- 路徑分隔符,用點后面不加py,用斜杠后面加.py
項目目錄和執行參數
項目文件類型種類
- 用例套件文件、目錄
- RF資源文件
- 測試庫
-
變量文件
當資源文件的位置變了的時候,可以從跟了目錄進行找
- Select from list by label 關鍵字可以從下拉框中找元素
-
run key word 可以讓初始操作,有不一樣的方法
結構優化
- 合並重復的初始化和清除操作
- 去掉多余的管理員登陸操作
-
合理充足目錄結構
rf用例的執行
rf的命令格式
- robot [options] data_sourse
-
- options 是rf命令的選項,可以為空
-
- data_sourse是要執行的測試套件文件或者目錄的路徑。可以是絕對路徑,也可以是相對路徑,相對於當前shell的工作目錄
- robot tests.robot
- robot path/to/my_tests/
- robot c:\robot\tests.robot
-
- 如果指定的是測試套件文件,則執行該文件中所有的測試用例
-
- 如果指定的是測試套件目錄,則遞歸執行該目錄下包含的所有的子目錄。,里面所有的測試套件文件里面的用例
-
- 可以指定多個要執行的測試套件文件、目錄,甚至用通配符有來表示多個測試,如下所示:
*** robot my_tests.robot you_tests.robot -----直接把兩個測試文件連載一起
*** robot --name Example Path/to/tests/pattern_*.robot
- 可以指定多個要執行的測試套件文件、目錄,甚至用通配符有來表示多個測試,如下所示:
- 多個測試數據的情況,本次測試的名字就是他們名字的相加
*** robot my_tests & you_tests -
用--name選項來指定本次測試名字,像上次第二行所示
*** robot --pythonpath .--name 回測測試 tc -
- 根據名稱選擇測試用例
-
可以通過--test--suite來指定執行哪些用例或者套件而且還支持通配符的方式
例如:
--test Example # 執行名為example的用例
--test mytest --test yourtest # 執行名為 mytest和yourtest 的用例
--test Example* # 執行名字以example開頭的用例
--suite mysuite # 執行名為mysuite 的套件 -
- 可以在自動化的用例后面加用例的編號,該編號和測試用例的編號相同
使用參數文件,執行測試用例
如果有的時候,參數太長,我們通可以使用參數文件,我們可以把所有的參數都放在參數文件中,比如:
--pythonpath .
--name 回測測試
--test tc001
--test tc002
--test *tc003
tc
命令robot -A filename
添加ROBOT_LIBRARY_SCOPE='GLOBAL'來使得不需要每次調用庫的時候,都實例化一次,執行class中的內容
should be true 的用法
- 使用這個關鍵字的時候,語法符合python的語法
- 變量${var},使用變量名用$var,去掉花括號,使用變量值用${var},保持不變
- 庫名大小寫敏感,關鍵字不敏感
- 庫的導入可以添加參數,在類的初始參數的方法中,比如:
- 一般導入的庫都是由類來實現