数据驱动

目录

 

1、数据驱动

1.1 特点

1.2 传入数据的方式(测试数据的来源)

2、Json

2.1 Json语法规则

2.2 JSON键

2.3 JSON值

2.4 JSON数据操作

3、yaml数据存储文件

3.1 PyYAML库安装

3.2 文件后缀名

3.3 语法规则

3.4 支持的数据结构

3.5 返回值

3.6 yaml数据操作


1、数据驱动

以数据来驱动整个测试用例的执行,也就是测试数据决定测试结果。比如我们要测试加法,我们的测试数据是1和1,测试结果就是2,如果测试数据是1和2,测试结果就是3.

 

1.1 特点

数据驱动技术可以将用户把关注点放在对测试数据的构建和维护上,而不是直接维护脚本,可以利用同样的过程对不同的数据输入进行测试.

数据驱动的实现要依赖参数化的技术.

1.2 传入数据的方式(测试数据的来源)

  1. 直接定义在测试脚本中(简单直观,但代码和数据未实现真正的分离,不方便后期维护)
  2. 从文件读取数据,如JSON、excel、xml、txt等格式文件
  3. 从数据库中读取数据
  4. 直接调用接口获取数据源
  5. 本地封装一些生成数据的方法

2、Json

2.1 Json语法规则

- 大括号保存对象

- 中括号保存数组

- 对象数组可以相互嵌套

- 数据采用键值对表示

- 多个数据由逗号分隔

2.2 JSON

JSON的键必须是字符串类型,用英文双引号括起来

2.3 JSON

JSON 值可以是:

  • 数字(整数或浮点数)

  • 字符串(在双引号中)

  • 逻辑值(true 或 false)

  • 数组(在中括号中)

  • 对象(在大括号中)

  • null

示例: 

{
   "name": "tom",
   "age": 18,
   "isMan": true,
   "school": null,
   "address": {
       "country": "中国",
       "city": "江苏苏州",
       "street": "科技园路"
   },
   "numbers": [2, 6, 8, 9],
   "links": [
        {
            "name": "Baidu",
            "url": "http://www.baidu.com"
        },
       {
            "name": "TaoBao",
            "url": "http://www.taobao.com"
       }
    ]
}

2.4 JSON数据操作

2.4.1导包

import json

2.4.2JSON文件读写

读取json文件

with open('data.json', encoding='UTF-8') as f:
    data = json.load(f)    # 返回的数据类型为字典或列表

写入json文件

param = {'name': 'tom', 'age': 20} 
with open('data2.json', 'w', encoding='UTF-8') as f:     
    json.dump(param, f)

注意:unit test数据最外层必须是列表,列表中的元素可以是元组或列表

    # 数据最外层必须是列表,列表中的元素可以是元组或列表
    @parameterized.expand(test_data)
    def test_add_fun(self, x, y, expect):
        result = add(x, y)
        self.assertEqual(result, expect)

3、yaml数据存储文件

yaml是一种所有编程语言可用的友好的数据序列标准,语法和其他高阶语言类似,并且可以简单表达清单、散列表,标量等资料形态

3.1 PyYAML库安装

PyYAML为python解析yaml的库

安装:pip install PyYAML

3.2 文件后缀名

data.yaml  data.yml

3.3 语法规则

大小写敏感,即name Name是不同的

使用缩进表示层级关系,只要相同层级的元素对其即可

3.4 支持的数据结构

对象:键值对的集合,又称为映射/字典

数组:一组按次序排列的值,又称为序列/列表

纯量:单个值(包含字符串、布尔值、整数、浮点数、空、日期)

3.5 返回值

字典(yaml文件最核心的存在)

# 1、yaml文件中每一个冒号后必须加一个空格

name: "ww"
sex: 男   # 2、不加引号也不会报错,它会自动转换为python数据类型

# ❀ 对象
info: {"name": ww, "age": 18 }   # 值为python中的字典
Info: {"name": "星魂", "age": 21 }
student:    # 缩进表示层级关系,相同层级元素左对齐;一个冒号一个字典,同一层次的字典会合并,从而作为上一级的值
  name: '文'
  age: 14      # 'student': {'name': '文', 'age': 14}

# ❀ 数组
data:     # yaml文件支持列表格式
  - 1
  - 2

datas: ['雪女', '高渐离']  # python 列表类型

# 模拟json {"names":[{"k1":"v1"},{"k2":"v2"}]}
names:
  - k1: v1
  - k2: v2

# ❀ 纯量:字符串、布尔值、整数、浮点数、空、日期

# 🎈 布尔值
tr1: true   # yaml文件格式
fa1: false

tr2: True   # python布尔值
fa2: False

# 🎈 整数和浮点数
ind: 14
flo: 1.5

# 🎈 空
data1: ~  # None
data2: None  # 'None',⚠ 不支持python的None类型
data3:    # 值为空就是返回python中的None
data4: null
data5: Null

# 🎈 日期
# 年月日
date1: 2020-08-26  # ⚠ 单位数必须要补0才可以,时分秒也一样要补0
# 年月日时分秒
date2: 2020-11-11 11:11:01
# 时分秒
date3: 11:11:11  # 不能这么写,它会返回某个数字

3.6 yaml数据操作

3.6.1 yaml读写操作

yaml读取文件

import yaml

# windows 防止中文乱码,encoding='utf-8'
with open('./test_yaml.yml', encoding='utf-8') as f:
    value = yaml.safe_load(f)

print(value)

test_yaml.yml:

test_001:
  x: 1
  y: 2
  z: 3

test_002:
  x: 4
  y: 6
  z: 10

test_003:
  x: 5
  y: 3
  z: 8

读取结果:

{'test_002': {'x': 4, 'z': 10, 'y': 6}, 'test_001': {'x': 1, 'z': 3, 'y': 2}, 'test_003': {'x': 5, 'z': 8, 'y': 3}}

写入yaml文件

# 写入数据
import yaml

data = {
    "Search_Data": {
        "search_test_002": {"expect": {"value": "你好"}, "value": "你好"},
        "search_test_001": {"expect": [4, 5, 6], "value": 456}
    }
}

"""
Search_Data:
  search_test_002:
    expect:
      value: "你好"
    value: "你好"
  search_test_001:
    expect: [4, 5, 6]
    value: 456    
"""

# yaml写文件
#   如果写入中文时,encoding='utf-8'(指定utf-8编码), allow_unicode=True(使用Unicode编码)
with open('./data3.yml', 'w', encoding='utf-8') as f:  # 此处的utf-8也要有
    yaml.safe_dump(data, f, encoding='utf-8', allow_unicode=True)

示例:

@pytest.mark.parametrize('phone, password, toast_mess, exp_data', data('login.yml'))
    def test_login(self, phone, password, toast_mess, exp_data):
        pass

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值