????本文旨在分享一個接口測試框架络它,環(huán)境使用python3+requests+rf測試框架族檬,采用Excel管理測試用例等集成測試數(shù)據(jù)功能,使用rf組織測試用例并并生成測試報告化戳。采用rf可以很好的支持流程類的接口单料,組織各種繁雜的流程測試。
測試框架處理流程:
1点楼、初始化測試數(shù)據(jù)扫尖,可在rf中進行,常量直接寫在配置文件中即可
1盟步、?? excel維護測試接口
2藏斩、?? 利用rf維護測試用例躏结,即利用各接口組裝不同的測試的流程却盘,包含各步驟的斷言
3、?? rf執(zhí)行時媳拴,根據(jù)組裝順序黄橘,解析EXCEL數(shù)據(jù)
4、?? excel解析成功后會進行接口調(diào)用屈溉,發(fā)送請求
5塞关、?? rf執(zhí)行后,會自動生成詳細的測試報表及測試日志
測試框架結(jié)構(gòu)目錄介紹:
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并返回查詢結(jié)果,即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進行匹配,結(jié)果需要>0,適用于返回結(jié)果格式固定且包含動態(tài)值的接口;
? ? ? ? ? ?sql:?格式:sid@qry sql:key,將sql結(jié)果和response text中key對應(yīng)的值進行比較,結(jié)果需要相等突雪,適用于查詢類接口;
? ? ? ? ? ?in:??將錄入值和response text進行比較起惕,錄入值需包含在response text中涡贱,適用于返回html等的接口;
???????equal:將錄入值和response text進行比較,錄入值需等于response text中惹想,適用于返回結(jié)果固定的接口;
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悲柱、 變量設(shè)置(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:整個模塊結(jié)束時執(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í)行用例
如下示例(假設(shè)模塊4中無子節(jié)點),執(zhí)行順序如箭頭所示:
集成測試報告
1、robot執(zhí)行命令(2種方式):
1耸彪、pycharm中添加external tool:Robot Run Testsuite
robot -dreports -P $ProjectFileDir$ $FilePathRelativeToProjectRoot$
pycharm中選中對應(yīng)的文件仙蛉,右鍵->External Tool-> Robot Run Testsuite
2壹士、命令行執(zhí)行,打開cmd窗口
?????? cd項目根目錄
robot -dreports -P .需要執(zhí)行的文件或測試用例
2、測試報告和日志存儲在reports目錄下后雷,右鍵->Open In Browser