接口-4 python中ddt的用法

一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合。所以在测试一个接口时通常会编写多条case,而这些case除了传参不同外,其实并没什么区别。
这个时候就可以利用ddt来管理测试数据,提高代码复用率。
※但要注意:正向和逆向的要分开写※

安装:pip install ddt
四种模式:第一步引入的装饰器@ddt;导入数据的@data;拆分数据的@unpack;导入外部数据的@file_data

1读取元组的数据

# 一定要和单元框架一起使用
import unittest, os
from ddt import ddt, data, unpack, file_data
"""单组元组测试"""
@ddt
class TestWork(unittest.TestCase):

    @data(1, 2, 3)
    def test1(self, value):
        # value来接收data的数据
        print(value)


if __name__ == '__main__':
    unittest.main()
"""
结果:
1
2
3
"""


"""2多组未分解元素"""
@ddt
class TestWork(unittest.TestCase):

    @data((1, 2, 3), (4, 5, 6))
    def test2(self, value):
        print(value)


if __name__ == '__main__':
    unittest.main()
"""
结果:
(1, 2, 3)
(4, 5, 6)
"""

"""3多组分解元素"""
@ddt
class TestWork(unittest.TestCase):

    @data((1, 2, 3), (4, 5, 6))
    @unpack
    def test3(self, value1, value2, value3):
        print(value1, value2, value3)


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

"""
结果:
1 2 3
4 5 6
"""

2读取列表的数据

import unittest
from ddt import ddt,data,unpack
#
# """列表的拆分与不拆分"""
@ddt
class TestWork(unittest.TestCase):
    @data([{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}])
    def test1(self, value):
        print(value)


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

"""
结果:
[{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}]
"""

@ddt
class TestWork(unittest.TestCase):
    @data([{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}])
    @unpack  ⭐
    def test1(self, value1, value2):
        print(value1,value2)


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

"""
结果:
{'name': 'lili', 'age': 12} {'sex': 'male', 'job': 'teacher'}
"""

3读取字典数据

import unittest
from ddt import ddt,data,unpack
#
# """⭐字典的读取比较特殊,因为在拆分的时候,形参和实参的key值要一致,否则就会报错⭐"""
@ddt
class TestWork(unittest.TestCase):
    # 读取单组数据
    @data({'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'})
    def test1(self, value):
        print(value)


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

"""
结果:
[{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}]
"""
"""以上运行的结果数据,就可以作为request的请求参数!"""

@ddt
class TestWork(unittest.TestCase):
    # ⭐多数据拆分,重点来了
    # ⭐重点来了:首先结果展示的数据是字典里的value,没有打印key的值;其次 @data里的数据key值和def方法里的形参
    # 名称一定要一致,否则,打印的时候,就会报莫名的参数错误,
    @data({'name': 'lili', 'age': '16'}, {'name': 'female', 'age': 'nurser'})
    @unpack
    def test1(self, name, age):
        print(name, age)


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

"""
结果:
lili 16
female nurser
"""

4读取文件数据

import unittest,os
from ddt import ddt,data,unpack,file_data

'''数据格式必须为json,且必须为双引号的键值对形式,如果不是json格式,有列表等其它格式嵌套的话,无论是
否有@unpack,形参和参数数量都要和key值相等'''
@ddt
class testwork(unittest.TestCase):
    testdata=[{'a': 'lili', 'b': 12}, {'a': 'sasa', 'b': 66}]
    @data(*testdata)
    def test_01(self, value):
        print(value)

    @file_data(os.getcwd()+"/json11.txt")
    def test2(self, value1):
        print(value1)


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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值