• 接口测试(Python)之DDT


    本文是学习了小二哥很二的简书,链接地址:https://www.jianshu.com/p/78998bcf3e05

    一、安装ddt模块

    1 pip install ddt

    ddt有四种模式:引入装饰器@ddt;导入数据@data;拆分数据@unpack;导入外部数据@file_data

    二、参数化实现的方式

    1、读取元组数据

     1 #一定要和单元测试框架一起用
     2 import unittest,os
     3 from ddt import ddt,data,unpack,file_data
     4 
     5 '''NO.1单组元素'''
     6 @ddt
     7 class Testwork(unittest.TestCase):
     8     
     9     @data(1,2,3)
    10     def test_01(self,value):      #value用来接收data的数据
    11         print(value)
    12 if __name__ == '__main__':
    13     unittest.main()
    14 结果:
    15 =>1
    16   2
    17   3
    18 
    19 '''NO.2多组未分解元素'''
    20 @ddt
    21 class Testwork(unittest.TestCase):
    22 
    23     @data((1,2,3),(4,5,6))
    24     def test_01(self,value):       
    25         print(value)
    26 
    27 if __name__ == '__main__':
    28     unittest.main()
    29 结果:
    30 =>(1, 2, 3)
    31   (4, 5, 6)
    32 
    33 '''NO.3多组分解元素'''
    34 @ddt
    35 class Testwork(unittest.TestCase):
    36 
    37     @data((1,2,3),(4,5,6))
    38     @unpack          #拆分数据
    39     def test_01(self,value1,value2,value3):    #每组数据有3个值,所以设置3个形参
    40         print(value)
    41 
    42 if __name__ == '__main__':
    43     unittest.main()
    44 结果:
    45 =>1 2 3
    46   4 5 6

    2、读取列表数据

     1 import unittest,os
     2 from ddt import ddt,data,unpack,file_data
     3 
     4 '''NO.1多组元素未分解'''
     5 @ddt
     6 class Testwork(unittest.TestCase):
     7 
     8     @data([{'name':'lili','age':12},{'sex':'male','job':'teacher'}])
     9     def test_01(self,a):
    10         print(a)
    11 
    12 if __name__ == '__main__':
    13     unittest.main()
    14 结果:
    15 =>[{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}]
    16 ※上面结果可以看出:无法运用到requests数据请求中,所以不是很实用※
    17 
    18 
    19 '''NO.2多组元素分解'''
    20 @ddt
    21 class Testwork(unittest.TestCase):
    22 
    23     @data([{'name':'lili','age':12},{'sex':'male','job':'teacher'}])
    24     @unpack
    25     def test_01(self,a,b):
    26         print(a,b)
    27 
    28 if __name__ == '__main__':
    29     unittest.main()
    30 结果:
    31 =>{'name': 'lili', 'age': 12} {'sex': 'male', 'job': 'teacher'}
    32 ※拆分后的运行结果,不带有[ ],拆分是将列表中的2个字典拆分,所以有2个数据※

    3、读取字典数据

     1 import unittest,os
     2 from ddt import ddt,data,unpack,file_data
     3 
     4 '''※字典的读取比较特殊,因为在拆分的时候,形参和实参的key值要一致,否则就报错※'''
     5 
     6 '''NO.1单组数据未分解'''
     7 @ddt
     8 class Testwork(unittest.TestCase):
     9 
    10     @data({'name':'lili','age':'16'},{'sex':'female','job':'nurser'})
    11     def test_01(self,a):
    12         print(a)
    13 
    14 if __name__ == '__main__':
    15     unittest.main()
    16 结果:
    17 =>{'name': 'lili', 'age': '16'}
    18   {'sex': 'female', 'job': 'nurser'}
    19 ※以上运行的结果数据,就可以用来作为requests的请求参数~!※
    20 
    21 
    22 '''NO.2多数据拆分,重点来了'''
    23 @ddt
    24 class Testwork(unittest.TestCase):
    25 
    26     @data({'name':'lili','age':'16'},{'name':'female','age':'nurser'})
    27     @unpack
    28     def test_01(self,name,age):
    29         print(name,age)
    30 
    31 if __name__ == '__main__':
    32     unittest.main()
    33 结果:
    34 =>lili 16
    35   female nurser
    36 ※重点来了:首先结果展示的数据是字典里的value,没有打印key的值;其次@data里的数据key值和def方法里的形参名称一定要一致,否则,打印的时候,就会报莫名的参数错误。※

    4、读取json文件数据

     1 # data_json.json文件
     2 {
     3     "test_case1": {
     4         "key": "value1",
     5         "status_code": 200
     6     },
     7     "test_case2": {
     8         "key": "value2",
     9         "status_code": 200
    10     },
    11     "test_case3": {
    12         "key": "value3",
    13         "status_code": 200
    14     }
    15 }
    16 
    17 
    18 # python读取json文件
    19 @ddt
    20 class InterfaceTest(unittest.TestCase):
    21 
    22     def setUp(self):
    23         self.url = "http://httpbin.org/get"
    24 
    25     def tearDown(self):
    26         print(self.result)
    27 
    28     @file_data("data_json.json")  #如不在同一级目录下需另做处理
    29     def test_get_request(self, key, status_code):
    30         r = requests.get(self.url, params={"key": key})
    31         self.result = r.json()
    32         self.assertEqual(r.status_code, status_code)
    33 
    34 if __name__ == '__main__':
    35     unittest.main()
  • 相关阅读:
    pip安装open3d出现bug : `Cargo, the Rust package manager, is not installed or is not on PATH`
    input的onkeyup
    disco diffusion v5人工智能AI生成插画【分享】
    Windows10换装1T容量M.2固态硬盘【已解决】
    使用PC显卡跑Disco Diffusion V5进行AI画画的玩法
    C# Log4net 组件无法写日志 IsDebuged、IsInfoEnabled、IsErrorEnabled 全部为false
    食道测压结合Manoview软件
    wpf 无法从流中加载光标
    对比使用IConfigurationSectionHandler和ConfigurationSection自定义节点和自定义处理程序
    实验一密码引擎商用密码算法实现2交叉测试
  • 原文地址:https://www.cnblogs.com/hanxiaobei/p/13528880.html
Copyright © 2020-2023  润新知