首先安装ddt模块,命令:pip install ddt

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

@data(a,b)

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

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

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

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

一:

 1 import unittest
2 from ddt import ddt,data,unpack
3 from time import sleep
4 from selenium import webdriver
5 @ddt
6 class MyTesting(unittest.TestCase):
7 def setUp(self):
8 self.dr = webdriver.Chrome()
9 self.dr.get('http://www.baidu.com')
10
11 @data(['python','python_百度搜索'],['java','java_百度搜索'])
12 @unpack
13 def test_baidu(self,a,b):
14 self.dr.find_element_by_id('kw').send_keys(a)
15 self.dr.find_element_by_id('su').click()
16 sleep(2)
17 c = self.dr.title
18 self.assertEqual(b,c)
19
20
21 def tearDown(self):
22 self.dr.close()
23 if __name__ == '__main__':
24 unittest.main(verbosity=2)

传入字典参数

import unittest
from ddt import ddt,data,unpack
from time import sleep
from selenium import webdriver
@ddt
class MyTesting(unittest.TestCase):
def setUp(self):
self.dr = webdriver.Chrome()
self.dr.get('http://www.baidu.com') @data({'a':'python','b':'python_百度搜索'},{'a':'java','b':'java_百度搜索'})
@unpack
def test_baidu(self,a,b):
self.dr.find_element_by_id('kw').send_keys(a)
self.dr.find_element_by_id('su').click()
sleep(2)
c = self.dr.title
self.assertEqual(b,c) def tearDown(self):
self.dr.close()
if __name__ == '__main__':
unittest.main()

二:传入JSON文件

import unittest
from ddt import ddt,data,unpack,file_data
from time import sleep
from selenium import webdriver
@ddt
class MyTesting(unittest.TestCase):
def setUp(self):
self.dr = webdriver.Chrome()
self.dr.get('http://www.baidu.com') @file_data('test.json')
@unpack
def test_baidu(self,a,b):
self.dr.find_element_by_id('kw').send_keys(a)
self.dr.find_element_by_id('su').click()
sleep(2)
c = self.dr.title
self.assertEqual(b,c) def tearDown(self):
self.dr.close()
if __name__ == '__main__':
unittest.main()

test.json文件内容如下,和上面代码同一路径

{
"positive_integer_range": {
"a": "python",
"b": "python_百度搜索"
},
"negative_integer_range": {
"a": "java",
"b": "java_百度搜索"
}
}

读取json文件的值

import unittest
from ddt import ddt,data,unpack,file_data
from time import sleep
from selenium import webdriver
@ddt
class MyTesting(unittest.TestCase):
def setUp(self):
self.dr = webdriver.Chrome()
self.dr.get('http://www.baidu.com') @file_data('test.json')
@unpack
def test_baidu(self,value):
self.dr.find_element_by_id('kw').send_keys(value)
self.dr.find_element_by_id('su').click()
# sleep(2)
# c = self.dr.title
# self.assertEqual(b,c) def tearDown(self):
self.dr.close()
if __name__ == '__main__':
unittest.main()

json文件如下:

{
"unsorted_list": "python",
"sorted_list": "java"
}

或者json文件改成一下:

["python","java"]

python ddt实现数据驱动的更多相关文章

  1. python ddt 实现数据驱动一

    ddt 是第三方模块,需安装, pip install ddt DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据) 通常情况下,data中的数据按照一个参数传递给测试用例,如果da ...

  2. python ddt 实现数据驱动

    ddt 是第三方模块,需安装, pip install ddt DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据) 通常情况下,data中的数据按照一个参数传递给测试用例,如果da ...

  3. Python Selenium 之数据驱动测试

    数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据.可以将测 ...

  4. python DDT读取excel测试数据

    转自:http://www.cnblogs.com/nuonuozhou/p/8645129.html ddt   结合单元测试一起用 ddt(data.driven.test):数据驱动测试 由外部 ...

  5. Python Selenium 之数据驱动测试的实现

    数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据.可以将测 ...

  6. python ddt数据驱动(简化重复代码)

    在接口自动化测试中,往往一个接口的用例需要考虑 正确的.错误的.异常的.边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例.如果测试接口很多,不但需要写大量的代码,测试数据和代码柔合在一起, ...

  7. Selenium2+python自动化之数据驱动(ddt)

    环境准备 1.安装ddt模块,打开cmd输入pip install ddt在线安装 数据驱动原理 1.测试数据为多个字典的list类型 2.测试类前加修饰@ddt.ddt 3.case前加修饰@ddt ...

  8. python接口自动化测试 - 数据驱动DDT模块的简单使用

    DDT简单介绍 名称:Data-Driven Tests,数据驱动测试 作用:由外部数据集合来驱动测试用例的执行 核心的思想:数据和测试代码分离 应用场景:一组外部数据来执行相同的操作 优点:当测试数 ...

  9. python接口自动化:requests+ddt+htmltestrunner数据驱动框架

    该框架分为四个包:xc_datas.xc_driven.xc_report.xc_tools. xc_datas:存放数据,xc_driven:存放执行程序,xc_report:存放生成的报告,xc_ ...

随机推荐

  1. linux修改进程名

    一.linux中的进程名    linux中有很多查看/操作进程的命令.    这些命令的参数或显示的结果,有的是真实的进程名(top/pstree/pgrep/kill/killall),有的是进程 ...

  2. [LuoguP2161[ [SHOI2009]会场预约 (splay)

    题面 传送门:https://www.luogu.org/problemnew/show/P2161 Solution splay 的确有线段树/树状数组的做法,但我做的时候脑残没想到 我们可以考虑写 ...

  3. 利用VS2017制作软件安装包与卸载程序

    本博客讲述如何利用VS2017制作安装包以及相应的卸载程序,并解决过程中可能遇到的问题 一.制作安装程序 1.打开VS2017,新建项目,选择如下图所示程序: 新建成功后,会出现如下图所示目录: 2. ...

  4. 11张图和源码带你解析Spring Bean的生命周期,建议收藏~!

    在网上已经有跟多Bean的生命周期的博客,但是很多都是基于比较老的版本了,最近把整个流程画成了一个流程图.待会儿使用流程图,说明以及代码的形式来说明整个声明周期的流程.注意因为代码比较多,这里的流程图 ...

  5. Maven魔法堂:安装Oracle JDBC Driver依赖的那些坑

    前言 由于Oracle并没有向公开Maven仓库提供任何Oracle JDBC Driver的Jar包,因此我们无法像MySQL.SQLite等那么轻松直接通过Maven加载依赖. 而手动下载Orac ...

  6. C3P0和Druid数据库连接池

    目录 C3P0连接池 步骤: C3P0初始化: 创建C3P0工具类: 创建C3P0测试类: Druid连接池(由阿里巴巴提供的数据库连接池实现技术) 步骤: Druid初始化: 创建Druid工具类: ...

  7. netstat与ss

    netstat -t:tcp协议的连接 -u:udp协议的链接 -l:监听状态的连接 -a:所有状态的连接 -p:连接相关的进程 -n:数字格式显示 -r:显示路由表,类似于route或ip rout ...

  8. linux中配置yum文件

    yum简介:yum的宗旨是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决. yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是 ...

  9. .NET 5 中的隐藏特性

    前言 双十一当天 .NET 5 正式发布带来了很多的新特性和改进,个人觉得非常香,并且花了 10 分钟时间就把自己的 4 个 .NET Core 3.1 的项目升级到了 .NET 5,堪称无痛. 但是 ...

  10. SpringBoot整合JWT实战详解

    jwt 介绍就不多说了,下面通过代码演示开发过程中jwt 的使用. (1)在pom.xml中引入对应的jar <dependency> <groupId>io.jsonwebt ...