Pytest框架学习19--参数化2

1、数据源是yaml

安装yaml,使用safe_load方法读取文件,解析出数据

pip install PyYAML

复制代码
# test_data.yaml
test_case_1:
  a: 2
  b: 3
  expected_result: 5

test_case_2:
  a: -1
  b: 10
  expected_result: 9

test_case_3:
  a: 0
  b: 0
  expected_result: 0
python 复制代码
# test_code.py

import yaml
import pytest
from code import add

def load_test_data():
    with open('test_data.yaml', 'r') as file:
        test_data = yaml.safe_load(file)
    return test_data

@pytest.mark.parametrize("input_data", load_test_data().values())
def test_add(input_data):
    a = input_data['a']
    b = input_data['b']
    expected_result = input_data['expected_result']

    result = add(a, b)
    assert result == expected_result, f"计算错误:{a} + {b} 应该得到 {expected_result},实际得到 {result}"

# code.py

def add(a, b):
    return a + b

2、数据源是excel

| Test Case | Operand A | Operand B | Expected Result |

|-----------|------------|------------|------------------|

| Case 1 | 2 | 3 | 6 |

| Case 2 | -1 | 5 | -5 |

| Case 3 | 0 | 10 | 0 |

安装库,然后调用方法读取excel中每一行数据

pip install openpyxl

python 复制代码
# test_code.py

import pytest
from openpyxl import load_workbook
from code import multiply

def load_test_data():
    workbook = load_workbook('test_data.xlsx')
    sheet = workbook.active
    test_data = []

    for row in sheet.iter_rows(min_row=2, values_only=True):
        test_data.append(row)

    return test_data

@pytest.mark.parametrize("test_case, operand_a, operand_b, expected_result", load_test_data())
def test_multiply(test_case, operand_a, operand_b, expected_result):
    result = multiply(operand_a, operand_b)
    assert result == expected_result, f"测试用例 {test_case} 失败:{operand_a} * {operand_b} 应该得到 {expected_result},实际得到 {result}"

# code.py

def multiply(a, b):
    return a * b

3、数据源是csv

operand_a,operand_b,expected_result

2,3,6

-1,5,-5

0,10,0

0.5,2,1

0.5,0.5,0.25

导入csv模块,然后调用DictReader方法,读取csv中每一行数据生成一个列表

java 复制代码
[
  {
    "test_case": "Case 1",
    "operand_a": 2,
    "operand_b": 3,
    "expected_result": 5
  },
  {
    "test_case": "Case 2",
    "operand_a": -1,
    "operand_b": 10,
    "expected_result": 9
  },
  {
    "test_case": "Case 3",
    "operand_a": 0,
    "operand_b": 0,
    "expected_result": 0
  }
]
python 复制代码
# test_code.py

import csv
import pytest
from code import multiply

def load_test_data():
    test_data = []
    with open('test_data.csv', newline='') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            test_data.append(row)
    return test_data

@pytest.mark.parametrize("data", load_test_data())
def test_multiply(data):
    operand_a = int(data['operand_a'])
    operand_b = int(data['operand_b'])
    expected_result = int(data['expected_result'])

    result = multiply(operand_a, operand_b)
    assert result == expected_result, f"{operand_a} * {operand_b} 应该得到 {expected_result},实际得到 {result}"


# code.py

def multiply(a, b):
    return a * b

4、数据源是json

导入json模块,解析数据,然后传参

python 复制代码
# test_code.py

import json
import pytest
from code import add

def load_test_data():
    with open('test_data.json', 'r') as file:
        test_data = json.load(file)
    return test_data

@pytest.mark.parametrize("data", load_test_data())
def test_add(data):
    operand_a = data['operand_a']
    operand_b = data['operand_b']
    expected_result = data['expected_result']

    result = add(operand_a, operand_b)
    assert result == expected_result, f"{operand_a} + {operand_b} 应该得到 {expected_result},实际得到 {result}"

# code.py

def add(a, b):
    return a + b
相关推荐
李小星同志1 小时前
HTTM: Head-wise Temporal Token Merging for Faster VGGT论文学习
学习
喜欢吃燃面1 小时前
算法竞赛中的堆
c++·学习·算法
自然语2 小时前
人工智能之数字生命-学习的过程
数据结构·人工智能·深度学习·学习·算法
你好~每一天2 小时前
从传统行业到AI入门:我的CAIE Level I学习体验与思考
大数据·数据结构·人工智能·学习·jupyter·idea
烤麻辣烫3 小时前
黑马程序员苍穹外卖(新手)DAY8
java·开发语言·学习·spring·intellij-idea
weixin_515039793 小时前
互联网大厂面试:程序员二狗的搞笑经历
java·学习·面试·程序员·互联网·技术·故事
py有趣3 小时前
LeetCode算法学习之旋转矩阵
学习·算法·leetcode
黑客思维者3 小时前
LLM底层原理学习笔记:上下文窗口扩展技术如何突破记忆瓶颈,解锁大模型的长文本理解力
笔记·学习·llm·长文本·上下文窗口
小奶包他干奶奶3 小时前
Webpack学习——如何自定义钩子
前端·学习·webpack
组合缺一4 小时前
Solon AI 开发学习8 - chat - Vision(理解)图片、声音、视频
java·人工智能·学习·ai·音视频·solon