You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTest BDD如何从外部Excel读取数据实现场景大纲批量测试

在PyTest BDD中用Excel批量数据替代Scenario Outline的Examples表格

核心思路是利用pytest的参数化机制,结合PyTest BDD的场景定义,实现逐条遍历Excel数据执行同一场景。具体步骤如下:

1. 编写Excel数据读取函数

用openpyxl或pandas实现批量读取,把每行数据转成字典(表头对应参数名),示例代码:

from openpyxl import load_workbook

def read_excel_test_data(file_path):
    workbook = load_workbook(filename=file_path, read_only=True)
    sheet = workbook.active
    # 获取表头作为参数名
    headers = [cell.value for cell in sheet[1]]
    test_data = []
    # 遍历数据行,转成字典
    for row in sheet.iter_rows(min_row=2, values_only=True):
        test_data.append(dict(zip(headers, row)))
    workbook.close()
    return test_data

2. 修改Feature文件

去掉Scenario Outline和Examples,改用普通Scenario保留参数占位符:

Feature: 浏览器测试

Scenario: 访问订单页面验证客户编号
    When 访问 URL <base>/<page>/<ordNumber>/<custName>
    Then 页面包含客户编号 <custNumber>

3. 用pytest参数化绑定场景与数据

在step定义文件中,用@pytest.mark.parametrize装饰场景函数,将Excel数据逐条传入:

import pytest
from pytest_bdd import scenario, when, then
from your_utils import read_excel_test_data

# 读取Excel中的测试数据
test_data = read_excel_test_data("test_data.xlsx")

# 用参数化装饰场景,每条数据触发一次场景执行
@pytest.mark.parametrize("data", test_data)
@scenario("features/browser_test.feature", "访问订单页面验证客户编号")
def test_browser_order(data):
    pass

@when("访问 URL <base>/<page>/<ordNumber>/<custName>")
def visit_order_page(data, browser):
    # 假设browser是你定义的pytest浏览器fixture
    target_url = f"{data['base']}/{data['page']}/{data['ordNumber']}/{data['custName']}"
    browser.get(target_url)

@then("页面包含客户编号 <custNumber>")
def verify_cust_number(data, browser):
    assert str(data['custNumber']) in browser.page_source

关键注意事项

  • Excel表头必须和Feature中的占位符完全一致(比如base、page等),确保参数映射正确
  • 如果偏好元组格式数据,可将参数化改为@pytest.mark.parametrize("base, page, ordNumber, custName, custNumber", test_data),同时step函数需接收对应单独参数
  • 必须参数化场景函数(即@scenario装饰的函数),而非直接在step函数上参数化,这样才能实现逐条执行场景

内容的提问来源于stack exchange,提问作者Sara Ananth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:11:09