zoukankan      html  css  js  c++  java
  • excel单元测试

    步骤1:编写测试方法 

    api_request.py
    import requests
    
    class HttpRequest:
        """requests请求需要转入的参数"""
    
        def http_request(self,method, url, data,auth = None,headers =None ):
            '''url:请求地址 http://xxxx:port
               param:传递的参数 非必填参数 字典的格式传递参数
               method:请求方式  支持get,post,put...
               get:获取信息,post:添加信息,put:修改更新信息
            '''
            if method.lower() in ('get','post','put','patch'):
                if method.lower() == 'get':
                    res = requests.get(url, data, auth = auth, headers= headers)
                elif method.lower() == 'post':
                    res = requests.post(url, data, headers = headers)
                elif method.lower() == 'put':
                    res = requests.put(url, data, headers = headers)
                else:
                    res = requests.patch(url, data, headers = headers)
    
                return res
            else:
                raise Exception('暂不支持的请求方式')

    步骤2:excel中存储测试数据

    test.xlsx

     步骤3:配置文件,指定需要测试的测试数据

    case.config

    [MODE]
    button = all
    button1 = ['001', '003']

    步骤4:读取配置文件

    api_readconfig.py
    import configparser
    
    class ReadConfig:
        def read_config(self,file_name,section,option):
            cf = configparser.ConfigParser() # 实例化
            cf.read(file_name,encoding='utf-8')
            return cf.get(section,option)

    步骤5:取出指定测试数据,存于列表中

    from openpyxl import load_workbook
    from api_tools.doexcel.api_readconfig import ReadConfig   #导入配置文件读取方法
    
    class Excel:
    
        def __init__(self,file_name,sheet_name):
            self.file_name = file_name
            self.sheet_name = sheet_name
            self.obj = load_workbook(self.file_name)[self.sheet_name]
            self.max_row = self.obj.max_row
            self.max_colunm = self.obj.max_colunm
    
        def get_header(self):
            """获取标题行:第一行"""
            header = []  # 存储标题行
            for j in range(1, self.max_colunm + 1):
                header.append(self.obj.cell(1, j).value)
            return header
    
        def data_store(self):
    
            """ button:控制是否执行所有的用例,默认值为all, 为all表示执行所有用例,否则进入分支判断
                      button的取值:all/列表 """
    
            button = ReadConfig().read_config('case.config', 'MODE', 'button1')  # 配置文件读取方法
    
            """ 将excel的测试数据存储到列表中 """
            header = self.get_header() # 获取header
            data_list = []
            for i in range(2,self.max_row +1): #行:一条测试用例
                data_dict ={}
                for j in range(1,self.max_colunm + 1):  # 列,利用get_header()存储测试数据
                    data_dict[header[j-1]] = self.obj.cell(i,j).value  # header是列表, j-1列表:从0开始
                    data_list.append(data_dict)  # 每条测试用例作为子元素传入test_data[]中
                """
                # 直接将测试数据以字典形式写入到data_list列表中
                data_dict['method']     = self.obj.cell(i,4).value
                data_dict['url']        = self.obj.cell(i,5).value
                data_dict['data']       = self.obj.cell(i,6).value
                data_dict['expected']   = self.obj.cell(i,7).value
                data_list.append(data_dict)   # 每条测试用例作为子元素传入data_list[]中
                """
            # return data_list
    
            if button == 'all':  # 执行所有的用例
                data_final = data_list
            else:
                data_final = []
                for item in data_list:  # 对data_list 所有的测试数据进行遍历
                    if item['case_id'] in button:
                        data_final.append(item)
    
            return data_final

    步骤6:执行测试用例方法

    请求头文件:get_header.py

    class GetHeader:
        headers = {'X-Lemonban-Media-Type': 'xxxxx', 'Content-Type': 'application/json; charset=UTF-8','Authorization':None}
    测试用例执行方法:
    api_testexcelcase.py
    import json
    import unittest
    from ddt import ddt,data
    from api_tools.com.api_request import HttpRequest  # 导入requests接口请求方法
    from api_tools.doexcel.get_header import GetHeader
    from api_tools.doexcel.api_readexcel import Excel
    
    
    data_final = Excel("file_name", "sheet_name").data_store()  #所有测试用例
    
    @ddt
    class Test(unittest.TestCase):
            """写测试用例"""
    
            def setUp(self):
                pass
    
            """
            def __init__(self, methodName, method, url, data, expected):  # 通过初始化函数来传参数
                super(Test, self).__init__(methodName)  # 保留父类的方法
                self.url = url
                self.data = json.loads(data)
                self.method = method
                self.expected = expected    
            """
    
            @data(*data_final)
    
            #  给requests接口方法传入必要参数,并且比对结果是否与预期一致
    
            def test_casename(self,item):
    
                """  
                print('请求信息为:
     url:{0},data:{1},method:{2},header:{3}'.format(self.url, json.dumps(self.data), self.method,getattr(GetHeader, 'headers')))
                res = HttpRequest().http_request(self.url, json.dumps(self.data), self.method,getattr(GetHeader, 'headers'))
                try:
                    self.assertEqual(self.expected, res.json()['code'], '提示信息')
                except AssertionError as e: #异常处理
                    print("出错啦!断言错误是{0}".format(e))
                    raise e
                print(res.json())
                
                """
    
                print('请求信息为:
     url:{0},data:{1},method:{2},header:{3}'.format(item['url'], json.dumps(json.loads(item['data'])),item['method'], getattr(GetHeader, 'headers')))
                res = HttpRequest().http_request(item['url'], json.dumps(json.loads(item['data'])), item['method'],getattr(GetHeader, 'headers'))
                try:
                    self.assertEqual(item['expected'], res.json()['code'])
                except AssertionError as e:
                    print("test_rl_api error is {}".format(e))
                    raise e
                print(res.json())
    
            def tearDown(self):
                pass

    步骤7:执行测试用例,生成测试报告

    import HTMLTestRunner
    import time
    import unittest
    from api_tools.doexcel.api_testexcelcase import Test
    
    
    suite = unittest.TestSuite() # 创建实例
    loader = unittest.TestLoader() # 加载测试用例
    suite.addTest(loader.loadTestsFromTestCase(Test))
    
    # 生成测试报告
    with open(time.strftime('%Y-%m-%d %H_%M_%S')+'_test_report.html','wb') as file:
        runner = HTMLTestRunner.HTMLTestRunner(stream=file,
                                               verbosity=2,
                                               title=  time.strftime('%Y-%m-%d %H_%M_%S') + 'XXXX测试报告',
                                               description='运行环境:Windows 10, Chrome浏览器' )
        runner.run(suite) # 执行测试用例
    
    
    if __name__ == '__main__':
        unittest.TestCase()

     

  • 相关阅读:
    依赖注入简单解释
    设计模式
    Git 命令使用
    手机版自适应
    自定义属性的添加
    innerText Textcontent浏览器兼容代码
    获取间的内容
    密码长度为6-10的判断
    模拟输入框
    排他功能
  • 原文地址:https://www.cnblogs.com/kite123/p/12598208.html
Copyright © 2011-2022 走看看