1. 程式人生 > >ddt+unittest+Excel介面測試自動化

ddt+unittest+Excel介面測試自動化

"""前塵篇: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