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

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

@data(a,b)

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

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

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

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

一:

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

传入字典参数

  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({'a':'python','b':'python_百度搜索'},{'a':'java','b':'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. def tearDown(self):
  21. self.dr.close()
  22. if __name__ == '__main__':
  23. unittest.main()

二:传入JSON文件

  1. import unittest
  2. from ddt import ddt,data,unpack,file_data
  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. @file_data('test.json')
  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. def tearDown(self):
  21. self.dr.close()
  22. if __name__ == '__main__':
  23. unittest.main()

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

  1. {
  2. "positive_integer_range": {
  3. "a": "python",
  4. "b": "python_百度搜索"
  5. },
  6. "negative_integer_range": {
  7. "a": "java",
  8. "b": "java_百度搜索"
  9. }
  10. }

读取json文件的值

  1. import unittest
  2. from ddt import ddt,data,unpack,file_data
  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. @file_data('test.json')
  12. @unpack
  13. def test_baidu(self,value):
  14. self.dr.find_element_by_id('kw').send_keys(value)
  15. self.dr.find_element_by_id('su').click()
  16. # sleep(2)
  17. # c = self.dr.title
  18. # self.assertEqual(b,c)
  19.  
  20. def tearDown(self):
  21. self.dr.close()
  22. if __name__ == '__main__':
  23. unittest.main()

json文件如下:

  1. {
  2. "unsorted_list": "python",
  3. "sorted_list": "java"
  4. }

或者json文件改成一下:

  1. ["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. vscode+WSL+Debug+Cmake+OpenGL

    网页版:https://www.cnblogs.com/Jay-CFD/p/12584334.html WSL安装 参考:https://www.cnblogs.com/Jay-CFD/p/60672 ...

  2. NB-IOT关键技术分析

    NB-IOT(NarrowBand Internet of Things,窄带IoT)是一种基于蜂窝的窄带物联网技术,支持低功耗设备在广域网的蜂窝数据连接.NB-IOT在物联网应用广泛,许多领域都充分 ...

  3. Java学习的第四十天

    1.例4.1在其他函数中调用主函数 package bgio; public class cjava { public static void main(String[] args) { prints ...

  4. Java学习的第二十九天

    1. 如果类中的某个属性不希望被序列化则需要transient关键字 序列化一组对象 2.无问题 3.明天学习打印流

  5. re模块,判断某行/某字符是否存在

    import re ##判断行是否存在def get_need_line(): ## 获取有用信息行 with open('task.log',mode="r") as f: fo ...

  6. pandas模块常用函数解析之Series(详解)

    pandas模块常用函数解析之Series 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 打开浏览器输入网 ...

  7. 水题挑战2 :NOIP提高组 2011 聪明的质监员

    小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从\(1\) 到 \(n\) 逐一编号,每个矿石都有自己的重量 \(w_i\) 以及价值 \(v_i\) .检验矿 ...

  8. numpy数组

    一.数组创建 基础数组 1.array() array函数可以创建一维或多维数 一维数组 1.arange(起始值,终值,步长) 2.linspace(起始值,终值,元素个数) --创建等步长的数组 ...

  9. C++函数四( 具有默认参数值的函数)

    在C++语言中,可以设置函数形参的默认值,在调用函数时,若明确给出了实参的值,则使用相应实参的值;若没有给出相应实参的值,则使用默认的值.这将为函数调用带来方便和灵活. [示例] #include&l ...

  10. Java项目——嗖嗖移动业务大厅

    嗖嗖移动业务大厅包类(如下图): SosoMgr: 1 package cn.biz; 2 3 import java.util.Scanner; 4 5 import cn.common.Commo ...