栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

接口-4 python中ddt的用法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/675110.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号