Python自动化测试之封装读取Excel类

## ddt的使用步骤:
1、测试类前面使用@ddt
2、在测试方法前使用@list_data(测试数据)
3、在测试方法中定义一个参数,用于接收用例数据

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

ddt底层原理:
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)

封装读取Excel类:

Python自动化测试之封装读取Excel类_第1张图片

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自动化,python,自动化,开发语言)