数据驱动ddt的简单使用

什么是数据驱动

当我们的测试脚本都是重复的,只有输入的数据变化时,每次更换一个数据执行,都要写一个测试脚本,这样会使我们的代码显得特别乱,特别冗余。
如果我们使用数据驱动,那么只用写一个脚本,在脚本执行的时候,他会自己不断更新数据。简单理解为:数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。
数据驱动ddt可以实现测试数据与测试脚本的分离,通过ddt来将测试数据加载到脚本中。采用数据驱动设计模式使一组数据对应一个测试用例,用例自动加载生成。

unittest测试框架下面没有数据驱动,所以在使用unittest框架的时候,还要使用数据驱动,就必须先下载安装ddt。
在cmd中先检查之前有没有下载过数据驱动:
pip show ddt
当显示show 不是内部命令的时候,可以使用pip.exe show ddt(可能需要升级一下pip的版本)
当显示没有安装过,直接使用下面的命令进行安装
pip install ddt

测试用例,必须以test_开头,在执行测试脚本的时候,会自动执行,不以test_开头的脚本必须要调用才会执行。

使用ddt时,必须引入ddt的包
from ddt import ddt,file_data,unpack,data
增加ddt数据的3种方式:

  1. @data(“王一博”,“Lisa”,“阿里巴巴”)
  2. @file_data(‘test_baidu_data.json’) test_baidu_data.json数据传入进去,可以一次性添加许多个不同的数据
  3. @data([“林俊杰”,“林俊杰_百度搜索”],[“王俊凯”,“王俊凯_百度搜索”])
    @unpack —传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上。

为了创建数据驱动测试,需要在测试类上使用 @ddt 装饰符,在测试方法上使用 @data 装饰符。@data 装饰符可以把参数当做测试数据,参数可以是单个值,列表,元组,字典,对于列表和元组,需要使用 @unpack 装饰符把元组和列表解析成多个参数,让其测试数据与测试预期结果之间一一对应。

from selenium import webdriver
import unittest
import time
import os,sys
from selenium.common.exceptions import NoAlertPresentException
from ddt import ddt,file_data,unpack,data
@ddt
class testCase1(unittest.TestCase):
    def setUp(self) :
        #初始化
        self.driver=webdriver.Chrome()
        self.url="https://www.baidu.com/"
        self.driver.get(self.url)
        self.driver.maximize_window()
        time.sleep(3)
    def tearDown(self):
        #关闭浏览器
        self.driver.quit()
   #方法以test_开头都会默认去执行
    #数据驱动ddt测试用例  1  数据和方法放在一块,混乱
    # @data("王一博","Lisa","阿里巴巴")
    
    #文件路径放在和测试脚本路径同级的文件夹下面
    # @file_data('test_baidu_data.json')
    #判断把内容搜索出来之后,和预期是否匹配
    @data(["林俊杰","林俊杰_百度搜索"],["王俊凯","王俊凯_百度搜索"])
    @unpack
    #unpack的作用,每次传入两个以上的参数时将元素一一对应
    def test_baidu1(self,value1,value2):
        driver=self.driver
        driver.find_element_by_id("kw").send_keys(value1)
        driver.find_element_by_id("su").click()
        time.sleep(6)
        self.assertEqual(driver.title,value2,msg="搜索失败!!!")
        time.sleep(6)
    if __name__ == '__main__':
        #参数verbosity=0表示打印出每一个测试用例的执行情况
        unittest.main(verbosity=2)

上一篇:Python接口自动化测试框架(实战篇)-- 数据驱动DDT


下一篇:Python 数据驱动工具:DDT