国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

http接口自動化測試框架實現(xiàn)

這篇具有很好參考價值的文章主要介紹了http接口自動化測試框架實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、測試需求描述

二、實現(xiàn)方法

三、Excel表格樣式

四、實現(xiàn)代碼(代碼才是王道,有注釋很容易就能看明白的)


一、測試需求描述

對服務后臺一系列的http接口功能測試。

輸入:根據(jù)接口描述構造不同的參數(shù)輸入值

輸出:XML文件

eg:http://xxx.com/xxx_product/test/content_book_list.jsp?listid=1

二、實現(xiàn)方法

1、選用Python腳本來驅動測試

2、采用Excel表格管理測試數(shù)據(jù),包括用例的管理、測試數(shù)據(jù)錄入、測試結果顯示等等,這個需要封裝一個Excel的類即可。

3、調用http接口采用Python封裝好的API即可

4、測試需要的http組裝字符轉處理即可

5、設置2個檢查點,XML文件中的返回值字段(通過解析XML得到);XML文件的正確性(文件對比)

6、首次執(zhí)行測試采用半自動化的方式,即人工檢查輸出的XML文件是否正確,一旦正確將封存XML文件,為后續(xù)回歸測試的預期結果,如果發(fā)現(xiàn)錯誤手工修正為預期文件。(注意不是每次測試都人工檢查該文件,只首次測試的時候才檢查)

三、Excel表格樣式

四、實現(xiàn)代碼(代碼才是王道,有注釋很容易就能看明白的)

1、測試框架代碼

#****************************************************************??
#?TestFrame.py??
#?Author?????:?Vince??
#?Version????:?1.1.2??
#?Date???????:?2011-3-14??
#?Description:?自動化測試平臺??
#****************************************************************??
??
import?os,sys,?urllib,?httplib,?profile,?datetime,?time??
from?xml2dict?import?XML2Dict??
import?win32com.client??
from?win32com.client?import?Dispatch??
import?xml.etree.ElementTree?as?et??
#import?MySQLdb??
??
#Excel表格中測試結果底色??
OK_COLOR=0xffffff??
NG_COLOR=0xff??
#NT_COLOR=0xffff??
NT_COLOR=0xC0C0C0??
??
#Excel表格中測試結果匯總顯示位置??
TESTTIME=[1,?14]??
TESTRESULT=[2,?14]??
??
#Excel模版設置??
#self.titleindex=3????????#Excel中測試用例標題行索引??
#self.casebegin?=4????????#Excel中測試用例開始行索引??
#self.argbegin???=3???????#Excel中參數(shù)開始列索引??
#self.argcount??=8????????#Excel中支持的參數(shù)個數(shù)??
class?create_excel:??
????def?__init__(self,?sFile,?dtitleindex=3,?dcasebegin=4,?dargbegin=3,?dargcount=8):??
????????self.xlApp?=?win32com.client.Dispatch('et.Application')???#MS:Excel??WPS:et??
????????try:??
????????????self.book?=?self.xlApp.Workbooks.Open(sFile)??
????????except:??
????????????print_error_info()??
????????????print?"打開文件失敗"??
????????????exit()??
????????self.file=sFile??
????????self.titleindex=dtitleindex??
????????self.casebegin=dcasebegin??
????????self.argbegin=dargbegin??
????????self.argcount=dargcount??
????????self.allresult=[]??
??????????
????????self.retCol=self.argbegin+self.argcount??
????????self.xmlCol=self.retCol+1??
????????self.resultCol=self.xmlCol+1??
??
????def?close(self):??
????????#self.book.Close(SaveChanges=0)??
????????self.book.Save()??
????????self.book.Close()??
????????#self.xlApp.Quit()??
????????del?self.xlApp??
??????????
????def?read_data(self,?iSheet,?iRow,?iCol):??
????????try:??
????????????sht?=?self.book.Worksheets(iSheet)??
????????????sValue=str(sht.Cells(iRow,?iCol).Value)??
????????except:??
????????????self.close()??
????????????print('讀取數(shù)據(jù)失敗')??
????????????exit()??
????????#去除'.0'??
????????if?sValue[-2:]=='.0':??
????????????sValue?=?sValue[0:-2]??
????????return?sValue??
??
????def?write_data(self,?iSheet,?iRow,?iCol,?sData,?color=OK_COLOR):??
????????try:??
????????????sht?=?self.book.Worksheets(iSheet)??
????????????sht.Cells(iRow,?iCol).Value?=?sData.decode("utf-8")??
????????????sht.Cells(iRow,?iCol).Interior.Color=color??
????????????self.book.Save()??
????????except:??
????????????self.close()??
????????????print('寫入數(shù)據(jù)失敗')??
????????????exit()??
??????
????#獲取用例個數(shù)??????
????def?get_ncase(self,?iSheet):??
????????try:??
????????????return?self.get_nrows(iSheet)-self.casebegin+1??
????????except:??
????????????self.close()??
????????????print('獲取Case個數(shù)失敗')??
????????????exit()??
??????
????def?get_nrows(self,?iSheet):??
????????try:??
????????????sht?=?self.book.Worksheets(iSheet)??
????????????return?sht.UsedRange.Rows.Count??
????????except:??
????????????self.close()??
????????????print('獲取nrows失敗')??
????????????exit()??
??
????def?get_ncols(self,?iSheet):??
????????try:??
????????????sht?=?self.book.Worksheets(iSheet)??
????????????return?sht.UsedRange.Columns.Count??
????????except:??
????????????self.close()??
????????????print('獲取ncols失敗')??
????????????exit()??
??????
????def?del_testrecord(self,?suiteid):??
????????try:??
????????????#為提升性能特別從For循環(huán)提取出來??
????????????nrows=self.get_nrows(suiteid)+1??
????????????ncols=self.get_ncols(suiteid)+1??
????????????begincol=self.argbegin+self.argcount??
??????????????
????????????#提升性能??
????????????sht?=?self.book.Worksheets(suiteid)??
??
????????????for?row?in?range(self.casebegin,?nrows):??
????????????????for?col?in?range(begincol,?ncols):??
????????????????????str=self.read_data(suiteid,?row,?col)??
????????????????????#清除實際結果[]??
????????????????????startpos?=?str.find('[')??
????????????????????if?startpos>0:??
????????????????????????str?=?str[0:startpos].strip()??
????????????????????????self.write_data(suiteid,?row,?col,?str,?OK_COLOR)??
????????????????????else:??
????????????????????????#提升性能??
????????????????????????sht.Cells(row,?col).Interior.Color?=?OK_COLOR??
????????????????#清除TestResul列中的測試結果,設置為NT??
????????????????self.write_data(suiteid,?row,??self.argbegin+self.argcount+1,?'?',?OK_COLOR)??
????????????????self.write_data(suiteid,?row,?self.resultCol,?'NT',?NT_COLOR)??
????????except:??
????????????self.close()??
????????????print('清除數(shù)據(jù)失敗')??
????????????exit()??
??
#執(zhí)行調用??
def?HTTPInvoke(IPPort,?url):??
????conn?=?httplib.HTTPConnection(IPPort)??
????conn.request("GET",?url)??
????rsps?=?conn.getresponse()??
????data?=?rsps.read()??
????conn.close()??
????return?data??
??
#獲取用例基本信息[Interface,argcount,[ArgNameList]]??
def?get_caseinfo(Data,?SuiteID):??
????caseinfolist=[]??
????sInterface=Data.read_data(SuiteID,?1,?2)???
????argcount=int(Data.read_data(SuiteID,?2,?2))???
??????
????#獲取參數(shù)名存入ArgNameList???
????ArgNameList=[]??
????for?i?in?range(0,?argcount):??
????????ArgNameList.append(Data.read_data(SuiteID,?Data.titleindex,?Data.argbegin+i))????
??????
????caseinfolist.append(sInterface)??
????caseinfolist.append(argcount)??
????caseinfolist.append(ArgNameList)??
????return?caseinfolist??
??
#獲取輸入??
def?get_input(Data,?SuiteID,?CaseID,?caseinfolist):??
????sArge=''??
????#參數(shù)組合??
????for?j?in?range(0,?caseinfolist[1]):??
????????if?Data.read_data(SuiteID,?Data.casebegin+CaseID,?Data.argbegin+j)?!=?"None":??
????????????sArge=sArge+caseinfolist[2][j]+'='+Data.read_data(SuiteID,?Data.casebegin+CaseID,?Data.argbegin+j)+'&'???
??????
????#去掉結尾的&字符??
????if?sArge[-1:]=='&':??
????????sArge?=?sArge[0:-1]?????
????sInput=caseinfolist[0]+sArge????#組合全部參數(shù)??
????return?sInput??
???
#結果判斷???
def?assert_result(sReal,?sExpect):??
????sReal=str(sReal)??
????sExpect=str(sExpect)??
????if?sReal==sExpect:??
????????return?'OK'??
????else:??
????????return?'NG'??
??
#將測試結果寫入文件??
def?write_result(Data,?SuiteId,?CaseId,?resultcol,?*result):??
????if?len(result)>1:??
????????ret='OK'??
????????for?i?in?range(0,?len(result)):??
????????????if?result[i]=='NG':??
????????????????ret='NG'??
????????????????break??
????????if?ret=='NG':??
????????????Data.write_data(SuiteId,?Data.casebegin+CaseId,?resultcol,ret,?NG_COLOR)??
????????else:??
????????????Data.write_data(SuiteId,?Data.casebegin+CaseId,?resultcol,ret,?OK_COLOR)??
????????Data.allresult.append(ret)??
????else:??
????????if?result[0]=='NG':??
????????????Data.write_data(SuiteId,?Data.casebegin+CaseId,?resultcol,result[0],?NG_COLOR)??
????????elif?result[0]=='OK':??
????????????Data.write_data(SuiteId,?Data.casebegin+CaseId,?resultcol,result[0],?OK_COLOR)??
????????else:??#NT??
????????????Data.write_data(SuiteId,?Data.casebegin+CaseId,?resultcol,result[0],?NT_COLOR)??
????????Data.allresult.append(result[0])??
??????
????#將當前結果立即打印??
????print?'case'+str(CaseId+1)+':',?Data.allresult[-1]??
??
#打印測試結果??
def?statisticresult(excelobj):??
????allresultlist=excelobj.allresult??
????count=[0,?0,?0]??
????for?i?in?range(0,?len(allresultlist)):??
????????#print?'case'+str(i+1)+':',?allresultlist[i]??
????????count=countflag(allresultlist[i],count[0],?count[1],?count[2])??
????print?'Statistic?result?as?follow:'??
????print?'OK:',?count[0]??
????print?'NG:',?count[1]??
????print?'NT:',?count[2]??
??
#解析XmlString返回Dict??
def?get_xmlstring_dict(xml_string):??
????xml?=?XML2Dict()??
????return?xml.fromstring(xml_string)??
??????
#解析XmlFile返回Dict???
def?get_xmlfile_dict(xml_file):??
????xml?=?XML2Dict()??
????return?xml.parse(xml_file)??
??
#去除歷史數(shù)據(jù)expect[real]??
def?delcomment(excelobj,?suiteid,?iRow,?iCol,?str):??
????startpos?=?str.find('[')??
????if?startpos>0:??
????????str?=?str[0:startpos].strip()??
????????excelobj.write_data(suiteid,?iRow,?iCol,?str,?OK_COLOR)??
????return?str??
??????
#檢查每個item?(非結構體)??
def?check_item(excelobj,?suiteid,?caseid,real_dict,?checklist,?begincol):??
????ret='OK'??
????for?checkid?in?range(0,?len(checklist)):??
????????real=real_dict[checklist[checkid]]['value']??
????????expect=excelobj.read_data(suiteid,?excelobj.casebegin+caseid,?begincol+checkid)??
??????????
????????#如果檢查不一致測將實際結果寫入expect字段,格式:expect[real]??
????????#將return?NG??
????????result=assert_result(real,?expect)??
????????if?result=='NG':??
????????????writestr=expect+'['+real+']'??
????????????excelobj.write_data(suiteid,?excelobj.casebegin+caseid,?begincol+checkid,?writestr,?NG_COLOR)??
????????????ret='NG'??
????return?ret??
??
#檢查結構體類型??
def?check_struct_item(excelobj,?suiteid,?caseid,real_struct_dict,?structlist,?structbegin,?structcount):??
????ret='OK'??
????if?structcount>1:??#傳入的是List??
????????for?structid?in?range(0,?structcount):??
????????????structdict=real_struct_dict[structid]??
????????????temp=check_item(excelobj,?suiteid,?caseid,structdict,?structlist,?structbegin+structid*len(structlist))??
????????????if?temp=='NG':??
????????????????ret='NG'??
???????????????????????
????else:?#傳入的是Dict??
????????temp=check_item(excelobj,?suiteid,?caseid,real_struct_dict,?structlist,?structbegin)??
????????if?temp=='NG':??
????????????ret='NG'??
??????????????
????return?ret??
??
#獲取異常函數(shù)及行號??
def?print_error_info():??
????"""Return?the?frame?object?for?the?caller's?stack?frame."""??
????try:??
????????raise?Exception??
????except:??
????????f?=?sys.exc_info()[2].tb_frame.f_back??
????print?(f.f_code.co_name,?f.f_lineno)????
??
#測試結果計數(shù)器,類似Switch語句實現(xiàn)??
def?countflag(flag,ok,?ng,?nt):???
????calculation??=?{'OK':lambda:[ok+1,?ng,?nt],????
?????????????????????????'NG':lambda:[ok,?ng+1,?nt],????????????????????????
?????????????????????????'NT':lambda:[ok,?ng,?nt+1]}???????
????return?calculation[flag]()???

2、項目測試代碼

#?-*-?coding:?utf-8?-*-??
#****************************************************************??
#?xxx_server_case.py??
#?Author?????:?Vince??
#?Version????:?1.0??
#?Date???????:?2011-3-10??
#?Description:?內容服務系統(tǒng)測試代碼??
#****************************************************************??
??
from?testframe?import?*??
from?common_lib?import?*??
??
httpString='http://xxx.com/xxx_product/test/'??
expectXmldir=os.getcwd()+'/TestDir/expect/'??
realXmldir=os.getcwd()+'/TestDir/real/'??
??
def?run(interface_name,?suiteid):??
????print?'【'+interface_name+'】'?+?'?Test?Begin,please?waiting...'??
????global?expectXmldir,?realXmldir??
??????
????#根據(jù)接口名分別創(chuàng)建預期結果目錄和實際結果目錄??
????expectDir=expectXmldir+interface_name??
????realDir=realXmldir+interface_name??
????if?os.path.exists(expectDir)?==?0:??
????????os.makedirs(expectDir)??
????if?os.path.exists(realDir)?==?0:??
????????os.makedirs(realDir)??
??????
????excelobj.del_testrecord(suiteid)??#清除歷史測試數(shù)據(jù)??
????casecount=excelobj.get_ncase(suiteid)?#獲取case個數(shù)??
????caseinfolist=get_caseinfo(excelobj,?suiteid)?#獲取Case基本信息??
??????
????#遍歷執(zhí)行case??
????for?caseid?in?range(0,?casecount):??
????????#檢查是否執(zhí)行該Case??
????????if?excelobj.read_data(suiteid,excelobj.casebegin+caseid,?2)=='N':??
????????????write_result(excelobj,?suiteid,?caseid,?excelobj.resultCol,?'NT')??
????????????continue?#當前Case結束,繼續(xù)執(zhí)行下一個Case??
??????????
????????#獲取測試數(shù)據(jù)??
????????sInput=httpString+get_input(excelobj,?suiteid,?caseid,?caseinfolist)?????
????????XmlString=HTTPInvoke(com_ipport,?sInput)?????#執(zhí)行調用??
??????????
????????#獲取返回碼并比較??
????????result_code=et.fromstring(XmlString).find("result_code").text??
????????ret1=check_result(excelobj,?suiteid,?caseid,result_code,?excelobj.retCol)??
??????????
????????#保存預期結果文件??
????????expectPath=expectDir+'/'+str(caseid+1)+'.xml'??
????????#saveXmlfile(expectPath,?XmlString)??
??????????
????????#保存實際結果文件??
????????realPath=realDir+'/'+str(caseid+1)+'.xml'??
????????saveXmlfile(realPath,?XmlString)??
??????????
????????#比較預期結果和實際結果??
????????ret2=?check_xmlfile(excelobj,?suiteid,?caseid,expectPath,?realPath)??
??????????
????????#寫測試結果??
????????write_result(excelobj,?suiteid,?caseid,?excelobj.resultCol,?ret1,?ret2)??
????print?'【'+interface_name+'】'?+?'?Test?End!'??

3、測試入口

#?-*-?coding:?utf-8?-*-??
#****************************************************************??
#?main.py??
#?Author?????:?Vince??
#?Version????:?1.0??
#?Date???????:?2011-3-16??
#?Description:?測試組裝,用例執(zhí)行入口??
#****************************************************************??
??
from?testframe?import?*??
from?xxx_server_case?import?*??
import?xxx_server_case??
??
#產品系統(tǒng)接口測試??
#設置測試環(huán)境??
xxx_server_case.excelobj=create_excel(os.getcwd()+'/TestDir/xxx_Testcase.xls')??
xxx_server_case.com_ipport=xxx.com'??
??
#Add?testsuite?begin??
run("xxx_book_list",?4)??
#Add?other?suite?from?here??
#Add?testsuite?end??
??
statisticresult(xxx_server_case.excelobj)??
xxx_server_case.excelobj.close() ?

【整整200集】超超超詳細的Python接口自動化測試進階教程合集,真實模擬企業(yè)項目實戰(zhàn)文章來源地址http://www.zghlxwxcb.cn/news/detail-694624.html

到了這里,關于http接口自動化測試框架實現(xiàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于 Junit 的接口自動化測試框架實現(xiàn)

    基于 Junit 的接口自動化測試框架實現(xiàn)

    目錄 前言: 分層的自動化測試 接口測試的意義 接口測試框架選型 我們封裝的接口測試框架 接口測試關鍵實踐 測試代碼規(guī)范 (僅供參考) 前言: 基于JUnit的接口自動化測試框架可以實現(xiàn)對接口進行自動化測試,并提供了豐富的斷言和報告功能。JUnit是一個流行的Java單元測試

    2024年02月16日
    瀏覽(28)
  • 軟件測試面試題——接口自動化測試怎么做?

    面試過程中,也問了該問題,以下是自己的回答: 接口自動化測試,之前做過,第一個版本是用jmeter 做的,1 主要是將P0級別的功能接口梳理出來,根據(jù)業(yè)務流抓包獲取相關接口,并在jmeter中跑通,2 是整理了項目上的所有接口,先將單個接口跑通,然后再編寫不同的接口用

    2024年02月14日
    瀏覽(27)
  • 軟件測試:功能測試-接口測試-自動化測試-性能測試-驗收測試

    軟件測試:功能測試-接口測試-自動化測試-性能測試-驗收測試

    軟件測試的主要流程 一、測試主要的四個階段 1.測試計劃設計階段 :產品立項之后,進行需求分析,需求評審,業(yè)務需求評級,繪制業(yè)務流程圖。確定測試負責人,開始制定測試計劃; 2.測試準備階段 :各成員編寫測試用例、先小組內評審、后會議評審,測試樣機和配件,

    2024年02月08日
    瀏覽(33)
  • 軟件測試(功能、接口、性能、自動化)詳解

    軟件測試(功能、接口、性能、自動化)詳解

    測試用例編寫是軟件測試的基本技能;也有很多人認為測試用例是軟件測試的核心;軟件測試中最重要的是設計和生成有效的測試用例;測試用例是測試工作的指導,是軟件測試的必須遵守的準則。 黑盒測試常見測試用例編寫方法 1、等價類 選取少數(shù)有代表性的數(shù)據(jù),這一類

    2024年02月13日
    瀏覽(30)
  • 0代碼實現(xiàn)接口自動化測試 —— RF框架實踐

    0代碼實現(xiàn)接口自動化測試 —— RF框架實踐

    robotframework是一款 自動化測試框架 ,可能做各種類型的自動化測試。本文介紹 通過 robotframework 來實現(xiàn)接口測試 。 01、安裝接口請求的第三方庫 pip?install?robotframework-requests 在python安裝目錄的Libsite-packages可以看到 02、接口基礎 robotframework-requests文檔地址

    2024年02月04日
    瀏覽(16)
  • 軟件測試過程中如何有效的開展接口自動化測試

    接口自動化測試是指使用自動化測試工具和腳本對軟件系統(tǒng)中的接口進行測試的過程。其目的是在軟件開發(fā)過程中,通過對接口的自動化測試來提高測試效率和測試質量,減少人工測試的工作量和測試成本,并且能夠快速發(fā)現(xiàn)和修復接口錯誤,確保軟件系統(tǒng)的穩(wěn)定性和可靠性

    2024年02月08日
    瀏覽(33)
  • 2023軟件測試工具大全(自動化、接口、性能、安全、測試管理)

    2023軟件測試工具大全(自動化、接口、性能、安全、測試管理)

    目錄 前言 一、自動化測試工具 Selenium Appium TestComplete 二、接口測試工具 Postman SoapUI JMeter 三、性能測試工具 LoadRunner JMeter Gatling 四、安全測試工具 Burp Suite OWASP ZAP Nmap 五、測試管理工具 TestRail JIRA TestLink 總結 軟件測試是保障軟件質量的重要環(huán)節(jié),而現(xiàn)代化的軟件開發(fā)過程中

    2024年02月16日
    瀏覽(31)
  • 在軟件測試過程中如何有效的開展接口自動化測試

    接口自動化測試是指使用自動化測試工具和腳本對軟件系統(tǒng)中的接口進行測試的過程。其目的是在軟件開發(fā)過程中,通過對接口的自動化測試來提高測試效率和測試質量,減少人工測試的工作量和測試成本,并且能夠快速發(fā)現(xiàn)和修復接口錯誤,確保軟件系統(tǒng)的穩(wěn)定性和可靠性

    2024年02月03日
    瀏覽(30)
  • 軟件測試(功能、工具、接口、性能、自動化、測開)詳解

    軟件測試(功能、工具、接口、性能、自動化、測開)詳解

    一、軟件測試功能測試 測試用例編寫是軟件測試的基本技能;也有很多人認為測試用例是軟件測試的核心;軟件測試中最重要的是設計和生成有效的測試用例;測試用例是測試工作的指導,是軟件測試的必須遵守的準則。 黑盒測試常見測試用例編寫方法 1、等價類 選取少數(shù)

    2024年02月07日
    瀏覽(29)
  • 軟件測試 | 測試開發(fā) | Django+Celery框架自動化定時任務開發(fā)

    軟件測試 | 測試開發(fā) | Django+Celery框架自動化定時任務開發(fā)

    ** 本章介紹使用DjCelery即Django+Celery框架開發(fā)定時任務功能,在Autotestplat平臺上實現(xiàn)單一接口自動化測試腳本、業(yè)務場景接口自動化測試腳本、App自動化測試腳本、Web自動化測試腳本等任務的定時執(zhí)行、調度、管理等,從而取代Jenkins上的定時執(zhí)行腳本和發(fā)送郵件等功能。** 自動

    2023年04月08日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包