ddt数据驱动总结

ddt: 数据驱动思想:data driven testing
data driven testing 数据驱动思想。

现在所说的是一个叫做 ddt 的 python 库
ddt 库是和 unittest 搭配起来使用的, 是 unittest 的一个插件。
python / unittest / ddt 自动化测试框架
格式如下:

@ddt.ddt   没有括号
class TestDemo:

   @ddt.data()   右括号
    def test_demo(self):
        pass

什么的项目适合ddt
举个例子来说明:例如需要设计登录的测试用例,对于登录来说,登录的前置条件不变,变化的是用户名 和密码(也就是仅仅测试数据的变化) 测试数据(test_data)可以用excel来写,也可以用csv来写
一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合,所以在测试一个接口时,通常会编写多条 case,而这些除了传参不同外,并没有什么区别。这个时候就可以利用 ddt 来管理测试数据,提高代码复用率。

@ddt.ddt
class TestLogin(unittest.TestCase):
	    def setUp(self):
	    	print"######前置条件#######"def tearDown(self):
        	print("测试用例执行完毕。#####后置条件####")
        	
        @ddt.data(*test_data)
        def test_login(self, data_info):
        pass

实例代码如下:

import unittest
import ddt

from class_19_excel.common.excel_handler import ExcelHandler
from class_19_excel.common.requests_handler import RequestsHandler

#测试数据
test_data = [
        {"url": "http://120.78.128.25:8766/futureloan/member/login",
         "method": "post",
         "headers": {"X-Lemonban-Media-Type": "lemonban.v2"},
         "data": {"mobile_phone": "18111111111", "pwd": "12345678"},
         "expected": {"msg":"", "code":""}},

        {"url": "http://120.78.128.25:8766/futureloan/member/login",
         "method": "post",
         "headers": {"X-Lemonban-Media-Type": "lemonban.v2"},
         "data": {"mobile_phone": "1811", "pwd": "123"},
         "expected": "hello world"},
    ]
#测试数据放在excel中,调用excel_handler.py(处理excel的封装的模块)
# test_data = ExcelHandler(r"d:\cases.xlsx").read('Sheet1')
# print(test_data)


@ddt.ddt
class TestLogin(unittest.TestCase):

    # def setUp(self) -> None:

    # 前置条件当中
    # 每一个测试用例方法执行之前都会运行的代码
    def setUp(self):
        pass

    def tearDown(self):
        print("测试用例执行完毕。")

    @ddt.data(*test_data)
    # 将 *test_data 当中的一组测试数据 赋值到 data_info 这个参数
    def test_login(self, data_info):
        res = RequestsHandler().visit(data_info['url'],
                                      data_info['method'], 
                                      json=data_info['data'],
                                      headers=data_info['headers'],)                    


        self.assertEqual(res, data_info['expected'])


if __name__ == '__main__':
    unittest.main()

代码如下:

import ddt
import unittest
@ddt.ddt
class DataTest(unittest.TestCase):
    def setUp(self):
        print("这个是前置")
    def tearDown(self):
        print("这个是后置")
        #1,2,   3,4 , 5,6
    @ddt.data(
        [1,2],
        [3,4],
        [5,6]
    )
    @ddt.unpack
    def test_add(self,a,b):
        print(a+b)
if __name__ == '__main__':
    unittest.main()

在这里插入图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值