027python-ddt

news2024/11/25 16:40:40
在unittest中,测试用例是不能传self以外的参数的,否则会报错
import unittest


class TeatMath(unittest.TestCase):


    # def test_add(self,q):   # TypeError: TeatMath.test_add() missing 1 required positional argument: 'q'——>测试用例传参报错
    def test_add(self):
        a = 10
        b = 20
        print(a + b)
解决unittest中测试用例不能传self参数以外的参数问题,可以使用ddt传参
DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。

import unittest
from ddt import ddt, data, unpack

test_data = [1, 3]


@ddt  # 装饰测试类
class TestMath(unittest.TestCase):
    @data(test_data)
    def test_print_data(self, item):
        print('item是{}:'.format(item))
知识补充——不定长参数:脱外套
def print_msg(*args):
    print(args)


t = [1, 4]
# 脱外套
print(*t)

解决unittest中测试用例不能传self参数以外的参数问题,可以使用ddt传参,使用data装饰测试方法时,测试用例中只能添加一个self以外的参数
import unittest
from ddt import ddt, data, unpack

test_data = [[1, 3],[8,0]]


@ddt  # 装饰测试类
class TestMath(unittest.TestCase):
    # ddt中的data ——>def data(*values):
    @data(*test_data)   # 装饰测试方法,拿到几个数据,就执行几条用例
    def test_print_data(self, item):  # 使用data装饰测试方法时,测试用例中只能添加一个self以外的参数
        print('item是{}:'.format(item))
unpack使用:
​​​​​​​import unittest
from ddt import ddt, data, unpack

test_data = [[1, 3], [8, 0]]


@ddt  # 装饰测试类
class TestMath(unittest.TestCase):
    # * ——>脱去测试数据test_data的外套
    @data(*test_data)  # 装饰测试方法,拿到几个数据,就执行几条用例
    @unpack  # 如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。如果不进行脱外套,就不需要使用unpack
    def test_print_data(self, a, b):  # 使用data装饰测试方法时,测试用例中只能添加一个self以外的参数,参数个数要与取到的数据一致
        print('a是{}:,b是{}:'.format(a, b))


# -----------------------------------------------------------

# 当列表(字典、元组等)中元素中的子元素个数不同
import unittest
from ddt import ddt, data, unpack

test_data = [[1, 3], [8, 0,9]]


@ddt  # 装饰测试类
class TestMath(unittest.TestCase):
    # * ——>脱去测试数据test_data的外套
    @data(*test_data)  # 装饰测试方法,拿到几个数据,就执行几条用例
    @unpack
    def test_print_data(self, a=None, b=None, c=None):  # 使用data装饰测试方法时,测试用例中只能添加一个self以外的参数,参数个数要与取到的数据一致,如果不一致,可以给出默认值;一般情况下,数据少的可以使用unpack,数据过多时不建议使用unpack
        print('a是{}:,b是{},b是{}:'.format(a, b, c))


#-------------------------------------------------------------

如果想要对字典进行unpack,参数名与字典的key对应
import unittest
from ddt import ddt, data, unpack

test_data = [{'name': '暖暖', 'age': 11}, {'name': 'lili', 'age': 19}]


@ddt
class TestMsg(unittest.TestCase):
    @data(*test_data)   # ***使用unpack记得脱外套
    @unpack
    def test_print_msg(self, name, age):
        print('name是{},age是{}'.format(name, age))
ddt+excel结合使用
1:创建一个http请求

import requests


# 课堂派 登录、查询请求
class HttpRequest:
    """利用requests封装get请求和post请求"""

    def http_request(self, deng_url, deng_data, method, cookie=None):  # url、data、cookie 参数化
        """url:请求的地址 http://xxxx:port
        param(参数):传递的参数,非必填参数,字典格式传递参数
        method:请求方式,支持get以及post请求
        cookie:请求的时候传递的cookie值"""

        # 登录
        if method.lower() == 'get':
            deng_res = requests.get(deng_url, json=deng_data, cookies=cookie)  # 响应结果的消息实体
        else:
            deng_res = requests.post(deng_url, json=deng_data, cookies=cookie)  # 响应结果的消息实体
        return deng_res  # 返回一个消息实体
2:创建excel测试类

from openpyxl import load_workbook


class DoExcel:
    def __init__(self, file_name, sheet_name):
        self.file_name = file_name
        self.sheet_name = sheet_name

    def get_data(self):
        wb = load_workbook(self.file_name)
        sheet = wb[self.sheet_name]
        test_data = []

        for i in range(2, sheet.max_row + 1):
            sub_data = {}
            sub_data['method'] = sheet.cell(i, 4).value
            sub_data['url'] = sheet.cell(i, 5).value
            sub_data['data'] = sheet.cell(i, 6).value
            sub_data['expected'] = sheet.cell(i, 7).value

            test_data.append(sub_data)

        return test_data  # 获取返回的数据


if __name__ == '__main__':
    # 打印出返回值:实例调用方法接收返回值
    print(DoExcel('nuannuan.xlsx', 'nuannuan_04').get_data())
3:创建一个反射测试类

class GetData:
    Cookie = None  # 存储cookie,初始值None
4:创建一个测试用例类

import unittest
from ddt import ddt, data

from class_014.class_ddt_excel.class_http_request import HttpRequest
from class_014.class_ddt_excel.get_data import GetData
from class_014.class_ddt_excel.do_excel import DoExcel

test_data = DoExcel('nuannuan.xlsx', 'nuannuan_04').get_data()


@ddt
class TestKeTang(unittest.TestCase):

    def setUp(self):  # 初始化,属性可以被实例调用,可以被类函数里面调用
        pass

    @data(*test_data)
    def test_api(self, item):  # 接口用例
        # 测试用例只能通过初始化传参,不能通过测试用例传参,测试用例只能有一个参数self
        res = HttpRequest().http_request(item['url'], eval(item['data']), item['method'], getattr(GetData, 'Cookie'))
        if res.cookies:  # 如果cookie有的话,那么就会更新COOKIE,setattr()函数可以直接将类里面的属性做修改
            setattr(GetData, 'Cookie', res.cookies)
        print(res.json())
        try:
            self.assertEqual(item['expected'], res.json()['code'])
        except AttributeError as e:
            print('test_api‘s error is{0}!!!!!'.format(e))
            raise e

    def tearDown(self):
        print('用例执行完毕!!!!!')
5:执行测试用例,并获取测试报告
import unittest
import HTMLTestRunnerNew
from class_014.class_ddt_excel.class_lei import TestKeTang

# 避坑——>使用ddt,使用loader加载用例
# 存储用例,加载数据
suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestKeTang))

with open('test_kt_report.html', 'wb') as file:
    runner = HTMLTestRunnerNew.HTMLTestRunner(stream=file, verbosity=2, title='python“课堂派”单元测试报告',
                                              description='报告描述:自动化课堂派测试报告', tester='暖暖')
    runner.run(suite)

excel说明:

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/539142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【KD-Tree】基于k-d树的KNN算法实现

文章目录 一、什么是KD-Tree?二、k-d树的结构三、k-d树的创建四、k-d树的应用五、KD-Tree的优缺点 例题JZPFAR 一、什么是KD-Tree? KD-Tree,又称(k-dimensional tree),是一种基于二叉树的数据结构。它可以…

大项目推进

拉取最新的小组分支,创建自己开发分支(对应实现人) 任务分支(小组名-功能名-执行人,如:f1-login-zhangfei) 根据业务流程整理文档梳理与书写 定义领域模型(包括:query、…

通用医学人工智能基础模型(GMAI)

最近,Eric J. Topol和 Pranav Rajpurkar研究团队提出了一个通用医学人工智能基础模型,文章名字《Foundation models for generalist medical artificial intelligence》 模型研究进展包括:多模态架构,和自监督学习技术&#xff0…

知识库AI机器人客服接口对接-唯一客服系统文档中心

如果你的需求仅仅是对接自训练的ChatGPT接口,实现自己的个性化机器人,那么可以看看下面的个性化ChatGPT调用接口前提条件是已经搭建好了知识库服务,该服务默认监听端口8083 chat接口地址 POST http://127.0.0.1:8083/data_collection/searchS…

“伙伴+华为”体系,数字时代的新航标

如果从1994年中国实行税制改革,要求以“以计算机网络为依托”开展企业税务工作算起,转瞬间,中国企业的信息化、数字化建设已经走过了近三十年历程。 这期间,信息化、数字化成为了企业走向管理现代化、全球化的依托,成为…

最新版本的Android studio 集成高德地图的定位功能

android studio版本: 1、根据高德官网链接集成 2、配置key的时候有两个注意点: a .获取安全SHA1 根据高德推荐的方式获取时,可能C:\Program Files\Android\Android Studio\jre\bin目录下找不到keytool.exe; 可以根据以下方式获取&#xff1…

华为新模拟器eNSPLite下载,部署教程及产品使用文档

华为新模拟器eNSPLite下载,部署教程及产品使用文档 如需下载请到我的博客中下载 硬件要求 数通培训认证模拟器支持在个人PC和物理服务器上部署安装,如下所示。 硬件推荐配置CPUX86_64架构CPU,支持VT-x/AMD-V 8核或以上RAM16G或以上DISK40G以…

数据库信息速递 支持机器学习的10个数据库 (译)

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

Spring:自动装配 Bean 的两种方式、使用注解开发

文章目录 Spring:Day 02一、自动装配 Bean1. 搭建环境2. 自动装配方式一:xml 配置3. 自动装配方式二:注解 二、注解开发三、使用 JavaConfig 实现配置 Spring Spring:Day 02 一、自动装配 Bean 在 Spring 中有三种装配的方式&am…

PostgreSQL表用户列最大个数

PostgreSQL表用户列最大个数 有些业务可能有这么个需求:需要增加用户列,即通过ALTER TABLE ... ADD...来添加用户列。那么PG/GP中是否会有列个数的限制呢? 它有1600列数的限制,并且没有方法去除掉这个限制。参见: http…

千年平阴玫瑰,绽放数字新魅力

“人间美景五月天、玫瑰花放霞流丹。” 每年的五月,济南市平阴县总是一幅玫瑰花芳香如海的迷人景象。作为中国玫瑰之乡,平阴地处古东原之阴,位于北纬36度“玫瑰种植黄金带”之上,这里土肥地沃、气候温和,属暖温带大陆…

Netty实战(四)

本节我们看看Netty的传输(全是干货,自带水杯) 一、Java的NIO和OIO1.1 OIO1.2 NIO 二、Netty的NIO和OIO2.1 OIO2.2 NIO 三、传输API四、内置的传输4.1 NIO4.2 Epoll—用于 Linux 的本地非阻塞传输4.3 OIO4.4 用于 JVM 内部通信的 Local 传输4.…

chatgpt赋能Python-pycharm如何关联python

PyCharm如何关联Python 作为一款被广泛使用的Python集成开发环境(IDE),PyCharm为Python程序员提供了丰富的开发工具和功能。在开始使用PyCharm之前,我们需要确保PyCharm已经正确地关联了Python。在本篇文章中,我们将介…

chatgpt赋能Python-pycharm访问网页

PyCharm访问网页的SEO技巧 PyCharm是一款强大且广受欢迎的Python开发环境,它提供了许多优秀的工具和功能,以便于Python项目的开发和管理。其中一个强大的功能是PyCharm可以访问网页,可以使你快速获取和分析数据。但是,在使用这个…

POSTGRESQL 通过TRIGGER 解决数据库表丢失数据的问题

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

Consul系列:什么是Consul?

引言 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案, consu1 的方案更“一站式”,内置了服务注册 与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心…

多区域综合能源系统热网建模及系统运行优化(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

(转载)从0开始学matlab(第4天)—子数组

你可以选择和使用一个 MATLAB 函数的子集,好像他们是独立的数组一样。在数组名后面加括号,括号里面是所有要选择的元素的下标,这样就能选择这个函数的子集了。例如,假设定义了一个数组 arr1 如下 arr1[1.1 -2.2 3.3 -4.4 5.5] 那…

EMI超标问题排查

基于场外EMC测试反馈,EMI测试超标,测试结果如下图; 通过图形我们 可以看出,主要EMI超标频率集中在1GHz(大约700M的时候最差)附近。 使用RS频谱仪结合近场探头,进行复测: 复测情况确实存在EMI问题集中在700MHz左右。 去掉时钟输出接口时; 效果明显 通过试验,可以得出…

Java进阶-文件操作

1.File类 1.1File类概述和构造方法 File类介绍 它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已.它可以是存在的,也可以是不存在的.将来是要通过具体的操作把这个路径的内容转换为具…