文章目录
一、 数据驱动模式—DDT
1、核心原理
程序不变,数据变
即:多个测试用例的执行过程和操作一样的,只不过测试使用的数据和验证结果有所不同,数据驱动就是把测试数据与测试脚本进行分离,把数据放到配置文件中
2、适用场景
测试过程比较简单,但是需要使用大量的测试数据进行输入验证,适合个人测试
3、ddt安装
ddt是python的第三方库,安装用命令:pip install ddt 即可
4、ddt模块
ddt模块包含类的装饰器ddt和两个方法装饰器data
- ddt.ddt:装饰类,也就是继承TestCase的类
- ddt.data:装饰测试方法,参数是一系列的值
- ddt.file_data:装饰测试方法,参数是文件名。文件可以是json或者yaml类型
① 如果文件是以“.yml”或者".yaml"结尾,ddt会作为yaml类型处理,其他文件都会作为json文件处理
② 如果文件是列表,列表的值会作为测试用例参数,同时,会作为测试用例方法名后缀显示
③ 如果文件是字典,字典的key会作为测试用例方法的后缀显示,字典的value会作为测试用例参数 - ddt.unpack:传递的是复杂的数据结构时使用,比如使用列表或者元组,添加unpack后,ddt会自动把元组或者列表对应到多个参数上
5、案例演示
方式1:参数直接放在执行脚本文件里
# 文件名:Internal_parameters_ddt.py
import unittest
import ddt
from selenium import webdriver
import time
@ddt.ddt
class Praddt(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
def tearDown(self):
self.driver.quit()
@ddt.data(
["数据驱动测试","ddt"],
["关键字驱动测试","CSDN博客"],
["混合驱动测试","博客园"]
)
@ddt.unpack
def test_ddt(self,search_word,expect_word):
self.driver.get('http://www.baidu.com')
self.driver.find_element_by_id('kw').send_keys(search_word)
self.driver.find_element_by_id('su').click()
time.sleep(2)
assert expect_word in self.driver.page_source
if __name__ == '__main__':
unittest.main()
方式2:参数放在执行脚本外部数据文件里
外部数据文件data.txt里面的数据如下:
数据驱动测试||ddt
关键字驱动测试||CSDN博客
混合驱动测试||博客园
执行脚本文件代码如下:
# 文件名:External_parameters_ddt.py
from selenium import webdriver
import time
import sys
# 读取data.txt文件
def get_test_datas(file_path):
with open(file_path,encoding='utf-8') as fp:
test_datas = fp.readlines()
return test_datas
# 获取数据文件中的search_word和expect_word
test_datas = get_test_datas('data.txt')
if len(test_datas) == 0:
print('测试数据文件数据为空,请检查后再测试')
sys.exit()
# 每获取一组数据后,都执行下面的测试步骤
for i in range(len(test_datas)):
search_word,expect_word = test_datas[i].strip().split('||') # 去掉列表数据中的“\n”、“||”
try:
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys(search_word)
driver.find_element_by_id('su').click()
time.sleep(2