python3+Robot Framework+PyCharm自動化測試框架設計
阿新 • • 發佈:2018-12-24
關於自動化測試框架的設計,筆者在前面的隨筆裡面有介紹和總結,這裡結合實際的專案例子做個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 elementis 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中新增測試資料,測試用例指令碼直接呼叫業務關鍵字+測試用例編號,指令碼易讀性非常的好。
最後的執行完成後的測試報告效果: