接口-4 python中ddt的用法

接口-4 python中ddt的用法,第1张

接口-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()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5680316.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存