@ddt使用

数据驱动:

        指在自动化测试中处理测试数据的方式。通常测试数据与功能函数分离,存储在功能函数的外部位置。在自动化测试运行时,数据驱动框架会读取数据源中的数据,把数据作为参数传递到功能函数中,并会根据数据的条数多次运行同一个功能函数。

安装ddt:

        pip install ddt

ddt使用步骤:

        1、使用 @ddt 装饰你的测试类;

        2、使用 @data 或者 @file_data 装饰你需要数据驱动的测试方法;

        3、如一组测试数据有多个参数,则需 unpack,使用 @unpack 装饰你的测试方法。

        4、file_data 装饰器则从 JSON 或 YAML 文件加载测试数据。

ddt使用示例:

示例1:

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

from conifg import base_path

datas = [{"user": "admin", "psw": "123456", "result": "true"},
         {"user": "admin_001", "psw": "123456", "result": "true"},
         {"user": "admin_002", "psw": "123456", "result": "true"},
         {"user": "admin_003", "psw": "123456", "result": "true"},
         {"user": "admin_004", "psw": "123456", "result": "true"}, ]

data1 = {

    "test_data": [
        {
            "param1": 1,
            "param2": 2,
            "expect": 3
        },
        {
            "param1": 2,
            "param2": 3,
            "expect": 5
        },
        {
            "param1": 3,
            "param2": 4,
            "expect": 7
        }
    ]

}


@ddt
class Test(unittest.TestCase):
    # *data  (*的含义是解包的含义,通过* 解包出多条测试数据 )
    @data(*data1.get("test_data"))
    def test_1_demo(self, case):
        print(case)

    @data(*data1.get("test_data"))
    @unpack
    # @unpack
    # unpack表示,对于每一组数据,如果它的值是list或者tuple,那么就分拆成独立的参数。
    def test_2_demo(self, param1, param2, expect):
        print("param1:", param1, end=" ")
        print("param2:", param2, end=" ")
        print("expect:", expect, end=" ")


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






结果显示:

{'param1': 1, 'param2': 2, 'expect': 3}
{'param1': 2, 'param2': 3, 'expect': 5}
{'param1': 3, 'param2': 4, 'expect': 7}
param1: 1 param2: 2 expect: 3 param1: 2 param2: 3 expect: 5 param1: 3 param2: 4 expect: 7 

示例2:

import unittest
from ddt import ddt,data


@ddt
class Test(unittest.TestCase):
    # 如果是字典想获取 key 与 value 可以使用items()方法
    @data(*{"name":"zhangsan","age":12}.items())
    def test_aa(self, case):
        print(case)


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



显示结果:
('name', 'zhangsan')
('age', 12)

@ddt 之 file_data

一、ddt.file_data介绍

  1.      ddt.file_data:装饰测试方法,参数是文件名。文件可以是 json 或者 yaml 类型。
  2.      注意:如果文件是以 “.yml”或者".yaml" 结尾,ddt 会作为 yaml 类型处理,其他文件都会作为      json 文件处理。  
  3.      如果文件是列表,列表的值会作为测试用例参数,同时,会作为测试用例方法名后缀显示。    
  4.      如果文件是字典,字典的 key 会作为测试用例方法的后缀显示,字典的 value 会作为测试用例参数。

二、为什么要用ddt,希望数据和用例分开,没什么耦合性

  1. 创建数据
  2. 读取数据
  3. 编写用例 
  •     file_data处理字典数据类型,注意:其修饰的函数传的参数要和值的键保持一致,这里是以json文件为例
  • @ddt使用_第1张图片

 

from ddt import ddt, file_data
import unittest
 
@ddt
class Test(unittest.TestCase):
 
    @file_data("D:\work_doc\CodeFile\dcs_class6\data.json")
    def test01(self, username, password):
        print(username, password)
 
if __name__ == '__main__':
    unittest.main()
 
# 运行结果如下
"""
Ran 3 tests in 0.004s
Evan 123456
Lvan 123456
Alex 123456
"""
 

  • file_data 处理列表类型数据 将列表作为一个整体的参数传入
  • @ddt使用_第2张图片

 

 
import yaml
 
f = open("ddt_data.yaml", encoding="utf8")
print(yaml.load(f))
f.close()
 
# 运行结果如下
"""
[{
'url': 'http://cms.duoceshi.cn/xxx/xxxx/xxxxx', 
'method': 'post', 
'header': {'Content-Type': 'application/x-www-form-urlencoded'}, 
'params': {'userAccount': 'admin', 'loginPwd': 123456}
}]

你可能感兴趣的:(python基础使用,大数据)