本文旨在分享一個接口測試框架啄育,環(huán)境使用python3+requests+rf測試框架酌心,采用Excel管理測試用例等集成測試數(shù)據(jù)功能织阳,使用rf組織測試用例并并生成測試報告泡一。
采用rf可以很好的支持流程類的接口磕蛇,組織各種繁雜的流程測試瓶逃。
測試框架處理流程
測試框架處理流程:
1谐丢、初始化測試數(shù)據(jù)严沥,可在rf中進行焕盟,常量直接寫在配置文件中即可
2夜畴、?? excel維護測試接口
3铝阐、?? 利用rf維護測試用例址貌,即利用各接口組裝不同的測試的流程,包含各步驟的斷言
4徘键、?? rf執(zhí)行時芳誓,根據(jù)組裝順序,解析EXCEL數(shù)據(jù)
5啊鸭、?? excel解析成功后會進行接口調(diào)用锹淌,發(fā)送請求
6、?? rf執(zhí)行后赠制,會自動生成詳細的測試報表及測試日志
測試框架結構目錄介紹
config/:? ? ? ? ??常量配置
framework/:? ?框架核心處理方法赂摆,包含了excel解析、發(fā)送請求钟些、數(shù)據(jù)庫交互等
logs/:????????????? 日志文件
reports/:?????????測試報告
rfsuite/:? ? ? ? ? RF測試用例
testdata/:? ? ? ?Excel維護測試接口
數(shù)據(jù)庫封裝
1烟号、 config/dbconf.ini? ---db數(shù)據(jù)庫連接信息配置
2、 config/getdbconf.py? ---解析dbconf.ini政恍,獲取指定的配置項信息
def get_db_config(firstline, secondline):?? ---獲取指定的配置項的值汪拥,如獲取t0parp的dbType
3、 framework/dbhandler.py? ---數(shù)據(jù)庫核心方法
def get_db_connect(self, sid):? ---建立指定數(shù)據(jù)庫的連接篙耗,如t0parp
def do_query_sql(self, sid, sql, parms=None):? ---執(zhí)行query sql并返回查詢結果迫筑,即select sql
def do_commit_sql(self, sid, sql, parms=None):?? ---執(zhí)行commit sql宪赶,即update、delete sql
def do_func(self, sid, func, parms):??? ---執(zhí)行function
def do_procedure(self, sid, pro, parms):?? --執(zhí)行procedure
框架核心模塊
1脯燃、 excel維護測試接口(主要字段)
method: 必填搂妻,請求方法,支持post辕棚、get欲主、delete、put逝嚎、postwithmultipart
header: 非必填扁瓢,請求頭,json格式补君,支持引入變量涤妒,格式${var_name}
url:???必填,請求地址赚哗,/開頭, 支持引入變量她紫,格式${var_name}
parameter:非必填,請求參數(shù)屿储,json格式, 支持引入變量贿讹,格式${var_name}
filename: 非必填,需上傳的文件够掠,postwithmultipart時需要上傳文件民褂,文件完整路徑
assert_type: 必填,斷言類型疯潭,支持regex赊堪、sql、in竖哩、equal??????????????
assert_expect: 必填哭廉,根據(jù)斷言類型,輸入合適的斷言語句, 支持引入變量相叁,格式${var_name}
regex: 將正則表達式和response text進行匹配,結果需要>0,適用于返回結果格式固定且包含動態(tài)值的接口;
sql: 格式:sid@qry sql:key,將sql結果和response text中key對應的值進行比較,結果需要相等遵绰,適用于查詢類接口;
in:? 將錄入值和response text進行比較,錄入值需包含在response text中增淹,適用于返回html等的接口;
equal:將錄入值和response text進行比較椿访,錄入值需等于response text中,適用于返回結果固定的接口;
saved_var_name: 非必填虑润,需保存的變量名成玫,用于處理有些動態(tài)值需要傳遞給后續(xù)接口使用的情況
saved_var_type: 非必填,動態(tài)變量值獲取方式,支持regex哭当、sql
save_var_get: 必填猪腕,根據(jù)動態(tài)變量值獲取方式,輸入合適的取值語句, 支持引入變量荣病,格式${var_name}
regex:將正則表達式和response text進行匹配,需提取的變量部分使用()包起來;
sql:格式:sid@qry sql,目前只支持查詢1個字段;
2、 變量設置(2種方式):
1渗柿、config/confdata.py文件中配置个盆,適用于固定常量
2、excel測試接口中動態(tài)保存朵栖,適用于動態(tài)變量颊亮,使用動態(tài)變量的接口調(diào)用前需要保證該變量已被生成
3、 framework/requestutil.py? ---request請求處理
def load_to_dict(data):?? ---將json字符串轉(zhuǎn)為字典格式陨溅,請求的header终惑、parameter處理時會用到
def do_request(method, url, header=None, param=None, cookie=None, file=None, timeout=0):?? ---發(fā)送請求
def get_response_value(jsontext, key):?? ---獲取返回的response text指定key的value值,再斷言接口返回值時會用到
4门扇、 framework/excelutil.py??---excel數(shù)據(jù)處理
def get_case_dict(self, rowno):? ---獲取excel指定row_no的數(shù)據(jù)雹有,以字典形式返回【row_no從1開始,第0行為標題行】
def format_case_dict(self, sdict):? ---格式化excel行的數(shù)據(jù)臼寄,替換${}變量霸奕,以字典形式返回【sdict為get_case_dict返回的字典】
5、 framework/predata.py??? ---包裝測試數(shù)據(jù)
def get_case_dict(self, filename, sheetname, rowno):? ---獲取指定excel文件指定行的數(shù)據(jù)
def get_case_col_value(self, filename, sheetname, rowno, col_title): ?---獲取指定excel文件指定行指定列的單元格數(shù)據(jù)
6吉拳、 framework/doexecutor.py??? ---測試用例執(zhí)行核心方法
def executor(self, filename, sheetname, rowno, cookie=None): ?---執(zhí)行測試用例质帅,發(fā)送請求同時保持變量(如果有變量需要傳遞的話)
def assert_response(self, assert_type, expect, actual): ?---測試用例斷言方法
以下是我們系統(tǒng)的登錄cookie截取方法,cookie需要傳遞給后續(xù)接口(cookie入?yún)?留攒,各系統(tǒng)可以根據(jù)實際情況定制煤惩。
接口測試用例編寫
測試用例采用RF進程維護,案例文件參考如下:
1炼邀、__init__.robot文件為初始化文件魄揉,一個模塊最先執(zhí)行此文件方法,再一次按順序執(zhí)行其他文件
?? Suite Setup:整個模塊開始時執(zhí)行一次拭宁,套件初始化動作
?? Suite Teardown:整個模塊結束時執(zhí)行一次什猖,套件清理動作
?? set global variable ${gloabal_var_name} ${value}:保存全局變量gloabal_var_name
示例說明:
D-登錄Super模塊執(zhí)行時,先執(zhí)行__init__.robot文件:
2红淡、測試用例文件不狮,基于__init__文件動作,繼續(xù)后續(xù)的測試驗證動作【可以直接引用全局變量】
?? ***Settings***:依賴庫聲明在旱,支持Suite Setup摇零、Suite Teardown,僅作用于當前這個文件的套件
?? ***Test Cases***:測試用例桶蝎,支持Setup驻仅、Teardown谅畅,僅作用于當前這個測試用例
1、???? RF按層級順序執(zhí)行用例
如下示例(假設模塊4中無子節(jié)點),執(zhí)行順序如箭頭所示:
集成測試報告
1噪服、robot執(zhí)行命令(2種方式):
1毡泻、pycharm中添加external tool:Robot Run Testsuite
robot -dreports -P $ProjectFileDir$ $FilePathRelativeToProjectRoot$
pycharm中選中對應的文件,右鍵->External Tool-> Robot Run Testsuite
2粘优、命令行執(zhí)行仇味,打開cmd窗口
?????? cd項目根目錄
robot -dreports -P .需要執(zhí)行的文件或測試用例
2、測試報告和日志存儲在reports目錄下雹顺,右鍵->Open In Browser