pytest自动化测试数据驱动yaml/excel/csv/json

数据驱动

数据的改变从而驱动自动化测试用例的执行,最终引起测试结果的改变。简单说就是参数化的应用。

测试驱动在自动化测试中的应用场景:

  • 测试步骤的数据驱动;
  • 测试数据的数据驱动;
  • 配置的数据驱动;
1、pytest结合数据驱动-yaml

实现读yaml文件,先创建env.yml文件配置测试数据

工程目录结构:
  • data目录:存放yaml文件

    dev: 127.0.0.1
    #dev: 127.0.0.2
    #prod: 127.0.0.3

  • testcase目录:存放测试用例文件

    import pytest
    import yaml
    class TestYaml:
    @pytest.mark.parametrize("env", yaml.safe_load(open("./env.yml")))
    def test_yaml(self, env):
    if "test" in env:
    print("这是测试环境")

    print(env)

    print("测试环境的ip是:", env["test"])
    elif "dev" in env:
    print("这是开发文件")
    print("开发环境的ip是:", env["dev"])

    print(env)

结果示例:

2、pytest结合数据驱动-excel

常用的读取方式有:xlrd、xlwings、pandas、openpyxl

以读excel文件,实现A+B=C并断言为例~

工程目录结构:

data目录:存放excel数据文件

  • func目录:存放被测函数文件

    def my_add(x, y):
    result = x + y
    return result

  • testcase目录:存放测试用例文件

    import openpyxl
    import pytest
    from test_pytest.read_excel.func.operation import my_add
    def test_get_excel():
    """
    解析excel数据
    :return: [[1,1,2],[3,6,9],[100,200,300]]
    """
    book = openpyxl.load_workbook('../data/param.xlsx')
    sheet = book.active
    cells = sheet["A1":"C3"]
    print(cells)
    values = []
    for row in sheet:
    data = []
    for cell in row:
    data.append(cell.value)
    values.append(data)
    print(values)
    return values
    class TestWithExcel:
    @pytest.mark.parametrize('x,y,expected', test_get_excel())
    def test_add(self, x, y, expected):
    assert my_add(int(x), int(y)) == int(expected)

3、pyetst结合数据驱动-csv

csv:逗号文件,以逗号分隔的string文件

读取csv数据:
  • 内置函数open()
  • 内置模块csv
  • 方法:csv.reader(iterable)
  • 参数:iterable,文件或列表对象
  • 返回:迭代器,遍历迭代器,每次会返回一行数据

以读csv文件,实现A+B=C并断言为例~

工程目录结构:

data目录:存放csv数据文件

  • func目录:存放被测函数文件

    def my_add(x, y):
    result = x + y
    return result

  • testcase目录:存放测试用例文件

    import csv
    import pytest
    from test_pytest.read_csv.func.operation import my_add
    def test_get_csv():
    """
    解析csv文件
    :return:
    """
    with open('../data/params.csv') as file:
    raw = csv.reader(file)
    data = []
    for line in raw:
    data.append(line)
    print(data)
    return data
    class TestWithCsv:
    @pytest.mark.parametrize('x,y,expected', test_get_csv())
    def test_add(self, x, y, expected):
    assert my_add(int(x), int(y)) == int(expected)

4、pytest结合数据驱动-json

json:js对象,是一种轻量级的数据交换格式。

json结构:
  • 对象{"key":value}
  • 数组[value1,value2...]
查看json文件:
  • 1.pycharm
  • 2.txt记事本
读取json文件:
  • 内置函数open()
  • 内置库json
  • 方法 json.loads() json.dumps()

以读json文件,实现A+B=C并断言为例~

工程目录结构:

data目录:存放json数据文件

  • func目录:存放被测函数文件

    def my_add(x, y):
    result = x + y
    return result

  • testcase目录:存放测试用例文件

    import json
    import pytest
    from test_pytest.read_json.func.operation import my_add
    def test_get_json():
    """
    解析json数据
    :return: [[1,1,2],[3,6,9],[100,200,300]]
    """
    with open('../data/params.json', 'r') as file:
    data = json.loads(file.read())
    print(list(data.values()))
    return list(data.values())
    class TestWithJson:
    @pytest.mark.parametrize('x,y,expected', test_get_json())
    def test_add(self, x, y, expected):
    assert my_add(int(x), int(y)) == int(expected)

相关推荐
星沙丘秋11 小时前
Kettle导入Excel文件进数据库时,数值发生错误的一种原因
excel
Tomorrow'sThinker13 小时前
✍️ Python 批量设置 Word 文档多级字体样式(标题/正文/名称/小节)
python·自动化·word·excel
思则变13 小时前
[Pytest][Part 4]多种测试运行方式
pytest
程序员三藏14 小时前
如何使用Pytest进行测试?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
大虫小呓16 小时前
50个Python处理Excel示例代码,覆盖95%日常使用场景-全网最全
python·excel
禁默19 小时前
Linux Vim 编辑器详解:从入门到进阶(含图示+插件推荐)
linux·vim·excel
面朝大海,春不暖,花不开1 天前
结构化数据格式解析:JSON 与 XML 的技术应用与实践
xml·json
PythonicCC1 天前
Django核心知识点详解:JSON、AJAX、Cookie、Session与用户认证
ajax·django·json
-凌凌漆-1 天前
【Qt】Qt QML json处理
开发语言·qt·json
Tomorrow'sThinker2 天前
[特殊字符] Python 批量生成词云:读取词频 Excel + 自定义背景 + Excel to.png 流程解析
python·excel