返回顶部
首页 > 资讯 > 后端开发 > Python >python自动化测试中装饰器@ddt与@data怎么使用
  • 775
分享到

python自动化测试中装饰器@ddt与@data怎么使用

2023-07-04 18:07:17 775人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python自动化测试中装饰器@ddt与@data怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python自动化测试中装饰器@ddt与@data怎么使用”文章能帮助大家解

这篇文章主要介绍“python自动化测试中装饰器@ddt与@data怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python自动化测试中装饰器@ddt与@data怎么使用”文章能帮助大家解决问题。

一、使用ddt和data装饰器的大致框架如下,每个test_开头的方法,代表一条测试用例

from ddt import ddt,dataimport unittesttest_datas=[    {'id':1,'title':'测试用例1'},    {'id':2,'title':'测试用例2'},    {'id':3,'title':'测试用例3'},    {'id':4,'title':'测试用例4'}]@ddtclass TestDemo(unittest.TestCase):    @data(*test_datas)    def test_demo1(self,item):        print('测试用例执行',item)

unittest中的测试用例:

测试类中每一个test开头的方法就是一条测试用例

ddt根据用例数据生成测试用例的思路:

1、利用data装饰器:传入测试数据,在装饰器中将测试数据保存起来
2、ddt这个装饰器:遍历测试数据,每遍历出一条数据,往测试类中添加一个test开头的方法
setattr(类,方法名,方法)

二、给类动态的增加方法

案例1

setattr(对象/类,属性名/方法名,属性值/方法)

特别注意:

给类动态增加方法一定要加self

class Demo:    def test_1(self):        print("这个是方法test_1")def kobe(self,item):    print("kobe-----执行了",item)datas=[2,8,23,22,24]#根据数据动态给测试类中增加5个方法for i in datas:    name='test_1_{}'.fORMat(i)    #给类动态增加方法    setattr(Demo,name,kobe)print(Demo.__dict__)

python自动化测试中装饰器@ddt与@data怎么使用

案例2:

调用动态执行的5个方法,执行结果都为kobe-----执行了 24,有bug

class Demo:    def test_1(self):        print("这个是方法test_1")def kobe(self,item):    print("kobe-----执行了",item)datas=[2,8,23,22,24]#根据数据动态给测试类中增加5个方法for i in datas:    name='test_1_{}'.format(i)    def wrapper(self):        kobe(self,i)    #给类动态增加方法    setattr(Demo,name,wrapper)#print(Demo.__dict__)Demo().test_1_2()Demo().test_1_8()Demo().test_1_22()Demo().test_1_23()Demo().test_1_24()

执行结果:

kobe-----执行了 24
kobe-----执行了 24
kobe-----执行了 24
kobe-----执行了 24
kobe-----执行了 24

原因分析

python自动化测试中装饰器@ddt与@data怎么使用

案例3:

解决案例2的bug

定义闭包create_method:进行数据锁定,锁定的是datas=[2,8,23,22,24]

class Demo:    def test_1(self):        print("这个是方法test_1")def kobe(self,item):    print("kobe-----执行了",item)datas=[2,8,23,22,24]#todo 使用闭包进行数据定def create_method(i):    def wrapper(self):        kobe(self,i)    return wrapper#根据数据动态给测试类中增加5个方法for i in datas:    name='test_1_{}'.format(i)    wrapper=create_method(i)    #给类动态增加方法    setattr(Demo,name,wrapper)Demo().test_1_2()Demo().test_1_8()Demo().test_1_22()Demo().test_1_23()Demo().test_1_24()

三、ddt和data的源码解析

from ddt import ddt,dataimport unittesttest_datas=[    {'id':1,'title':'测试用例1'},    {'id':2,'title':'测试用例2'},    {'id':3,'title':'测试用例3'},    {'id':4,'title':'测试用例4'}]def ddt(cls):    '''遍历测试数据,给类动态添加方法'''    #如何通过类获取方法?    #res=cls.__dict__    #print('测试类的方法和属性字典',res)    for name,method in list(cls.__dict__.items()):        #遍历出来的属性值(方法)是否拥有datas属性(测试数据)        if hasattr(method,'datas'):            #获取方法中保存的测试数据            datas=getattr(method,'datas')            #遍历测试数据            for index,value in enumerate(datas):                print("数据:",value)                #给测试类动态添加用例                method_name='{}_{}'.format(name,index+1)                print('方法名',method_name)#给类动态的增加方法                def wrapper(self):                    method(self, value)                #todo 给测试类动态添加一个测试方法                setattr(cls,method_name,wrapper)    return clsdef data(*args):    '''将测试数据保存为测试方法的属性'''    #*args接收到的是data装饰器传递进来的数据    def wrapper(func):        #func接收的是data装饰的函数        func.datas=args        return func    return wrapper@ddtclass TestDemo():    @data(*test_datas)      #test_demo1=data(*test_datas)(test_demo1)    def test_demo1(self,item):        print('测试用例执行',item)#print(TestDemo.test_demo1.__dict__)

这样写的话有bug

python自动化测试中装饰器@ddt与@data怎么使用

原因:

python自动化测试中装饰器@ddt与@data怎么使用

解决:

采用闭包进行数据锁定,锁定value和method

def create_test_method(method,value):    def wrapper(self):        method(self, value)    return wrapper
from ddt import ddt,dataimport unittesttest_datas=[    {'id':1,'title':'测试用例1'},    {'id':2,'title':'测试用例2'},    {'id':3,'title':'测试用例3'},    {'id':4,'title':'测试用例4'}]def create_test_method(method,value):    def wrapper(self):        method(self, value)    return wrapperdef ddt(cls):    #todo @ddt这个装饰器:遍历测试数据,每遍历出一条数据,往测试类中添加一个test开头的方法    #setattr(类,方法名,方法)    res=list(cls.__dict__.items())    print(res)    for name,method in res:        print(name,method)        if hasattr(method,'datas'):            #如果有datas属性,获取方法中保存的datas            datas=getattr(method,'datas')            #遍历测试数据            for index,value in enumerate(datas):                print('测试数据:',value)                #给测试类动态的增加测试用例                method_name='{}_{}'.format(name,index+1)                print('方法:',method_name,method)                #todo 给类动态的增加方法,最终希望执行def test_demo1(self,item):这个方法的                #test_method=method                #但是item需要自己传,但是unittest是不需要传递参数的                                # def wrapper(self):                #     method(self,value)                wrapper=create_test_method(method, value)                # todo 给测试类动态添加一个测试方法                setattr(cls, method_name, wrapper)            else:                delattr(cls,name)    return clsdef data(*args):    # *args为给装饰器传递的参数test_datas    def wrapper(func):        # func为被装饰器装饰的函数test_demo1        #todo @data装饰器的作用是保存测试数据,将测试数据存放到函数属性中        func.datas = test_datas        return func    return wrapper@ddtclass TestDemo(unittest.TestCase):    @data(*test_datas)      #test_demo1=data(*test_datas)(test_demo1)    def test_demo1(self,item):        print('测试用例执行',item)

分部解析代码

@data(*test_datas)    def test_demo1(self,item):    print('测试用例执行',item)

上面3行代码可以写成如下:

@data(*test_datas):可以表示为test_demo1=data(*test_datas)(test_demo1)

输出属性(方法)名称和属性值

for name,method in list(cls.__dict__.items())

python自动化测试中装饰器@ddt与@data怎么使用

将遍历出来的属性名(方法)判断是否包含datas属性,如果有datas属性,获取方法中保存的datas

if hasattr(method,'datas'):datas=getattr(method,'datas')

关于“python自动化测试中装饰器@ddt与@data怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网Python频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: python自动化测试中装饰器@ddt与@data怎么使用

本文链接: https://lsjlt.com/news/346891.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python自动化测试中装饰器@ddt与@data怎么使用
    这篇文章主要介绍“python自动化测试中装饰器@ddt与@data怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python自动化测试中装饰器@ddt与@data怎么使用”文章能帮助大家解...
    99+
    2023-07-04
  • python自动化测试中装饰器@ddt与@data源码深入解析
    目录一、使用ddt和data装饰器的大致框架如下,每个test_开头的方法,代表一条测试用例二、给类动态的增加方法案例1案例2:案例3:三、ddt和data的源码解析原因:解决:分部...
    99+
    2022-12-10
    python装饰器@ddt和@data python 自动化测试 python @ddt和@data源码
  • python自动化测试中装饰器@ddt和@data源码解析
    一、使用ddt和data装饰器的大致框架如下,每个test_开头的方法,代表一条测试用例 from ddt import ddt,dataimport unittesttest_datas=[ ...
    99+
    2023-10-08
    python 测试用例 开发语言
  • Python自动化测试利器selenium怎么使用
    1 自动化测试自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。自动化测试包括UI自动化,接口自动化,单元测试自动化。按照这个金字塔模型来进行...
    99+
    2023-05-17
    Python Selenium
  • python自动化测试中Selenium怎么用
    小编给大家分享一下python自动化测试中Selenium怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.安装完成自动化测试,需要配置三个东西。selen...
    99+
    2023-06-29
  • python+pytest自动化测试封装怎么实现
    本篇内容介绍了“python+pytest自动化测试封装怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!例如单个接口的请求代码如下:i...
    99+
    2023-07-02
  • python中Airtest自动化测试工具怎么用
    小编给大家分享一下python中Airtest自动化测试工具怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Airtest的官网介绍项目构成Airtest:是...
    99+
    2023-06-29
  • 怎么用Python+Appium做自动化测试
    这篇文章主要讲解了“怎么用Python+Appium做自动化测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python+Appium做自动化测试”吧!目录一、环境准备二、真机测试一...
    99+
    2023-06-20
  • python怎么使用Hypothesis来自动化单元测试
    这篇文章主要介绍了python怎么使用Hypothesis来自动化单元测试,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Hypothesis 是一个 Python 库,用于让...
    99+
    2023-06-14
  • Python怎么实现自动化测试
    本篇文章为大家展示了Python怎么实现自动化测试,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码...
    99+
    2023-06-14
  • Python装饰器使用接口测试的步骤
    目录第一步,先看一下闭包的语法:第二步,再来看一下闭包的装饰器版本的语法:最后一步,再看一下装饰器的语法:写接口case时,有时需要对cae做一些共性的操作,最典型的场景如:获取ca...
    99+
    2024-04-02
  • Python中怎么使用装饰器装饰函数
    这篇文章将为大家详细讲解有关Python中怎么使用装饰器装饰函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。***个函数deco是装饰函数,它的参数就是被装饰的函数对象。我们可以在deco...
    99+
    2023-06-17
  • python使用pytest接口自动化测试的使用
    简单的设计思路 利用pytest对一个接口进行各种场景测试并且断言验证 配置文件独立开来(conf文件),实现不同环境下只需要改环境配置即可 测试的场景读...
    99+
    2024-04-02
  • 怎么使用IOS自动化测试工具UIAutomation
    这篇文章给大家分享的是有关怎么使用IOS自动化测试工具UIAutomation的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。xcode中自带的Instuments工具可以用来进行APP的自动化测试, 以及用于进行...
    99+
    2023-06-14
  • python中装饰器怎么使用
    这篇文章给大家分享的是有关python中装饰器怎么使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、装饰器使用场景经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解...
    99+
    2023-06-15
  • Python中怎么使用装饰器来装饰函数
    在Python中,装饰器是一种函数,它接受一个函数作为参数,并返回一个新的函数。通过使用装饰器,可以在不修改原始函数代码的情况下添加...
    99+
    2024-03-12
    Python
  • 如何使用python selenium实现自动化测试
    这篇文章主要介绍如何使用python selenium实现自动化测试,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、安装selenium打开命令控制符输入:pip install -U selenium火狐浏览器安...
    99+
    2023-06-15
  • 如何使用python+appium实现自动化测试
    这篇文章主要为大家展示了“如何使用python+appium实现自动化测试”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用python+appium实现自动化测试”这篇文章吧。1.什么是A...
    99+
    2023-06-22
  • python自动化测试工具Helium使用示例
    目录前言示例总结前言 Helium工具是对Selenium的封装,将Selenium工具的使用变得更加简单。Selenium虽然好,但是在它的使用过程中元素的提取还是比较复杂的,不论...
    99+
    2024-04-02
  • Jenkins中怎么实现自动化测试
    Jenkins是一个持续集成工具,可以通过配置自动化测试任务来实现自动化测试。以下是在Jenkins中实现自动化测试的一般步骤: ...
    99+
    2024-03-05
    Jenkins
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作