unittest 数据驱动DDT应用

news2024/9/28 21:29:55

前言

一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合。所以在测试一个接口时通常会编写多条case,而这些case除了传参不同外,其实并没什么区别。
这个时候就可以利用ddt来管理测试数据,提高代码复用率。
※但要注意:正向和逆向的要分开写※

安装:pip install ddt
四种模式:第一步引入的装饰器@ddt;导入数据的@data;拆分数据的@unpack;导入外部数据的@file_data

1、读取元组数据

#一定要和单元测试框架一起用
import unittest,os
from ddt import ddt,data,unpack,file_data

'''NO.1单组元素'''
@ddt
class Testwork(unittest.TestCase):
    
    @data(1,2,3)
    def test_01(self,value):      #value用来接收data的数据
        print(value)
if __name__ == '__main__':
    unittest.main()
结果:
=>1
  2
  3

'''NO.2多组未分解元素'''
@ddt
class Testwork(unittest.TestCase):

    @data((1,2,3),(4,5,6))
    def test_01(self,value):       
        print(value)

if __name__ == '__main__':
    unittest.main()
结果:
=>(1, 2, 3)
  (4, 5, 6)

'''NO.3多组分解元素'''
@ddt
class Testwork(unittest.TestCase):

    @data((1,2,3),(4,5,6))
    @unpack          #拆分数据
    def test_01(self,value1,value2,value3):    #每组数据有3个值,所以设置3个形参
        print(value)

if __name__ == '__main__':
    unittest.main()
结果:
=>1 2 3
  4 5 6

2、读取列表数据

import unittest,os
from ddt import ddt,data,unpack,file_data

'''NO.1单组元素和多组元素未分解都一样,下面看嵌套,考眼力了~'''
@ddt
class Testwork(unittest.TestCase):

    @data([{'name':'lili','age':12},{'sex':'male','job':'teacher'}])
    # @unpack
    def test_01(self,a):
        print(a)

if __name__ == '__main__':
    unittest.main()
结果:
=>[{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}]
※上面结果可以看出:无法运用到requests数据请求中,所以不是很实用※

'''NO.2多组元素分解'''
@ddt
class Testwork(unittest.TestCase):

    @data([{'name':'lili','age':12},{'sex':'male','job':'teacher'}])
    @unpack
    def test_01(self,a,b):
        print(a,b)

if __name__ == '__main__':
    unittest.main()
结果:
=>{'name': 'lili', 'age': 12} {'sex': 'male', 'job': 'teacher'}
※拆分后的运行结果,不带有[ ],拆分是将列表中的2个字典拆分,所以有2个数据※

            

3、读取字典数据

import unittest,os
from ddt import ddt,data,unpack,file_data

'''※字典的读取比较特殊,因为在拆分的时候,形参和实参的key值要一致,否则就报错※'''

'''NO.1单组数据'''
@ddt
class Testwork(unittest.TestCase):

    @data({'name':'lili','age':'16'},{'sex':'female','job':'nurser'})
    # @unpack
    def test_01(self,a):
        print(a)

if __name__ == '__main__':
    unittest.main()
结果:
=>{'name': 'lili', 'age': '16'}
  {'sex': 'female', 'job': 'nurser'}
※以上运行的结果数据,就可以用来作为requests的请求参数~!※

'''NO.2多数据拆分,重点来了'''
@ddt
class Testwork(unittest.TestCase):

    @data({'name':'lili','age':'16'},{'name':'female','age':'nurser'})
    @unpack
    def test_01(self,name,age):
        print(name,age)

if __name__ == '__main__':
    unittest.main()
结果:
=>lili 16
  female nurser
※重点来了:首先结果展示的数据是字典里的value,没有打印key的值;其次@data里的数据key值和def方法里的形参
名称一定要一致,否则,打印的时候,就会报莫名的参数错误,这里就不做展示,爱学习的同学可以尝试一下~!※

4、读取文件数据

import unittest,os
from ddt import ddt,data,unpack,file_data

'''数据格式必须为json,且必须为双引号的键值对形式,如果不是json格式,有列表等其它格式嵌套的话,无论是
否有@unpack,形参和参数数量都要和key值相等'''
@ddt
class testwork(unittest.TestCase):
    testdata=[{'a':'lili','b':12},{'a':'sasa','b':66}]
    @data(*testdata)
    # @unpack
    def test_01(self,value):
        print(value)

    @file_data(os.getcwd()+'/jsonll.txt')
    def test_02(self,value2):
        print(value2)

if __name__ == '__main__':
    unittest.main()
结果:
=>{'a': 'lili', 'b': 12}
  {'a': 'sasa', 'b': 66}
  nick
  male
  29

 总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

 Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

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

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

相关文章

智慧城市环境污染数据采集远程监控方案4G工业路由器应用

随着科技水平的发展和人民生活水平的提高,城市环境污染问题日渐严峻,尤其是在发展迅速的国家,环境污染问题便更为突出。许多发达国家将重污染工厂搬到发展中国家,这导致发展中国家的环境污染日益严重。严重的环境污染也带来了一系…

青海师范大学迎来首个虚拟IP“卓玛”,这是要怎么赋能数字教育?

虚拟数字人作为虚拟世界和现实世界之间的链接 是人们最先了解元宇宙概念的一个表达形式 相较于传统的高校吉祥物IP 在数字教育时代 爆火的虚拟数字人 会给高校带来怎样的新体验、新机遇 虚拟IP对高校的必要性 新潮化、高互动化赋能数字教育 1. 以可视化虚拟IP&#xff0c…

vue计时器

//将秒转化为时分秒 const resultTime ref();const formateSeconds function (endTime) {let secondTime parseInt(endTime); //将传入的秒的值转化为Numberlet min 0; // 初始化分let h 0; // 初始化小时// let result "";if (secondTime > 60) {//如果秒数…

Qtday4作业

思维导图 2.手动完成服务器的实现 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTcpServer> // 服务器类 #include<QTcpSocket> // 客户端类 #include<QDebug> // 信息调试类 #include<QMessageBox> …

Chapter 8: Files | Python for Everybody 讲义笔记_En

文章目录 Python for Everybody课程简介FilesPersistenceOpening filesText files and linesReading filesSearching through a fileLetting the user choose the file nameUsing try, except, and openWriting filesDebuggingGlossary Python for Everybody Exploring Data Us…

利用vscode--sftp,将本地项目/文件上传到远程服务器中详细教程

1、首先在 vscode 中下载 sftp&#xff1a; 2、然后在 vscode 中打开本地将要上传的项目或文件&#xff1a; 3、安装完后&#xff0c;使用快捷键 ctrlshiftP 打开指令窗口&#xff0c;输入 sftp:config &#xff0c;回车&#xff0c;在当前目录中会自动生成 .vscode 文件夹及 s…

如何拥有一个自己的小程序商城?

在今天的移动互联网时代&#xff0c;拥有一个自己的小程序商城已经成为了很多企业和个人的追求。它不仅可以帮助企业提升品牌形象和销售额&#xff0c;还能够提供更好的用户体验和更高的用户粘性。那么&#xff0c;如何拥有自己的小程序商城呢&#xff1f; 第一步&#xff1a;选…

三. 多传感器标定方案(空间同步)--1

前面的内容&#xff1a; 一. 器件选型心得&#xff08;系统设计&#xff09;--1_goldqiu的博客-CSDN博客 一. 器件选型心得&#xff08;系统设计&#xff09;--2_goldqiu的博客-CSDN博客二. 多传感器时间同步方案&#xff08;时序闭环&#xff09;--1 三. 多传感器标定方案&…

Bugs记录

一、/usr/bin/ld: cannot find -l**** 参考&#xff1a;https://www.cnblogs.com/sakuraie/p/13341508.html 在ubuntu上安装软件时&#xff0c;经常出现这样的问题&#xff1a; /usr/bin/ld: cannot find -l**** 例如&#xff1a; /usr/bin/ld: cannot find -lcaffe 安装 需…

netfilter调试记录

今天调试netfilter&#xff0c; 钩子是ip层的post routing出下的钩子 勾出的报文没有二层报文&#xff0c;刚开始搞不清原因&#xff0c;后来才搞明白&#xff0c;原来就是没有二层&#xff0c;只有在桥上勾到的才是有二层报文&#xff0c; skb里有个字段protocol可以表示这个…

Leetcode题目【回文子串+回文子序列】

目录 647. 回文子串5. 最长回文子串516. 最长回文子序列 647. 回文子串 作为一个回文子串&#xff0c;主打的就是连续子串、两边对称。所以递推公式怎么想呢&#xff1f;子问题dp是一个成型的回文子串&#xff0c;当我左右两边加上相同的字符&#xff0c;才会再次构成当前的回…

Higress非K8S安装

Higress非K8S安装 文章目录 Higress非K8S安装环境安装安装higress进入到higress 的目录下修改下nacos的地址启动Higress登录higress管理页面 Higress 是基于阿里内部构建的下一代云原生网关&#xff0c;官网介绍&#xff1a;https://higress.io/zh-cn/docs/overview/what-is-hi…

lombok插件

懒人必备插件 1.安装&#xff1a; 2.在项目中导入lombok的jar包 <dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version></dependency></depe…

flask的配置项

flask的配置项 为了使 Flask 应用程序正常运行&#xff0c;有多种配置选项需要考虑。下面是一些基本的 Flask 配置选项&#xff1a; DEBUG: 这个配置项决定 Flask 是否应该在调试模式下运行。如果这个值被设为 True&#xff0c;Flask 将会提供更详细的错误信息&#xff0c;并…

redis哨兵配置

首先哨兵需要三台服务器因为要选主服务器,一个主服务器两个备服务器.比主从复制要好一点就是不用手工切换主服务器 配置主从服务器需要主从复制为底层 vim /opt/redis-5.0.7/sentinel.conf 编辑哨兵配置文件 主和从的配置都是一样的 先启master&#xff0c;再启slave cd /op…

什么是ROC曲线

ROC曲线&#xff08;Receiver Operating Characteristic Curve&#xff09;&#xff0c;也称为“接受者操作特性曲线”。它最早应用于雷达信号检测的分析&#xff0c;后来广泛应用于心理学和医学领域。 ROC分析是进行临床诊断试验评价最常用的方法。诊断试验是指评价某种疾病诊…

树莓派微型 web 服务器——正式设计报告

树莓派微型web服务器 摘要 这篇博客介绍了一个基于树莓派的轻量级服务器项目。树莓派是一款低成本、小型化的单板计算机&#xff0c;具有较低的功耗和良好的可扩展性。该项目利用树莓派搭建了一个功能简洁但性能稳定的服务器环境&#xff0c;适用于小型应用或个人使用。该轻量…

flask 实现简单的登录系统demo

你提供的代码是一个基本的Flask应用程序&#xff0c;实现了一个简单的登录系统。以下是代码的详细解释&#xff1a; 1. 导入必要的模块&#xff1a;os 用于生成密钥&#xff0c;Flask 用于创建Web应用程序。 2. 创建Flask应用程序的实例&#xff0c;并为会话管理设置一个密钥。…

web-暴力破解密码

Burte Force&#xff08;暴力破解&#xff09;概述 暴力破解”是一攻击具手段&#xff0c;在web攻击中&#xff0c;一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录&#xff0c;直到得到正确的结果。 为了提高效率&…

都说软件测试没前途了?为何每年还会增加40万测试员

最近和一些刚进入软件测试行业的朋友交流&#xff0c;发现了一个有趣的现象&#xff0c;那就是对这个行业很多问题的认识是一致的、片面的&#xff0c;也可以理解为误解。利用你的时间列出他们对这个行业的所有误解&#xff0c;然后结合你多年的工作经验和你交流。毕竟你是从这…