数据驱动测试框架设计——15数据驱动开发-整合unittest框架

思路:
利用ddt:1.封装一个函数获取excel用例的数据,把每行数据放到一个列表里
ddt库的作用:例如有这样一个数据 【【a b c】【d e f】】
利用ddt可以 把abc付给函数使用,然后再把def付给函数使用
我们如果利用ddt就可以把获取的excle用例数据付给我们的主函数使用

# -*-coding:utf-8-*
import openpyxl
import os
''' 此处的文件名配置后续会放到配置文件里'''
filename = "case1.xlsx"
newfilename = os.path.dirname(os.path.dirname(__file__))+"/Case/"+filename

class HandExcel:
    def load_excel(self):
        '''加载文件'''
        open__excel = openpyxl.load_workbook(newfilename)
        return open__excel

    def get_sheet_data(self,index=None):
        '''加载sheet页'''
        sheet_name = self.load_excel().sheetnames
        if index == None:
            index = 0

        data = self.load_excel()[sheet_name[index]]
        return data

    def get_cell_value(self,row,cols):
        '''获取某一个单元格内容'''
        data = self.get_sheet_data().cell(row=row,column=cols).value
        return data

    def get_rows(self,index=None):
        '''获取行数'''
        row = self.get_sheet_data(index).max_row
        return row

    def get_rows_value(self,row):
        '''获取某一用例的内容'''
        row_list = []
        '''此处遍历对象,然后把对象的值加入到列表中'''
        for i in self.get_sheet_data()[row]:
            row_list.append(i.value)
        return row_list

    '''给excle添加内容的方法'''
    def excel_write_data(self,row,cols,value):
        '''加载excel文件'''
        wb = self.load_excel()
        '''激活文件'''
        wr = wb.active
        '''写入文件'''
        wr.cell(row,cols,value)
        '''保存文件'''
        wb.save(newfilename)

    '''获取某一整列数据'''
    def get_colums_value(self,key = None):
        colums_list = []
        if key ==None:
            key = "A"
        colums_listt_data  = self.get_sheet_data()[key]
        for i in colums_listt_data:
            colums_list.append(i.value)
        return colums_list
    '''获取行号'''
    def get_rows_number(self,case_id):
        num = 0
        cols_data = self.get_colums_value()
        for col_data in cols_data:
            num = num+1
            if case_id == col_data:
                return num

    '''获取excel里面所有用例的数据'''
    def get_excel_data(self):
        data_list = []
        '''循环总行数的次数'''
        for i in range(self.get_rows()):
            '''当i为0 则要给列表里添加i+2行的数据'''
            data_list.append(self.get_rows_value(i+2))
            '''返回列表中有用例字段的部分'''
        return data_list[0:self.get_rows()-1]
'''实例化该类,方便后续调用'''
excel_data = HandExcel()
if __name__ == '__main__':
    print(excel_data.get_excel_data())

利用ddt:新写一个run_case_ddt.py文件用来整和unittest框架和之前写的框架

参考源码:注意:之前写结果时候用的i+2现在其实就是等于行号

# -*-coding:utf-8-*-
import ddt
import unittest
from Base.base_request import *
from Base.handle_result import *
from Base.handle_cookie import *
from Base.handle_header import *
from Base.codition_data import *
'''去掉之前框架中的data,现在的data给它重新赋值'''
data = excel_data.get_excel_data()

'''利用ddt,进行数据驱动'''
@ddt.ddt
class TestRunCserDdt(unittest.TestCase):
    def setUp(self):
        print("case开始执行")

    def tearDown(self):
        print("执行结束")

    @ddt.data(*data)
    def test_main_case(self,data):
        '''给一个默认值'''
        cookies = None
        get_cookie = None
        headers = None
        '''i就是行号'''
        i = excel_data.get_rows_number(data[0])
        is_run = data[2]
        '''判断如果第二列数据为yes则执行'''
        if is_run == "yes":
            '''获取前置条件'''
            is_depend = data[3]
            '''如果前置条件存在,获取依赖字段'''
            data1 = json.loads(data[7])
            if is_depend:
                depend_key = data[4]
                depend_data = get_data(is_depend)
                data1[depend_key] = depend_data
            '''获取请求方法'''
            method = data[6]
            '''获取请求url'''
            url = data[5]
            cookie_method = data[9]
            header_method = data[8]
            if cookie_method == "yes":
                cookies = handlecookie.get_cookie_value("app")
            if cookie_method == "write":
                get_cookie = {"is_cookie": "web"}
                '''操作header的情况'''
            if header_method == "yes":
                headers = getHeader.get_header()
            '''用封装的request发送请求'''
            res = request.run_main(method=method, url=url, get_cookie=get_cookie, cookies=cookies, headers=headers,
                                   data=data1)
            '''调试打印'''

            '''获取实际errorCode对应的code'''
            code = res["errorCode"]
            '''获取实际的msg的值'''
            msg = res["errorDesc"]
            '''获取断言方法'''
            assertion_method = data[10]
            '''获取预期结果'''
            excepect_result = data[11]
            '''如果断言方法是mer'''
            if assertion_method == "mer":
                '''传入实际code获取config对应的msg值'''
                config_msg = data_result.get_result(url, code)
                '''进行断言'''
                if msg == config_msg:
                    '''直接写i行13列写入内容'''
                    excel_data.excel_write_data(i,13,"case通过")
                else:
                    excel_data.excel_write_data(i,13,"case失败")
                    '''如果断言方法是result'''
            if assertion_method == "result":
                '''这块需要注意返回结果获取的result是整型,而我们Excel中获取
                的是字符串,所以这边需要把格式统一再做比对'''
                if str(res["errorCode"]) == excepect_result:
                    excel_data.excel_write_data(i,13,"case通过")
                else:
                    excel_data.excel_write_data(i,13,"case失败")

if __name__ == '__main__':
    unittest.main(verbosity=2)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值