接口自动化测试数据驱动DDT模块使用

发表于:2022-7-18 09:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:自动化测试冰茶    来源:今日头条

  一、DDT简单介绍
  名称: Data-Driven Tests,数据驱动测试
  作用: 由外部数据集合来驱动测试用例的执行。
  核心的思想:数据和测试代码分离。
  应用场景: 一组外部数据来执行相同的操作。
  优点: 当测试数据发生大量变化的情况下,测试代码可以保持不变。
  实际项目: excel存储测试数据,ddt读取测试数据到单元测试框架(测试用例中),输出到html报告。
  二、什么是数据驱动
  就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。说的直白些,就是参数化的应用。
  三、DDT基础使用:传递基础数据类型
  # 导入ddt库下所有内容
  from ddt import *
  # 在测试类前必须首先声明使用 ddt
  @ddt
  class imoocTest(unittest.TestCase):
      
      # int
      @data(1, 2, 3, 4)
      def test_int(self, i):
          print("test_int:", i)
      # str
      @data("1", "2", "3")
      def test_str(self, str):
          print("test_str:", str)
  测试结果
  test_int: 1
  test_int: 2
  test_int: 3
  test_int: 4
  test_str: 1
  test_str: 2
  test_str: 3
  包含知识点
  想使用DDT首先要在单元测试类上面加上 @ddt。
  四、DDT基础使用:传递一个复杂的数据结构
  from ddt import *
  # 在测试类前必须首先声明使用 ddt
  @ddt
  class imoocTest(unittest.TestCase):
      tuples = ((1, 2, 3), (1, 2, 3))
      lists = [[1, 2, 3], [1, 2, 3]]
      # 元组
      @data((1, 2, 3), (1, 2, 3))
      def test_tuple(self, n):
          print("test_tuple", n)
      # 列表
      @data([1, 2, 3], [1, 2, 3])
      @unpack
      def test_list(self, n1, n2, n3):
          print("test_list", n1, n2, n3)
      # 元组2
      @data(*tuples)
      def test_tuples(self, n):
          print("test_tuples", n)
      # 列表2
      @data(*lists)
      @unpack
      def test_lists(self, n1, n2, n3):
          print("test_lists", n1, n2, n3)
      # 字典
      @data({'value1': 1, 'value2': 2}, {'value1': 1, 'value2': 2})
      @unpack
      def test_dict(self, value1, value2):
          print("test_dict", value1, value2)
  测试结果
  test_dict 1 2
  test_dict 1 2
  test_list 1 2 3
  test_list 1 2 3
  test_lists 1 2 3
  test_lists 1 2 3
  test_tuple (1, 2, 3)
  test_tuple (1, 2, 3)
  test_tuples (1, 2, 3)
  test_tuples (1, 2, 3)
  包含知识点
  @unpack :当传递的是复杂的数据结构时使用。比如使用元组或者列表,添加 @unpack 之后, ddt 会自动把元组或者列表对应到多个参数上。字典也可以这样处理。
  当没有加unpack时,test_case方法的参数只能填一个;如元组的例子。
  当你加了unpack时,传递的数据量需要一致;如列表例子中,每个列表我都固定传了三个数据,当你多传或少传时会报错,而test_case方法的参数也要写三个,需要匹配上。
  当传的数据是字典类型时,要注意每个字典的key都要一致,test_case的参数的命名也要一致;如字典的例子,两个字典的key都是value1和value2,而方法的参数也是。
  当传的数据是通过变量的方式,如元组2、列表2,变量前需要加上*。
  五、DDT基础使用:传递json文件
  json文件
  {
    "first": [
      {
        "isRememberMe": "True",
        "password": "111111",
        "username": "root"
      },
      "200"
    ],
    "second": [
      "{'isRememberMe': True, 'password': '1111111', 'username': 'root'}",
      "406"
    ],
    "third": [
      1,
      2
    ],
    "four": "123123"
  }
  单元测试类
  from ddt import *
  # 在测试类前必须首先声明使用 ddt
  @ddt
  class imoocTest(unittest.TestCase):
      @file_data('F:/test/config/testddt.json')
      def test_json(self, data):
          print(data)
  测试结果
  [{'isRememberMe': 'True', 'password': '111111', 'username': 'root'}, '200']
  ["{'isRememberMe': True, 'password': '1111111', 'username': 'root'}", '406']
  [1, 2]
  123123
  六、DDT基础使用:传递Yaml文件
  yaml文件
  unsorted_list:
    - 10
    - 15
    - 12
  sorted_list: [ 15, 12, 50 ]
  单元测试类
  from ddt import *
  # 在测试类前必须首先声明使用 ddt
  @ddt
  class imoocTest(unittest.TestCase):
      @file_data('F:/test/config/testddt.yaml')
      def test4(self, data):
          print("yaml", data)
  测试结果
  yaml [10, 15, 12]
  yaml [15, 12, 50]
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号