ddt+unittest+Excel介面測試自動化
阿新 • • 發佈:2019-02-08
"""前塵篇:excel讀取資料,資料格式你想要什麼就處理什麼樣""" ReadExcel.py # coding=utf-8 import xlrd import sys import inspect class Excel(object): def __init__(self,excel_path,sheet_name): self.excel_file=xlrd.open_workbook(excel_path) # excel_sheet_names =self.excel_file.sheet_names() # sheet1 =excel_sheet_names[0] self.sheet =self.excel_file.sheet_by_name(sheet_name) self.sheet_name =self.sheet.name self.rows = self.sheet.nrows self.cols = self.sheet.ncols """返回單元格,計數(0,0)表示第一行,第一列的單元格""" def get_sheet_data(self,row,col): test_data = self.sheet.cell(row ,col).value #.encode('utf-8') print test_data """讀取excel,並處理資料返回格式""" def read_excel(self): list=[] for row in range(1,self.rows): lists=self.sheet.row_values(row)[:self.cols] list1=[] dict={} for j in range(self.cols): list1.append(lists[j].encode('utf-8')) dict['test_name']=list1[0] dict['method']=list1[1] dict['url']=list1[2] dict['data']=list1[3] dict['header']=list1[4] dict['param']=list1[5] dict['type']=list1[6] # print dict list.append(dict) return list """ 拓展寫一個一個方法用來獲取當前所在函式的名稱: sys._getframe().f_code.co_name 等價於 inspect.stack()[0][3] 都可以獲取當前函式名稱 """ def test_foo(self): print "類名稱為:{},函式名稱為:{}".format(self.__class__.__name__,sys._getframe().f_code.co_name) fn_name ='test_foo' print type(sys._getframe().f_code.co_name),(sys._getframe().f_code.co_name) # str equal str try: assert fn_name == sys._getframe().f_code.co_name except NameError as e: print e else: print "當前函式名稱為:{}".format(inspect.stack()[0][3]) # if __name__ =="__main__": # path=r"f://myexcel.xlsx" # st_name='Sheet1' # test_data= Excel(path,st_name).read_excel() # print test_data """pt2: 封裝請求,ddt驅動""" test_override.py # coding=utf-8 import requests import json import ddt import unittest import time from HTMLTestRunner import HTMLTestRunner from ReadExcel import Excel path=r"f://myexcel.xlsx" st_name='Sheet1' test_data= Excel(path,st_name).read_excel() def run(): suites=unittest.defaultTestLoader.discover('./',pattern='test*.py',top_level_dir=None) report_path='./report.html' with open(report_path, 'wb') as f: runner = HTMLTestRunner(stream=f, title="interface report", description="results like following:",verbosity=1) runner.run(suites) f.close() @ddt.ddt class OverRide(unittest.TestCase): @classmethod def setUpClass(cls): # global session # s = requests.session() # requests.post(url="http://xxx",data={'user': "admin","pwd": "123456"},headers={"Content-Type": "application/x-www-form-urlencoded"}) # session =s print "---------------開始載入--------------" @classmethod def tearDownClass(cls): """清除cookie""" # session.cookies.clear() #也可以這樣寫 session.cookies=None print "----------------釋放完成-------------" @ddt.data(*test_data) def test_data(self,dict): self.test_name=dict['test_name'] self.method=dict['method'] self.url = dict['url'] self.data =eval(dict['data']) self.header = eval(dict['header']) self.param = eval(dict['param']) self.type = dict['type'] print "當前執行用例名稱:{}".format(self.test_name), time.asctime() print self.test_name,self.method,self.data,self.header,self.param,self.type # method =self.method # url=self.url # if self.method.upper() =="POST": # param=None # header=self.header # # if self.type == "json": # js =None # data=json.dumps(self.data) #""" Origin data is dict""" # # elif self.type == "data": # data=self.data # x-www-urlencoded # js=None # else: # js =None # data=self.data # elif self.method.upper() == "GET": # header =None # js=None # data=None # if self.param == '': # param=None # else: # param =self.param # response = session.request(method=method,url=url,data=data,json=js,headers=header,param=param) # times_out=response.elapsed.total_seconds() # content= response.content.decode('utf-8') # dict=[] # dict['times_out']=times_out # dict['response']=content # return dict if __name__ == "__main__": run() .. Time Elapsed: 0:00:00 ---------------開始載入-------------- ----------------釋放完成------------- Process finished with exit code 0