python ddt实现数据驱动

首先安装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"]

 


__EOF__

本文作者Harry
本文链接https://www.cnblogs.com/harry66/p/12690694.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Harry_666  阅读(374)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示