1. 程式人生 > >python3+Robot Framework+PyCharm自動化測試框架設計

python3+Robot Framework+PyCharm自動化測試框架設計

關於自動化測試框架的設計,筆者在前面的隨筆裡面有介紹和總結,這裡結合實際的專案例子做個demo,環境部署參考筆者的的隨筆《python3+Robot Framework+PyCharm環境部署及執行指令碼》,拿開源的專案管理平臺禪道為例。

一、針對專案特點確定選用的開源的測試框架,這裡因為要做WEB UI自動化,選擇robot framework +selenium2library+databaselibrary,例外一些輔助的第三方庫,PyMySQL等等,其他的在做專案遇到現有的庫解決不了的情況下,再去想辦法,包括自己在robot framework的框架基礎上面開發第三方庫。

二、分析專案的測試模組,設計資料庫表,因為筆者打算把測試用例資料放在MySQL資料庫管理。這裡以登入功能為例,筆者的是設計的資料庫表t_login如下所示:

id 主鍵,不為null 測試用例編號
flag 不為null 預設0,0表示執行,1表示不執行
account    
passwd    
expected 不為null 期望結果

三、筆者把目錄分為3塊,keywords,actionwords,testcase。

keywords:顆粒度最小的關鍵字單元。

actionwords:業務關鍵字,封裝的好可以減少testcese的程式碼量。

testcase:測試用例指令碼。

下面直接上程式碼,結構一目瞭然

keywords-》登入關鍵字.txt

*** Settings ***
Library  Selenium2Library

*** Keywords ***
登入系統
    [Arguments]    ${url}    ${account}=admin    ${passwd}=Aa123456    ${browser}=chrome
    [Documentation]    url:請求地址
    ...     account:賬號
    ...     passwd:密碼
    ...     browser:測試瀏覽器
    open browser    ${url}    ${browser}
    maximize browser window
    wait until element 
is visible id=account input text id=account ${account} input text name=password ${passwd} click button id=submit sleep 2 ${page_title} get title run keyword if '${page_title}' == '我的地盤 - 禪道' return from keyword true ... ELSE return from keyword flase 退出系統 click element xpath=//*[@class='user-name'] click element xpath=//a[contains(text(),'退出')] wait until element is visible id=account ${page_title} get title close all browsers run keyword if '${page_title}' == '使用者登入 - 禪道' return from keyword true ... ELSE return from keyword flase

keywords-》MySQL讀取測試資料.txt

*** Settings ***
Library  DatabaseLibrary

*** Variables ***
${dbapiModuleName}    pymysql
${db_connect_string}    database='test', user='root', password='root', host='127.0.0.1', port=3306

*** Keywords ***
登入MySQL讀取測試用例
    [Arguments]    ${tableName}    ${caseId}
    [Documentation]    dbapiModuleName:mysql資料庫驅動的名稱
    ...    db_connect_string:MySQL資料庫連線資訊
    ...    tableName:資料庫表名
    ...    caseId:測試用例編號
    Connect To Database Using Custom Params    ${dbapiModuleName}    ${db_connect_string}
    @{queryResults}    Query    SELECT * FROM ${tableName} where id = ${caseId}
    log many    @{queryResults}
    ${flag}    set variable    ${queryResults[0][1]}
    run keyword if    '${flag}' == '0'    return from keyword    ${queryResults}
    ...    ELSE    return from keyword    '跳過該用例'

actionwords-》登入操作.txt

*** Settings ***
Resource  ../keywords/登入關鍵字.txt
Resource  ../keywords/MySQL讀取測試資料.txt

*** Variables ***
${test_url}    http://127.0.0.1/zentao/user-login.html
${browser}    chrome

*** Keywords ***
登入測試
    [Arguments]    ${caseId}
    ${testcase}    登入MySQL讀取測試用例    t_login    ${caseId}
    ${bool}    evaluate    isinstance(${testcase}, str)
    run keyword if    '${bool}' == 'True'    pass execution if    ${testcase} == '跳過該用例'    ${testcase}
    ${account}    set variable    ${testcase[0][2]}
    ${passwd}    set variable    ${testcase[0][3]}
    ${excepted}    set variable    ${testcase[0][4]}
    ${actual_result}    登入系統    ${test_url}    ${account}    ${passwd}    ${browser}
    should be equal    ${actual_result}    ${excepted}    登入${account}失敗
    ${actual_result1}    退出系統
    should be equal    ${actual_result1}    ${excepted}    退出${account}失敗

testcase-》登入禪道.txt

*** Settings ***
Resource  ../actionWords/登入操作.txt

*** Test Cases ***
登入管理員賬戶admin
    登入測試    1

登入測試主管賬號xiajie
    登入測試    2

登入測試主管賬號xiajie,不輸入密碼(資料庫設定的跳過)
    登入測試    3

登入測試主管賬號xiajie,密碼錯誤(資料庫設定的跳過)
    登入測試    4

實際上,寫測試用例就很輕鬆了,結合robot framework的關鍵字驅動,引入MySQL做持久層資料管理,實現資料驅動測試,直接在MySQL中新增測試資料,測試用例指令碼直接呼叫業務關鍵字+測試用例編號,指令碼易讀性非常的好。

最後的執行完成後的測試報告效果: