api4excel-接口自動化測試excel篇

工作原理:測試用例在excel上編輯秒啦,使用第三方庫xlrd,讀取表格工作表和內(nèi)容,工作表名稱對應(yīng)模塊名蛮穿,詹金斯集成服務(wù)發(fā)現(xiàn)服務(wù)模塊名稱查找對應(yīng)表單庶骄,運用第三方庫請求請求接口,根據(jù)結(jié)果和期望值進行斷言践磅,根據(jù)輸出報告判斷接口測試是否通過瓢姻。

1.數(shù)據(jù)準備

數(shù)據(jù)插入(容易實現(xiàn)的測試場景下所需外部數(shù)據(jù))

準備sql(接口需要重復(fù)使用,參數(shù)一定得是變量)

2.整合部署

平滑升級驗證腳本加入自動化

3.自動化框架實現(xiàn)

調(diào)用mysql

excel遍歷測試用例

請求實現(xiàn)接口調(diào)用

根據(jù)接口返回的代碼值和Excel對比

報告反饋

暴露服務(wù)

寫一個簡單登錄的接口自動化測試

代碼的分類如下圖:


+裙免費獲取學(xué)習(xí)資料605018913

一音诈,寫一個封裝的獲取excel表格的模塊


+裙免費獲取學(xué)習(xí)資料602697820

代碼實現(xiàn)如下:

#!/ usr / bin / python #-*-編碼:UTF-8-*- #作者:赫本z R锵粒基礎(chǔ)包:excel的封裝導(dǎo)入xlrd 工作簿= 無def open_excel(path):

? ? ? “”? ? ? 打開Excel? ? ? :param path :: excel文件的位置? ? “”“ 全局工作簿if(workbook == None):

? ? ? ? workbook = xlrd细溅。open_workbook(path,on_demand = True)def get_sheet(sheetName):

? ? ? “”“? ? ? 獲取頁名? ? :參數(shù)sheetName:頁名? ? :return:工作簿? ? ”“” 全局工作簿返回工作簿儡嘶。sheet_by_name(sheetName)def get_rows(sheet):

? ? “”“? ? 獲取行號? ? :參數(shù)表:sheet? ? :return:行數(shù)? ? ”“”“ 返回表喇聊。rowdef get_content(sheet,row蹦狂,col):

? ? “”“? ? 獲取表格中的內(nèi)容? ? :param sheet:sheet? ? :param row:行? ? :param col:列? ? :return:? ? ”“” 返回表單誓篱。單元格(row,col)凯楔。值def release(路徑):

? ? “”“釋放excel減少內(nèi)存”“” 全局工作簿工作簿窜骄。release_resources()

? ? del 工作簿#待辦事項:沒有驗證是否可用

代碼封裝后當成模塊引用,這還是最開始呢摆屯。

二邻遏,引用日志模塊

準備工作:需要一個日志的捕獲,包括框架和二進制腳本的expection虐骑。代碼如下:

#准验!/ usr / bin / python #-*-編碼:UTF-8-*- #作者:赫本z #基礎(chǔ)包:日志服務(wù)導(dǎo)入日志記錄高清get_logger():

? ? 全球LOGPATH 嘗試:

? ? ? ? LOGPATH 除了NameError:

? ? ? ? LOGPATH = “” FORMAT = '%(asctime)的S - %(名稱)的S - %(levelname)的S - %(消息)S' 記錄廷没。basicConfig(級別= 日志記錄糊饱。INFO,格式= FORMAT)

? ? 返回測井

三颠黎,引用requests模塊接口測試

準備工作:需要的請求類型和執(zhí)行測試的方法另锋。代碼如下:

#!/ usr / bin / python #-*-編碼:UTF-8-*- U电停基礎(chǔ)包:接口測試的封裝導(dǎo)入請求導(dǎo)入核心砰蠢。記錄為日志導(dǎo)入jsonlogging = 日志。get_logger()def change_type(value):

? ? “”? ? 對字典類型進行中文識別? ? :param value:傳遞的數(shù)據(jù)值? ? :return:轉(zhuǎn)碼后的值? ? “”“ try:

? ? ? ? if isinstance(eval(value)唉铜,str):

? ? ? ? ? ? 返回值if isinstance(EVAL(值)台舱,字典):

? ? ? ? ? ? 結(jié)果= EVAL(JSON。轉(zhuǎn)儲(值))

? ? ? ? ? ? 返回結(jié)果除例外,e:

? ? ? ? 記錄竞惋。錯誤(“類型問題%s”柜去,e)def api(method,url拆宛,data嗓奢,headers):

? ? “”“? ? 自定義一個接口測試的方法? ? :param method:請求類型? ? :param url:地址? ? :param data:數(shù)據(jù)? ? :param headers:請求頭? ? :return:codecode? ? ” “” 全局結(jié)果嘗試:

? ? ? ? 如果方法==(“發(fā)布” 或“ 發(fā)布”):

? ? ? ? ? ? 結(jié)果= 請求。帖子(url浑厚,data股耽,headers = headers)

? ? ? ? 如果方法==(“獲取” 或“獲取”):

? ? ? ? ? ? 結(jié)果= 請求。get(url钳幅,data物蝙,headers = headers)

? ? ? #if method ==“ put”:#results = requests.put(url,data敢艰,headers = headers)#if method ==“ delete”:#results = requests.delete( url诬乞,headers = headers)#if method ==“ patch”:#results == requests.patch(url,data钠导,headers = headers)#if method ==“ options”:#results == requests.options(url震嫉,結(jié)果。json()

? ? ? ? 代碼= 響應(yīng)牡属。get(“ code”)

? ? ? ? 返回除Exception 之外的代碼票堵,e:

? ? ? ? logging。錯誤(“服務(wù)是錯誤”湃望,e)def 內(nèi)容(method换衬,url,data证芭,headers):

? ? “”“? ? 請求響應(yīng)自己可以自定義檢查結(jié)果? ? :param方法:請求類型? ? :param url:請求地址? ? :param data:請求參數(shù)? ? :param headers:請求標頭? ? :return: message信息? ? “”“ 全局結(jié)果嘗試:

? ? ? ? if 方法==(“ post” 或“ POST”):

? ? ? ? ? ? results = 請求瞳浦。發(fā)布(url,data废士,標頭= 標頭)

? ? ? ? 如果方法==(“獲取” 或“獲取”):

? ? ? ? ? ? 結(jié)果= 請求叫潦。如果方法==(“放置” 或“ 放置”),

? ? ? ? 則獲裙傧酢(URL矗蕊,數(shù)據(jù),標頭= 標頭):

? ? ? ? ? ? 結(jié)果= 請求氢架。放置(url傻咖,data,headers = headers)

? ? ? ? if 方法==(“補丁” 或“ PATCH”):

? ? ? ? ? ? 結(jié)果= 請求岖研。補肚洳佟(url警检,data,headers = headers)

? ? ? ? 響應(yīng)= 結(jié)果害淤。json()

? ? ? ? 消息= 響應(yīng)扇雕。get(“ message”)

? ? ? ? result = response。get(“結(jié)果”)

? ? ? ? content = { “消息”:消息窥摄,“ result”:result }

? ? ? ? 返回除Exception 以外的內(nèi)容镶奉,e:

? ? ? ? logging。錯誤(“請求失斦阜拧%s” %e)

四哨苛,關(guān)于功能模塊

主要調(diào)用二次封裝的代碼,結(jié)合業(yè)務(wù)做一個通用代碼币砂。如下:

#移国!/ usr / bin / python #-*-編碼:UTF-8-*- #業(yè)務(wù)包:通用函數(shù)進口核心。mysql 作為mysql 導(dǎo)入核心道伟。日志作為日志導(dǎo)入核心。請求為要求進口核心使碾。excel 作為excel 導(dǎo)入常量蜜徽,從prettytable 導(dǎo)入PrettyTable 導(dǎo)入為cslogging = 日志。get_logger()class ApiTest:

? ? “”“”接口測試業(yè)務(wù)類“”“ filename = cs票摇。文件名def __init__(self):

? ? ? ? 通過def prepare_data(self拘鞋,host,user矢门,password盆色,db,sql):

? ? ? ? “”“數(shù)據(jù)準備祟剔,添加測試數(shù)據(jù)”“” mysql隔躲。連接(主機,用戶物延,密碼宣旱,數(shù)據(jù)庫)

? ? ? ? res = mysql。執(zhí)行(sql)

? ? ? ? mysql叛薯。close()

? ? ? ? 日志記錄浑吟。信息(“運行SQL:受影響的行號是%s”,res)

? ? ? ? 返回resdef get_excel_sheet(self航闺,path走孽,module):

? ? ? ? “”“依據(jù)模塊名獲取sheet”“” excel县貌。open_excel(path)

? ? ? ? 返回excel。get_sheet(模塊)def get_prepare_sql(self燎字,sheet):

? ? ? ? “”“獲取預(yù)執(zhí)行SQL”“” 返回excel。get_content(片,CS轩触。SQL_ROW寞酿,CS。SQL_COL)DEF RUN_TEST(自脱柱,片材伐弹,URL):

? ? ? ? “”,“再執(zhí)行測試用例” “” 行= Excel中榨为。get_rows(片)

? ? ? ? 失敗= 0 對于我在范圍(2惨好,行):

? ? ? ? ? ? testNumber = STR(INT(Excel中。get_content(片随闺,我日川,CS。CASE_NUMBER)))

? ? ? ? ? ? TESTDATA= 優(yōu)秀矩乐。get_content(片龄句,我,CS散罕。CASE_DATA)

? ? ? ? ? ? 測試名= Excel中分歇。get_content(片,我欧漱,CS职抡。CASE_NAME)

? ? ? ? ? ? testUrl = Excel中。get_content(片误甚,我缚甩,CS。CASE_URL)

? ? ? ? ? ? testUrl = URL + testUrl TestMethod的= Excel中窑邦。get_content(片擅威,我,CS冈钦。CASE_METHOD)

? ? ? ? ? ? testHeaders = EVAL(Excel中裕寨。get_content(片,我派继,CS宾袜。CASE_HEADERS))

? ? ? ? ? ? testCode = Excel中。get_content(片驾窟,我庆猫,CS。CASE_CODE)

? ? ? ? ? ? actualCode = 請求绅络。api(testMethod月培,testUrl嘁字,testData,testHeaders)

? ? ? ? ? ? ExpectCode = str(int(testCode))

? ? ? ? ? ? failResults = PrettyTable([ “ Number”杉畜,“ Method”纪蜒,“ Url”,“ Data”此叠,“ ActualCode”纯续,“ ExpectCode” ]))

? ? ? ? ? ? failResults。align [ “ Number” ] = “ l” failResults灭袁。add_row([ testNumber猬错,testMethod,testUrl茸歧,testData倦炒,ActualCode,ExpectCode ])如果actualCode 软瞎!= ExpectCode:正在

? ? ? ? ? ? ? ? 記錄逢唤。info(“ FailCase%s”,testName)

? ? ? ? ? ? ? ? 打印“ FailureInfo” 打印failResults 失敗+ = 1 其他:正在

? ? ? ? ? ? ? ? 記錄涤浇。info(“ Number%s”智玻,testNumber)

? ? ? ? ? ? ? ? 日志記錄。信息(“TrueCase%S” 芙代,測試名)

? ? ? ? ,如果失敗> 0:

? ? ? ? ? ? 回歸假返回真

五盖彭,關(guān)于參數(shù)中constans模塊

準備工作:所有的參數(shù)和常量我們會整理到這個文件中纹烹,因為設(shè)計業(yè)務(wù)和服務(wù)密碼,數(shù)據(jù)庫密碼這里展示部分召边。代碼如下:

#铺呵!/ usr / bin / python #-*-編碼:UTF-8-*- #通用包:常量CASE_NUMBER = 0 #用例編號CASE_NAME = 1 #用例名稱CASE_DATA = 2 #用例參數(shù)CASE_URL = 3 #用例接口地址CASE_METHOD = 4 #用例請求類型CASE_CODE = 5 #用例代碼CASE_HEADERS = 6 #用例頭SQL_ROW = 0 #預(yù)執(zhí)行SQL的行號SQL_COL = 1 #預(yù)執(zhí)行SQL的行號FILE_NAME = 'test.xlsx'

六,寫一個運行文件:只是用來執(zhí)行的隧熙,業(yè)務(wù)和代碼替換片挂。

代碼如下:

#!/ usr / bin / python #-*-編碼:UTF-8-*- #驗證包:接口測試腳本進口核心贞盯。記錄為來自功能的日志音念。func 導(dǎo)入ApiTestfunc = ApiTest()

logging = 日志。get_logger()“”“ 1.外部輸入?yún)?shù)”“”module = ' user'url = 'http://127.0.0.1:8080'“”“” 2.根據(jù)模塊獲取Sheet“”“ 日志記錄躏敢。info(“ --------------執(zhí)行TestCases ---------------”)工作

表= func闷愤。get_excel_sheet(FUNC。文件名件余,? 模塊)<テ辏“”“ 3.數(shù)據(jù)準備”“” #logging.info(“ --------------通過MysqlDB準備數(shù)據(jù)--------------” )#sql = func.get_prepare_sql(sheet)#func.prepare_data(主機=主機遭居,用戶=用戶,密碼=密碼旬渠,db = db俱萍,sql = sql)“”“” 4.執(zhí)行測試用例“”“ res = func。run_test(sheet告丢,url)

日志記錄枪蘑。info(“ --------------獲得結(jié)果------------%s”,res)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芋齿,一起剝皮案震驚了整個濱河市腥寇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌觅捆,老刑警劉巖赦役,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異栅炒,居然都是意外死亡掂摔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門赢赊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乙漓,“玉大人,你說我怎么就攤上這事释移“扰” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵玩讳,是天一觀的道長涩蜘。 經(jīng)常有香客問我,道長熏纯,這世上最難降的妖魔是什么同诫? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮樟澜,結(jié)果婚禮上误窖,老公的妹妹穿的比我還像新娘。我一直安慰自己秩贰,他們只是感情好霹俺,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毒费,像睡著了一般吭服。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝗罗,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天艇棕,我揣著相機與錄音蝌戒,去河邊找鬼。 笑死沼琉,一個胖子當著我的面吹牛北苟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播打瘪,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼友鼻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闺骚?” 一聲冷哼從身側(cè)響起彩扔,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎僻爽,沒想到半個月后虫碉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡胸梆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年敦捧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碰镜。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡兢卵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绪颖,到底是詐尸還是另有隱情秽荤,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布柠横,位于F島的核電站窃款,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滓鸠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一第喳、第九天 我趴在偏房一處隱蔽的房頂上張望糜俗。 院中可真熱鬧,春花似錦曲饱、人聲如沸悠抹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楔敌。三九已至,卻和暖如春驻谆,著一層夾襖步出監(jiān)牢的瞬間卵凑,已是汗流浹背庆聘。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留勺卢,地道東北人伙判。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像黑忱,于是被迫代替她去往敵國和親宴抚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349