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

 更新时间:2025年11月24日 10:33:04   作者:葬爱家族小阿杰  
文章介绍了数据驱动测试(DDT)的思想和使用步骤,包括使用@ddt和@list_data装饰器,以及如何在测试方法中接收用例数据,文章还简要介绍了DDT的底层原理,涉及到保存和遍历测试数据,最后,文章提供了一个综合运用的示例,并呼吁大家支持脚本之家

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类

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']))

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Django 实现 Websocket 广播、点对点发送消息的代码

    Django 实现 Websocket 广播、点对点发送消息的代码

    这篇文章主要介绍了Django 实现 Websocket 广播、点对点发送消息,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 如何利用python执行txt文件中的代码

    如何利用python执行txt文件中的代码

    这篇文章主要介绍了如何利用python执行txt文件中的代码,python这么强大的语言当然可以做大,只需使用内置的exex()函数,进入主题前我们先来看看什么是exec()函数,需要的小伙伴可以参考一下
    2022-03-03
  • Django 框架模型操作入门教程

    Django 框架模型操作入门教程

    这篇文章主要介绍了Django 框架模型操作,结合实例形式分析了Django框架相关的数据库配置、数据增删改查等操作技巧,需要的朋友可以参考下
    2019-11-11
  • keras分类模型中的输入数据与标签的维度实例

    keras分类模型中的输入数据与标签的维度实例

    这篇文章主要介绍了keras分类模型中的输入数据与标签的维度实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Pandas 多层索引操作的实现

    Pandas 多层索引操作的实现

    本文主要介绍了Pandas 多层索引操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • pycharm 2019 最新激活方式(pycharm破解、激活)

    pycharm 2019 最新激活方式(pycharm破解、激活)

    这篇文章主要介绍了最新2019pycharm激活方式(pycharm破解、激活),本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • python抓取网页中链接的静态图片

    python抓取网页中链接的静态图片

    这篇文章主要为大家详细介绍了python抓取网页中链接的静态图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Django Rest framework权限的详细用法

    Django Rest framework权限的详细用法

    这篇文章主要介绍了Django Rest framework权限的详细用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 对Python 数组的切片操作详解

    对Python 数组的切片操作详解

    今天小编就为大家分享一篇对Python 数组的切片操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 使用python实现滑动验证码功能

    使用python实现滑动验证码功能

    这篇文章主要介绍了使用python实现滑动验证码功能,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08

最新评论