unittest篇7-数据驱动(ddt)

前言

前面unittest篇,我们介绍了一些unittest框架的一些基本使用,包含TestCase编写、TestSuite、用例跳过、TestFixture、
断言详解等等。在测试过程中,我们知道用例都是需要入参的,但实际过程中,我们的函数体是一样的,只有入参不一样。

简单来说->以登录注册接口为例,登录账号入参,密码入参都是需要传入登录接口进行校验的。如果我们登录账号,密码有10种组合,按照传统用例思维,是不是需要写十个方法,并且会有很多重复的代码。那么我们可以通过unittest的ddt模块,进行数据驱动。只需要写一个方法,传递不同的参数即可满足如上的需求;

1、数据驱动

1.1什么是数据驱动

输入M组数据,框架会自动构造出M个测试用例,在测试结果中把每一个测试用例运行的结果单独展示出来。python中最常用,最有效的数据驱动是DDT。

1.2 数据驱动的好处

  • 1、可以大大的减少代码量;
  • 2、提高了代码的可读性和可维护性;
  • 3、一组数据对应一条case,用例自动加载生成;

2、DDT

2.1 安装

pip install ddt

unittest篇7-数据驱动(ddt)_第1张图片

2.2 不使用ddt的情况下

  • 1、下面我使用聚合报告的‘历史上的今天’的api为例;
  • 2、不使用ddt的情况,如果我需要获得1/25日,1/26日,1月27日,1月28日的请求结果,就得copy如下代码,写四次;
  • 3、重复代码我就不写了;
import requests
import json
url = 'http://api.juheapi.com/japi/toh'
data = {
     
    "key":"7486da7f50cd55e6774fb3311b526d8a",
    "v":'1.0',
    "month":1,
    "day":25
}

res = requests.post(url=url,data=data)
print(res.json())

2.3 使用ddt的情况下

import unittest
import ddt
import requests

# 测试数据,可以以列表中嵌套字典的形式,一个字典就是一个入参
Testdata = [
    {
     "month":1,"day":25},
    {
     "month":1,"day":26},
    {
     "month":1,"day":27},
    {
     "month":1,"day":28}
]
# 测试类前面需要加上@ddt.ddt
@ddt.ddt
class TestDttDemo(unittest.TestCase):
    def setUp(self) -> None:
        print('开始')

    def tearDown(self) -> None:
        print('结束')
# 测试方法前面需要加上@ddt.dada()括号里面填入测试数据
    @ddt.data(*Testdata)
    def test_Api(self,testdata):       # testdata代表传入进来的每一条参数
        url = 'http://api.juheapi.com/japi/toh'
        data = {
     
            "key": "7486da7f50cd55e6774fb3311b526d8a",
            "v": '1.0',
            "month": testdata["month"],
            "day": testdata["day"]
        }
        response = requests.post(url=url,data=data)
        print(response.json())

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

unittest篇7-数据驱动(ddt)_第2张图片

2.3 运行结果

unittest篇7-数据驱动(ddt)_第3张图片
里面接口的响应接口打印内容过长,我已经屏蔽掉了该代码

3、总结

  • 1、ddt一般使用在接口自动化或web自动化中;
  • 2、ddt的数据存放,可以在excel中或者yaml,ini配置文件中。可以采取读取excel 或者 读取ini/yaml配置文件 生成列表嵌套字典的格式;
  • 3、使用数据驱动可以大大减少测试代码的行数以及测试代码的可读性;
  • 4、测试数据里面不一定只能写入参数据,也可以写断言。如果每一条case对应的期望值不一样,那么可以将期望断言放至测试数据中;

ps :

1、后续内容继续深入unittest的学习;
2、有什么问题,欢迎大家评论区评论交流!谢谢大家!
3、如果觉得博主这篇博客对大家有用,麻烦评论区留下自己的‘脚印’ !

你可能感兴趣的:(unittest,python)