Python数据驱动模块DDT

一.DDT简介

Data Driven Testing,数据驱动,简单来说就是测试数据的参数化

Python数据驱动模块DDT,包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)

通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。

@data(*参数)

拆分参数为多个,运行多次用例

@data(a,b)

那么a和b各运行一次用例

@data([a,d],[c,d])

如果没有@unpack,那么[a,b]当成一个参数传入用例运行

如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递

二、安装DDT

pip install ddt

三、导入模块

import requests,json,unittest
from ddt import ddt,data,unpack

四、案例

@ddt
@data(参数)实验证明:
1、@data可传列表、元祖、字典
2、@data(参数)时,是把参数当做一个变量传入处理的#data是元祖import requests,json,unittest
from ddt import ddt,data,unpack
@ddt
class Test(unittest.TestCase):name=(('橙子','橘子'),('柠檬','柚子'))@data(name)def test(self,name):print(name)
if __name__=='__main__':unittest.main()"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000sOK
(('橙子', '橘子'), ('柠檬', '柚子'))Process finished with exit code 0#data是列表@ddt
class Test(unittest.TestCase):name=[['橙子','橘子'],['柠檬','柚子']]@data(name)def test(self,name):print(name)
if __name__=='__main__':unittest.main()"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
[['橙子', '橘子'], ['柠檬', '柚子']]
.
----------------------------------------------------------------------
Ran 1 test in 0.000sOKProcess finished with exit code 0#data是字典@ddt
class Test(unittest.TestCase):name={'name':'王荔','age':11}@data(name)def test(self,name):print(name)
if __name__=='__main__':unittest.main()"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
.
{'name': '王荔', 'age': 11}
----------------------------------------------------------------------
Ran 1 test in 0.000sOKProcess finished with exit code 0
@ddt
@data(*参数)实验证明:
1、@data可传列表、元祖、字典
2、@data(*参数)时,是把参数拆分成多个迭代次数import requests,json,unittest
from ddt import ddt,data,unpack
@ddt
class Test(unittest.TestCase):name=(('橙子','橘子'),('柠檬','柚子'))@data(*name)def test(self,name):print(name)
if __name__=='__main__':unittest.main()"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
..
('橙子', '橘子')
----------------------------------------------------------------------
('柠檬', '柚子')
Ran 2 tests in 0.000sOKProcess finished with exit code 0@ddt
class Test(unittest.TestCase):name=[['橙子','橘子'],['柠檬','柚子']]@data(*name)def test(self,name):print(name)
if __name__=='__main__':unittest.main()"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
..
['橙子', '橘子']
----------------------------------------------------------------------
['柠檬', '柚子']
Ran 2 tests in 0.000sOKProcess finished with exit code 0@ddt
class Test(unittest.TestCase):name=[{'name':'王荔','age':11},{'name':'王荔','age':11}]@data(*name)def test(self,name):print(name)
if __name__=='__main__':unittest.main()"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
..
{'age': 11, 'name': '王荔'}
{'age': 11, 'name': '王荔'}
----------------------------------------------------------------------
Ran 2 tests in 0.001sOKProcess finished with exit code 0
@ddt
@data(*参数)
@unpack实验证明:
1、@data可传列表、元祖、字典
2、@data(*参数)时,是把参数拆分成多个迭代次数
3、@unpack 是把参数拆分成多个参数传入import requests,json,unittest
from ddt import ddt,data,unpack
@ddt
class Test(unittest.TestCase):name=(('橙子','橘子'),('柠檬','柚子'))@data(*name)@unpackdef test(self,name1,name2):print(name1,name2)
if __name__=='__main__':unittest.main()"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
橙子 橘子
柠檬 柚子
..
----------------------------------------------------------------------
Ran 2 tests in 0.000sOKProcess finished with exit code 0@ddt
class Test(unittest.TestCase):name=[['橙子','橘子'],['柠檬','柚子']]@data(*name)@unpackdef test(self,name1,name2):print(name1,name2)
if __name__=='__main__':unittest.main()"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/Test/test.py
..
橙子 橘子
----------------------------------------------------------------------
Ran 2 tests in 0.001sOK
柠檬 柚子Process finished with exit code 0

 

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

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

相关文章

服务器Ubuntu Import Error:cannot import name main

利用Xftp5进入到usr/bin 目录下,找到pip3. 把它拷贝到桌面上,用pycharm打开,进行如下修改: 把下面的三行 from pip import main if __name__ __main__:sys.exit(main())替换为: from pip import __main__ if __name…

【Linux】linux服务器下包管理器

通常Linux应用软件的安装包有三种: 1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具tar打包的。 2) rpm包,如software-1.2.3-1.i386.rpm。它是Redhat Linux提供的一种包封装格式。 3) dpk…

Python脚本做接口测试,抛弃接口测试工具是否可行?(二)

学习是为了更好的应用,之前做接口测试一直用的postman、fiddler,感觉用工具还是有些局限性,于是想着把学到的python灵活运用到接口测试中,于是就有了以下案例,思考着想用unittest做个简单的接口测试脚本,可…

阿里云服务器部署django项目

ubuntu自带了2.7。想要装3.5并设置为默认python版本。 安装python3.5 sudo add-apt-repository ppa:fkrull/deadsnakes sudo apt-get update sudo apt-get install python3.5 python --version sudo apt-get install python3-pip #装pip3设置python3为默认版本 直接执行这两个…

【Linux】ls命令查看linux目录下的内容

ls 命令是Linux下最常用的命令之一,用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。 本文将介绍其基本的用法和一些典型的用例 Usage: ls [OPTION]... [FILE]... 不输入参数(默认将文件名或目录名称开头为"."的视为隐藏…

ubuntu防火墙操作

教你如何开启/关闭ubuntu防火墙 目录 [隐藏] 1 安装方法2 使用方法3 推荐设置4 详细使用说明安装方法 sudo apt-get install ufw当然,这是有图形界面的(比较简陋),在新立得里搜索gufw试试…… 使用方法 1 启用 sudo ufw enablesudo ufw default deny …

【Python】hashlib模块实现MD5加密

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被计算机安全领域广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value), 用以…

Python中json和pickle模快dumps()、loads()、dump()、load()序列化和反序列化实例

在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象。在python的标准库中,专门提供了json库与pickle库来处理这部分。 用于序列化的两…

计算机编码发展历史和编码方式

编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码简称编码。 用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。 编码在电子计算机、电视、遥控和通讯等方面广泛使用。 解码&#x…

解决Error: That port is already in use.

ubuntu系统下,运行一个django项目,即输入python manage.py runserver后,可能出现 Error: That port is already in use.的错误。 即端口号已经被占用,说明servr已经在运行了(也有可能在后台运行) 那么找到该进程,kill掉即可. 或者最简单的…

Jmeter+ForEach控制器+BeanShell取样器+BeanShell PostProcessor爬取网站信息储存csv

1、正则提取器ForEach控制器BeanShell PostProcessorBeanShell 取样器,爬取网站信息并写入到csv中 2、访问网站设置 3、正则提取设置,匹配数字-1代表提取所有符合条件的信息 4、ForEach控制器设置迭代每次提取出来的信息 5、BeanShell PostProcessor设置…

【Python】python3编码方式encode介绍

上一篇文章介绍了计算机编码发展历史和编码方式,现在我们聚焦到python语言中,在最新的Python3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言。例如: print(我喜欢 computer.encode(u…

telnet用法 测试端口号是否可以使用

方法 1 首先打开控制面板 2 点击程序 3 点击程序与功能 4 点击左边启用或关闭windows功能 5 在telnet客户端打上勾 点击确定 6 winr打开运行 输入cmd 7 打开后输入telnet ip 端口号 如果出来其他窗口则说明这个端口可用。若出现超时,说明这个端口不可用 前提…

Python操作读写txt文件

比较常用的文件读写选项: r读写模式 w写读模式 a追加写模式 a追加读模式,因为文件值在最后,所以需要先seek(0)到文件开头,然后再读 ‘r’以读的方式打开,只能读文件,若文件不存…

【Python】PyCryptodome模块实现多种加密算法

PyCryptodome是python一个强大的加密算法库,可以实现常见的单向加密、对称加密、非对称加密、非对称加密算法签名和流加密算法。 直接pip安装即可:pip install pycryptodome 官网地址:https://pypi.org/project/pycryptodome/ 一、base64编码…

阿里云 Ubuntu上的mysql运行sql文件来创建表

1、上传sql文件到指定目录 2、登录数据库 mysql -u root -p 3、查看数据库 show databases; 4、创建数据库 create database wlh; 5、对新创建的数据库操作 use wlh; 6、导入sql文件 7、查看数据库中表格 若有你数据库中的表格则导入成功 8、退出数据库操作 或者用quit; …

linux Ubuntu安装ftp并将本地文件上传到云服务器

确认是否已经安装ftp pgrep vsftpd无结果如下图: 2、执行安装 3、查看ftp是否安装成功 systemctl status vsftpd.service 4、 (1)新建"/home/uftp"目录作为用户主目录 打开"终端窗口",输入"sudo mkd…

【Python】PyCryptodome模块中5种AES加密模式介绍

分组密码有五种工作体制: 1.电码本模式(Electronic Codebook Book (ECB)); 2.密码分组链接模式(Cipher Block Chaining (CBC)); 3.计算器模式(Counter (CTR))&#xff1b…

Pyhton随机生成测试数据模块faker

1.什么是Faker Faker是一个Python包,开源的GITHUB项目,主要用来创建伪数据,使用Faker包,无需再手动生成或者手写随机数来生成数据,只需要调用Faker提供的方法,即可完成数据的生成。 2.安装Faker pip insta…

linux常见操作命令

1、创建文件夹test : mkdir test 注:批量创建为mkdir -p file1/log 在此目录下创建file1/log 2、创建文件test touch test 3、删除文件test rm -f test 4、删除文件夹test(包括文件夹汇总的文件也会一起删除) rm -rf test 注:一般用…