Python自动化测试之封装读取Excel类实现方式

作者:

文章目录
  • 1、测试类前面使用@ddt 2、在测试方法前使用@list_data(测试数据) 3、在测试方法中定义一个参数,用于接收用例数据
  • import openpyxl class HandleExcel: def __init__(self, filename, sheetname): ”’ :param filename: excel文件名字 :param sheetname: 表单名 ”’ self.filename = filename self.sheetname = sheetname def read_data(self): # 加载excel工作簿 workbook = openpyxl.load_workbook(self.filename) # 选中表单 sh = workbook[self.sheetname] # 获取所有数据 cel = list(sh.rows) # 变量第一行数据 tital = [i.value for i in cel[0]] cases = [] # 遍历除第一行以外的行 for item in cel[1:]: # 获取该行的数据 data = [i.value for i in item] # 把第一行数据和当前行数据打包成字典 dic = dict(zip(tital, data)) # 把字典添加到列表中 cases.append(dic) return cases def write_data(self, row, column, value): ”’ :param row: 写入行 :param column: 写入列 :param value: 写入值 :return: ”’ workbook = openpyxl.load_workbook(self.filename) sh = workbook[self.sheetname] sh.cell(row=row, column=column, value=value) workbook.save(self.filename) def close_file(self): self.close_file(self.filename) if __name__ == ‘__main__’: t = HandleExcel(“cases.xlsx”, “login”).read_data() print(t) 综合运用: import unittest import os import requests from unittestreport import ddt,list_data from commons.handle_excel import HandleExcel from commons.handle_path import DATAS_DIR from commons.handle_config import conf from commons.tools import replace_data from commons.handle_log import log @ddt class TestLogin(unittest.TestCase): excel=HandleExcel(os.path.join(DATAS_DIR,’apicases.xlsx’),’login’) cases=excel.read_data() @list_data(cases) def test_login(self,item): # 1、准备数据 url=conf.get(‘env’,’base_url’)+item[‘url’] item[‘data’]=replace_data(item[‘data’],TestLogin) params=eval(item[‘data’]) method=item[‘method’].lower() expected=eval(item[‘expected’]) # 2、请求接口 response=requests.request(method=method,url=url,json=params) res=response.json() code = response.status_code print(‘请求参数:’, params) print(‘预期结果:’, expected) print(‘实际结果:’, res) print(‘返回码:’, code) # 3、断言 try: self.assertEqual(expected[‘code’],code) self.assertIn(expected[‘msg’],res.values()) except AssertionError as e: log.error(‘用例—–【{}】—–执行不通过’.format(item[‘title’])) log.exception(e) raise e else: log.info(‘用例—–【{}】——执行通过’.format(item[‘title’]))
  • 以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。 您可能感兴趣的文章: Python实现接口自动化封装导出excel和读写excel数据 Python操作Excel数据的封装函数分享 使用Python封装excel操作指南 python excel和yaml文件的读取封装
  • 目录
    • ddt的使用步骤
      • ddt:DataDriverTest(数据驱动测试)
      • ddt底层原理
    • 封装读取Excel类
      • 总结

        1、测试类前面使用@ddt

        2、在测试方法前使用@list_data(测试数据)

        3、在测试方法中定义一个参数,用于接收用例数据

        思想:把测试数据和用例代码进行分离,通过外部数据去生成测试用例,方便后期维护,以及测试数据管理

        1、保存测试数据

        2、遍历测试数据,生成测试方法

        import unittest
        
        from unittestreport import ddt,list_data
        import requests
        
        cases = [
            {"excepted":{"code":0, "msg":"登陆成功"},"params":{"username":"aaa", "password":"123456"}},
            {"excepted":{"code":1, "msg":"登陆失败"},"params":{"username":"aaa", "password":"123"}},
            {"excepted":{"code":1, "msg":"登陆失败"},"params":{"username":" ", "password":"123456"}},
        ]
        
        @ddt
        class TestLogin(unittest.TestCase):
            @list_data(cases)
            def test_login(self, item):
                data = item['params']
                expected = item['expected']
                res = login_check(**data)
                self.assertEqual(expected, res)
        

        import openpyxl
        
        class HandleExcel:
            def __init__(self, filename, sheetname):
                '''
                :param filename: excel文件名字
                :param sheetname: 表单名
                '''
                self.filename = filename
                self.sheetname = sheetname
        
            def read_data(self):
                # 加载excel工作簿
                workbook = openpyxl.load_workbook(self.filename)
                # 选中表单
                sh = workbook[self.sheetname]
                # 获取所有数据
                cel = list(sh.rows)
                # 变量第一行数据
                tital = [i.value for i in cel[0]]
                cases = []
                # 遍历除第一行以外的行
                for item in cel[1:]:
                    # 获取该行的数据
                    data = [i.value for i in item]
                    # 把第一行数据和当前行数据打包成字典
                    dic = dict(zip(tital, data))
                    # 把字典添加到列表中
                    cases.append(dic)
                return cases
        
            def write_data(self, row, column, value):
                '''
                :param row: 写入行
                :param column: 写入列
                :param value: 写入值
                :return:
                '''
                workbook = openpyxl.load_workbook(self.filename)
                sh = workbook[self.sheetname]
                sh.cell(row=row, column=column, value=value)
                workbook.save(self.filename)
        
            def close_file(self):
                self.close_file(self.filename)
        
        if __name__ == '__main__':
            t = HandleExcel("cases.xlsx", "login").read_data()
            print(t)
        
        


        综合运用:

        import unittest
        import os
        import requests
        from unittestreport import ddt,list_data
        from commons.handle_excel import HandleExcel
        from commons.handle_path import DATAS_DIR
        from commons.handle_config import conf
        from commons.tools import replace_data
        from commons.handle_log import log
        @ddt
        class TestLogin(unittest.TestCase):
            excel=HandleExcel(os.path.join(DATAS_DIR,'apicases.xlsx'),'login')
            cases=excel.read_data()
            @list_data(cases)
            def test_login(self,item):
                # 1、准备数据
                url=conf.get('env','base_url')+item['url']
                item['data']=replace_data(item['data'],TestLogin)
                params=eval(item['data'])
                method=item['method'].lower()
                expected=eval(item['expected'])
                # 2、请求接口
                response=requests.request(method=method,url=url,json=params)
                res=response.json()
                code = response.status_code
                print('请求参数:', params)
                print('预期结果:', expected)
                print('实际结果:', res)
                print('返回码:', code)
                # 3、断言
                try:
                    self.assertEqual(expected['code'],code)
                    self.assertIn(expected['msg'],res.values())
                except AssertionError as e:
                    log.error('用例-----【{}】-----执行不通过'.format(item['title']))
                    log.exception(e)
                    raise e
                else:
                    log.info('用例-----【{}】------执行通过'.format(item['title']))
        

        以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。

        您可能感兴趣的文章:

        • Python实现接口自动化封装导出excel和读写excel数据
        • Python操作Excel数据的封装函数分享
        • 使用Python封装excel操作指南
        • python excel和yaml文件的读取封装

        站内搜索