python 3.6 + robotFramework自動化框架 環境搭建、學習筆記


################################################################# 
#author: 陳月白
#_blogs: http://www.cnblogs.com/chenyuebai/
#################################################################

 一、環境搭建
概覽:win 7+ python 3.6  + pycharm + robotframework + IntelliBot + fireFox

1.安裝相關的庫

推薦使用pip安裝,如 pip install robotframework(以及selenium2library)
研發環境沒外網,采用離線安裝,down包后解壓--進入--python setup.py install


(1)WEB頁面測試:
https://pypi.python.org/pypi/robotframework
https://pypi.python.org/pypi/selenium#downloads                      #依賴包
https://pypi.python.org/pypi/robotframework-seleniumlibrary        #依賴包
https://pypi.python.org/pypi/robotframework-selenium2library

(2)接口測試:
在線:pip install requests
離線:
https://pypi.python.org/pypi/certifi                                                 #依賴包
https://pypi.python.org/pypi/urllib3#downloads                    #依賴包
https://pypi.python.org/pypi/idna#downloads                                 #依賴包
https://pypi.python.org/pypi/chardet/#downloads                          #依賴包
https://pypi.python.org/pypi/requests#downloads
 - - - -
若想安裝RIDE(界面編輯工具)需安裝:
1.six  https://pypi.python.org/simple/six/    1.6.0  wxPython安裝依賴
2.wxPython:  https://pypi.python.org/pypi/wxPython  --  wxPython-4.0.0-cp36-cp36m-win_amd64.whl (md5, pgp)
3.發現RIRE不支持python3.X。。。打擾了

2.pycharm

開發IDE,  略


3.IntelliBot pycharm開發插件【語法高亮】
方法1:pycharm>File>setting>Plugins>Browse reponsitories
方法2:https://plugins.jetbrains.com/plugin/7386-intellibot   下載至本地
pycharm>File>setting>Plugins>install plugin from disk


4.pycharm配置執行器
File>setting>Tools>External tool,配置完成后即可在.robot文件中選擇使用該執行器執行

Parameters:當前文件路徑

Working directory:工作路徑,日志、結果輸出等,如下:

注:log.html   執行日志

  output.xml  執行相關信息的xml,可用於后續二次解析 

  report.xml  執行結果報表

 

5.fireFox瀏覽器及對應驅動

(1)瀏覽器

 

https://www.mozilla.org/zh-CN/firefox/developer/

(2)驅動

https://github.com/mozilla/geckodriver/releases/download/v0.19.1/geckodriver-v0.19.1-win64.zip

解壓(geckodriver.exe)拷貝至python安裝目錄


二、使用cmd執行
運行一條用例:
pybot --test test_case test_suit.robot

運行指定文件:
pybot test_suit.robot

運行當前目錄下以.robot為后綴名的測試文件
pybot *.robot

運行當前testpath目錄下的所有用例
pybot testpath


三、案例腳本(.robot文件)基本語法

1.基本語法

*** Settings ***
Library     MyLib                                          #導入自定義的庫
Library     SeleniumLibrary

*** Test Cases ***
                                                            #第一行為固定格式,標識
                                                            #建議同python一致,使用tab縮進對齊(pycharm中設置tab=4空格),否則可能報執行失敗,報 "Test case contains no keywords"
case1 helloworld                                            #案例名
    log     chenyuebai first rfw case                        #log 相當於python的print,可在生成的log.xml中查看

case 2 log                                                  #打異常日志,支持多種級別
    log     test line 2     ERROR

case 3 varible
    ${myname}     Set variable        chen                  #定義變量
    log     my name is ${myname}                            #使用變量

#case 4 use varible                                         #變量作用域為其定義所在的案例(case3),否則報"Variable '${myname}' not found."
#    log     ${myname}

case 5 Catenate
    ${hi1}    Catenate      hello    world                  #定義變量方式2  連接兩個對象,支持自定義連接符
    log    ${hi1}
    ${hi2}    Catenate      SEPARATOR=----  hello    world
    log    ${hi2}

case 6 list
    @{mylist}       create list     a       b      c        #定義列表
    log many        @{mylist}                               #打印列表中的元素

case 7 get time
    ${currentTime}      get time                            #獲取當前時間     2018-01-02 18:05:47
    log     ${currentTime}
    ${currentYear}      get time    format=year             #支持多種傳參,詳情看函數定義
    log     current year is ${currentYear}

case 8 sleep
    log     get time
    sleep   1                                               #睡眠,等同於python的time.sleep(5)
    log     get time

case 9 if
    ${score}    set variable    55
    run keyword if    ${score}>=90    log    優秀
    ...    ELSE IF    ${score}>=70    log    良好           #ELSE/ELSE IF要大寫。。。語法很蛋疼。。為啥不直接套用python的語法。。
    ...    ELSE    log    很差                              # ... 不知道基於什么考慮的。。看起來像是標識屬於“run keyword if”這個判斷邏輯;類似python的tab?

case 10 for                                                 #for循環,注意需要使用\來標識這個for循環范圍,感覺和上面的...類似
    :FOR    ${i}    IN RANGE    5                           #   for in in range(5):
    \   log    ${i}                                         #        print(i)

case 11 allround the list
    @{myList}    create list  1    2    3    4              # myList = [1,2,3,4]
    :FOR    ${i}    IN    @{myList}                         # for i in myList:
    \   log    ${i}                                         #  print(i)

case 12 Evauate                                             #調用python中的方法,很強大
    ${randomNum}    EVALUATE    random.random()     random  #變量    關鍵字EVALUATE    調用python的方法    方法所在的庫名
    log    ${randomNum}

case 13 call my python                                      #導入自定義庫,下面有詳細說明
    ${nowTime}    get current time
    log    ${nowTime}

case 14 Comment
    log     start
    #line 1
    comment  line 2                                         #標明注釋:使用關鍵字或者#均可
    log     end


case 15 Selenium2Library                      #Selenium2Library庫,操作瀏覽器,可作web界面自動化,待細化
    open_browser    http://www.baidu.com    firefox
    Input text    id=kw    陳月白
    click button    id=su
    sleep       3
    close Browser

 

2.robot文件中調用自定義庫

Selenium2Library提供了很多的方法,但在實際使用中仍有部分場景需要自行編寫,robotFramework支持導入用戶自定義的庫。

需注意文件名、類名的對應關系,否則會導入庫失敗;

在...\python安裝路徑\Lib\site-packages下:

(1)自定義方法所在的文件:MyKeywords.py

 
        
import time
class MyKeywords():
    def __init__(self):
        pass


    #獲取當前時間
    def get_current_time(self):
        current_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
        return current_time

(2)創建__init__.py

 
        
"""
繼承自定義庫中的類,rfw會解析類中的函數作為關鍵詞
"""
from .MyKeywords import *

class MyRobotFwkLib(MyKeywords):
    ROBOT_LIBRARY_SCOPE = "GLOBAL"
 
        

(3).robot文件導入自定義類,即可使用類中的方法

*** Settings ***
Library     MyRobotFwkLib                                          #導入自定義的庫

case 13 call my python 
    ${nowTime}    get current time
    log    ${nowTime}

 

使用SeleniumLibrary庫進行web界面自動化測試

#todo

20180126

- - - -

SeleniumLibrary提供很多基礎關鍵字,基本可以模擬完成瀏覽器上大部分操作;

另外還支持將基礎關鍵字按業務邏輯封裝為高級關鍵字(可以理解為一個函數,下面有例子);

支持指定多種瀏覽器,按元素標識操作元素;

定位元素工具我用的火狐的插件:firePath、fireBug,很方便;

 

基礎關鍵字(SeleniumLibrary自帶) + 高級關鍵字(按實際業務對基礎關鍵字封裝) + 用戶自定義庫中的關鍵字(上面有配置實例),幾乎可以滿足大多數web應用各種業務場景;

 

ps:調試時發現許多關鍵字無法查看定義,不方便看用法及傳參,但實際執行時又沒問題;

看了下SeleniumLibrary庫的__init__.py,確定是因為多數涉及的關鍵字庫,都是在啟動執行時,初始化繼承過來的;

於是笨方法,直接全量引入,目前來看也沒什么影響。

實現項目后台登錄及校驗:

*** Settings ***
#方便IDE調試,不添加無法找到關鍵字定義
Library    browsermanagement
Library    AlertKeywords
Library    BrowserManagementKeywords
Library    CookieKeywords
Library    ElementKeywords
Library    FormElementKeywords
Library    FrameKeywords
Library    JavaScriptKeywords
Library    RunOnFailureKeywords
Library    ScreenshotKeywords
Library    SelectElementKeywords
Library    TableElementKeywords
Library    WaitingKeywords
Library    WindowKeywords

Library     SeleniumLibrary

#配置套件級別的Setup和Teardown
Suite Setup
...     log     now test start 1       #只執行一條

Suite Teardown    Run Keywords
...     close all browsers  AND         #執行多條
...     log     now end 4


#全局變量
*** Variables ***
${loginPageUrl}    http://10.XX.XX.232:9XX0/admin/index.do?index=1
${validUsername}            admin
${validloginPasswd}         adminpasswd


*** Test Cases ***
case 1 correct login test
    #配置用例級別的Setup和Teardown
    [setup]         log     setup log 2
    [teardown]      log     teardown log 3

    correctLoginTest        ${validUsername}        ${validloginPasswd}     #使用基礎關鍵字封裝出的高級關鍵字


#使用基礎關鍵字封裝高級關鍵字,類似python的一個函數,支持入參出參,很靈活
*** Keywords ***
correctLoginTest
    [Arguments]    ${uasename}      ${passwd}
    open browser    ${loginPageUrl}     firefox
    setBrowser
    input text      xpath=html/body/div[1]/form/input[1]    ${uasename}
    input text      xpath=html/body/div[1]/form/input[2]    ${passwd}
    click element   class=submit
    sleep       5
#    ${page1_title}    get title                                     #獲取頁面title,可后續校驗頁面是否到達
#    ${width}    ${height}    get window size                        #獲取瀏覽器窗口大小
#    select window    NEW                                    #切換到新彈出窗口(視圖焦點)
    page should contain element     xpath=//*[@id='topMenu4']       #系統管理菜單
    sleep       2
    close all browsers


setBrowser
    set window size    1024     768                        #設置瀏覽器窗口大小
    maximize browser window                                 #瀏覽器窗口最大化
    sleep  1

20180201

 - - - -

2018.02.06

數據驅動測試

數據驅動測試,適合相同流程、相同預期結果下,不同輸入組合的測試

比如測試異常登錄流程,用戶名、密碼在錯誤(或空)各種組合下的異常驗證

例子:

*** Settings ***
Library     SeleniumLibrary
Test Template   errorLoginTest      #公共邏輯



*** Variables ***
${loginPageUrl}    http://10.XX.XX.232:9XX0/admin/index.do?index=1
${validUsername}            admin
${validloginPasswd}         adminpasswd



*** Test Cases ***                  username                 passwd
#異常登錄測試
case 2:Invalid Username            invalidname              ${validloginPasswd}

case 3:Invalid Password            ${validUsername}         invalidPasswd

case 4:Invalid Both                invalidName              invalidPasswd

case 5:Empty Username              ${EMPTY}                 ${validloginPasswd}

case 6:Empty Password              ${validUsername}         ${EMPTY}

case 7:Empty Both                  ${EMPTY}                 ${EMPTY}



*** Keywords ***
errorLoginTest
    [Arguments]    ${uasename}      ${passwd}
    open browser    ${loginPageUrl}     firefox
    input text      xpath=html/body/div[1]/form/input[1]    ${uasename}
    input text      xpath=html/body/div[1]/form/input[2]    ${passwd}
    click element   class=submit
    sleep     5
    page should contain element        class=submit     5      error:預期應含登錄元素未找到【即跳轉失敗】
    sleep     5
    close all browsers

執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM