ddt => data driver test 数据驱动测试
@ddt : 类的装饰器
装饰类,也就是继承自TestCase的类。
@data:直接输入测试数据
装饰测试方法。参数是一系列的值。
@file_data:输入数据文件的绝对路径
装饰测试方法。参数是文件名。文件可以是json 或者 yaml类型。
注意,如果文件以”.yml”或者”.yaml”结尾,ddt会作为yaml类型处理,其他所有文件都会作为json文件处理。
如果文件中是列表,每个列表的值会作为测试用例参数,同时作为测试用例方法名后缀显示。
如果文件中是字典,字典的key会作为测试用例方法的后缀显示,字典的值会作为测试用例参数。
@unpack:分解数据标志
传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上。字典也可以这样处理。
简单的单组元素
# 导入unittest
import unittest
from ddt import ddt,data
@ddt
class Demo(unittest.TestCase):
# 前置条件
def setUp(self) -> None:
print('我要开始执行了哦')
# 后置条件
def tearDown(self) -> None:
print('用例执行结束了!')
# 创建用例
@data('CSDN','软件测试')
def test_testcase1(self,text):
print(text)
if __name__ == '__main__':
unittest.main()
示例1
# 导入unittest
import unittest
from time import sleep
from selenium import webdriver
from ddt import ddt,data
@ddt
class Demo(unittest.TestCase):
# 前置条件
def setUp(self) -> None:
print('我要开始执行了哦')
self.driver=webdriver.Chrome()
# 后置条件
def tearDown(self) -> None:
print('用例执行结束了!')
sleep(3)
self.driver.quit()
# 创建用例
@data('CSDN','软件测试')
def test_testcase1(self,text):
self.driver.get('https://www.baidu.com/')
self.driver.find_element_by_id('kw').send_keys(text)
self.driver.find_element_by_id('su').click()
# def test_testcase2(self):
# self.driver.get('https://www.baidu.com/')
# self.driver.find_element_by_id('kw').send_keys('welink')
# self.driver.find_element_by_id('su').click()
if __name__ == '__main__':
unittest.main()
示例2
npack 分解 tuple元组
# 导入unittest
import unittest
from time import sleep
from selenium import webdriver
from ddt import ddt,data,unpack
@ddt
class Demo(unittest.TestCase):
# 前置条件
def setUp(self) -> None:
print('我要开始执行了哦')
self.driver=webdriver.Chrome()
# 后置条件
def tearDown(self) -> None:
print('用例执行结束了!')
sleep(3)
self.driver.quit()
# 创建用例
@data(('https://www.baidu.com/','CSDN'),('http://www.baidu.com/','软件测试'))# 元组
@unpack# 二次分解元组
def test_testcase1(self,url,text):
self.driver.get(url)
self.driver.find_element_by_id('kw').send_keys(text)
self.driver.find_element_by_id('su').click()
# def test_testcase2(self):
# self.driver.get('https://www.baidu.com/')
# self.driver.find_element_by_id('kw').send_keys('welink')
# self.driver.find_element_by_id('su').click()
if __name__ == '__main__':
unittest.main()
示例3
npack 分解列表(List)
# 导入unittest
import unittest
from time import sleep
from selenium import webdriver
from ddt import ddt,data,unpack
@ddt
class Demo(unittest.TestCase):
# 前置条件
def setUp(self) -> None:
print('我要开始执行了哦')
self.driver=webdriver.Chrome()
# 后置条件
def tearDown(self) -> None:
print('用例执行结束了!')
sleep(3)
self.driver.quit()
# 创建用例
@data(['https://www.baidu.com/','CSDN'],['http://www.baidu.com/','软件测试'])# 列表
@unpack# 二次分解
def test_testcase1(self,url,text):
self.driver.get(url)
self.driver.find_element_by_id('kw').send_keys(text)
self.driver.find_element_by_id('su').click()
# def test_testcase2(self):
# self.driver.get('https://www.baidu.com/')
# self.driver.find_element_by_id('kw').send_keys('welink')
# self.driver.find_element_by_id('su').click()
if __name__ == '__main__':
unittest.main()
示例4
npack 分解字典dict
# 导入unittest
import unittest
from time import sleep
from selenium import webdriver
from ddt import ddt,data,unpack
@ddt
class Demo(unittest.TestCase):
# 前置条件
def setUp(self) -> None:
print('我要开始执行了哦')
self.driver=webdriver.Chrome()
# 后置条件
def tearDown(self) -> None:
print('用例执行结束了!')
sleep(3)
self.driver.quit()
# 创建用例
@data({'url':'https://www.baidu.com/','text':'CSDN'},{'url':'http://www.baidu.com/','text':'软件测试'})# 字典
@unpack# 二次分解
def test_testcase1(self,url,text):
self.driver.get(url)
self.driver.find_element_by_id('kw').send_keys(text)
self.driver.find_element_by_id('su').click()
# def test_testcase2(self):
# self.driver.get('https://www.baidu.com/')
# self.driver.find_element_by_id('kw').send_keys('welink')
# self.driver.find_element_by_id('su').click()
if __name__ == '__main__':
unittest.main()
# 导入unittest
import unittest
from time import sleep
from selenium import webdriver
from ddt import ddt,data,unpack
@ddt
class Demo(unittest.TestCase):
# 前置条件
def setUp(self) -> None:
print('我要开始执行了哦')
self.driver=webdriver.Chrome()
# 后置条件
def tearDown(self) -> None:
print('用例执行结束了!')
sleep(3)
self.driver.quit()
# 创建用例
@data(*[{'url':'https://www.baidu.com/','text':'CSDN'},{'url':'http://www.baidu.com/','text':'软件测试'}])
# 这里加 * 后会将返回数据分为一个个的字典
@unpack# 二次分解元组
def test_testcase1(self,**value):
self.driver.get(value.get("url"))
self.driver.find_element_by_id('kw').send_keys(value.get("text"))
self.driver.find_element_by_id('su').click()
# def test_testcase2(self):
# self.driver.get('https://www.baidu.com/')
# self.driver.find_element_by_id('kw').send_keys('welink')
# self.driver.find_element_by_id('su').click()
if __name__ == '__main__':
unittest.main()
示例5
使用file_data
新建test_list.JSON
[
"软件测试",
"CSDN"
]
# 导入unittest
import unittest
from time import sleep
from selenium import webdriver
from ddt import ddt,data,unpack,file_data
@ddt
class Demo(unittest.TestCase):
# 前置条件
def setUp(self) -> None:
print('我要开始执行了哦')
self.driver=webdriver.Chrome()
# 后置条件
def tearDown(self) -> None:
print('用例执行结束了!')
sleep(3)
self.driver.quit()
# 创建用例
@file_data('test_list.json')
@unpack# 二次分解
def test_testcase1(self,text):
self.driver.get('https://www.baidu.com/')
self.driver.find_element_by_id('kw').send_keys(text)
self.driver.find_element_by_id('su').click()
# def test_testcase2(self):
# self.driver.get('https://www.baidu.com/')
# self.driver.find_element_by_id('kw').send_keys('welink')
# self.driver.find_element_by_id('su').click()
if __name__ == '__main__':
unittest.main()
未完待续