ExcelBDD Python指南

在Python里面支持BDD

Excel BDD Tool Specification By ExcelBDD Method

This tool is to get BDD test data from an excel file, its requirement specification is below

The Essential of this approach is obtaining multiple sets of test data, so when combined with Excel's Sheet, the key parameters are:

  1. ExcelFileName, required, which excel file is used.
  2. SheetName, optional, which Sheet the requirement writer writes in, if not specified, 1st sheet is chosen. An Excel file supports multiple Sheets, so an Excel is sufficient to support a wide range, such as Epic, Release, or a module.
  3. HeaderMatcher, filter the header row by this matcher, if matched, this set will be collected in.
  4. HeaderUnmatcher, filter the header row by this matcher, if matched, this set will be excluded.

Once the header row and parameter name column are determined by 'Parameter Name' grid automatically, the data area is determined, such as the green area in the table above. The gray area of the table above is the story step description, which is the general requirements step.

Install ExcelBDD Python Edition

pip install excelbdd

API

behavior.get_example_list

get_example_list(excelFile, sheetName = None, headerMatcher = None, headerUnmatcher = None)

  1. excelFile: excel file path and name, relative or absolute
  2. sheetName: sheet name, optional, default is the first sheet in excel file
  3. HeaderMatcher: filter the header row by this matcher, if matched, this set will be collected in. optional, default is to select all.
  4. HeaderUnmatcher: filter the header row by this matcher, if matched, this set will be excluded. optional, default is to exclude none.

behavior.get_example_table

get_example_table(excelFile,sheetName = None,headerRow = 1,startColumn = 'A')

  1. excelFile: excel file path and name, relative or absolute
  2. sheetName: sheet name, optional, default is the first sheet in excel file
  3. headerRow: the number of header row, optional, default is 1
  4. startColumn: the char of first data area, optional, default is column A in sheet

Simple example code

The Famouse FizzBuzz kata is described in excelbdd format, as below.

复制代码
import pytest
from excelbdd.behavior import get_example_list
import FizzBuzz

excelBDDFile = "path of excel file" 
@pytest.mark.parametrize("HeaderName, Number1, Output1, Number2, Output2, Number3, Output3, Number4, Output4",
                        get_example_list(excelBDDFile,"FizzBuzz"))
def test_FizzBuzz(HeaderName, Number1, Output1, Number2, Output2, Number3, Output3, Number4, Output4):
    assert FizzBuzz.handle(Number1) == Output1
    assert FizzBuzz.handle(Number2) == Output2
    assert FizzBuzz.handle(Number3) == Output3
    assert FizzBuzz.handle(Number4) == Output4

Input vs Expect + Test Result Format - SBT - Specification By Testcase

testcase example is below, which uses headerMatcher to filter the data

复制代码
@pytest.mark.parametrize("HeaderName, ParamName1, ParamName1Expected, ParamName1TestResult, \
                         ParamName2, ParamName2Expected, ParamName2TestResult, ParamName3, \
                         ParamName3Expected, ParamName3TestResult, ParamName4, ParamName4Expected, \
                         ParamName4TestResult",
                        get_example_list(bddFile1, "SBTSheet1","Scenario"))
def test_excelbdd_sbt(HeaderName, ParamName1, ParamName1Expected, ParamName1TestResult, 
                      ParamName2, ParamName2Expected, ParamName2TestResult, ParamName3, 
                      ParamName3Expected, ParamName3TestResult, ParamName4, ParamName4Expected, 
                      ParamName4TestResult):
    print(HeaderName, ParamName1, ParamName1Expected, ParamName1TestResult, 
                      ParamName2, ParamName2Expected, ParamName2TestResult, ParamName3, 
                      ParamName3Expected, ParamName3TestResult, ParamName4, ParamName4Expected, 
                      ParamName4TestResult)
    # add test data are loaded into the above parameters, add test code below

ExcelBDD can detect 3 parameter-header patterns automatically, the last one is below.

Input vs Expected

The demo code is below

复制代码
@pytest.mark.parametrize("HeaderName, ParamName1, ParamName1Expected,  \
                         ParamName2, ParamName2Expected, ParamName3, \
                         ParamName3Expected, ParamName4, ParamName4Expected"
                        get_example_list(bddFile1, "SBTSheet1","Scenario"))
def test_excelbdd_sbt(HeaderName, ParamName1, ParamName1Expected,  
                      ParamName2, ParamName2Expected, ParamName3, 
                      ParamName3Expected, ParamName4, ParamName4Expected):
    print(HeaderName, ParamName1, ParamName1Expected, 
                      ParamName2, ParamName2Expected,  ParamName3, 
                      ParamName3Expected, ParamName4, ParamName4Expected)
    # add test data are loaded into the above parameters, add test code below

Get Table

The test data are organized in normal table, as below.

the below code show how to fetch the test data into testcase

复制代码
from excelbdd.behavior import get_example_table

@pytest.mark.parametrize("Header01, Header02, Header03, Header04, Header05, Header06, Header07, Header08",
                         get_example_table(tableFile, "DataTable4"))
def test_get_example_tableB(Header01, Header02, Header03, Header04, Header05, Header06, Header07, Header08):
    print(Header01, Header02, Header03, Header04, Header05, Header06, Header07, Header08)   
    # add test data are loaded into the above parameters, add test code below

ExcelBDD Python指南线上版维护在ExcelBDD Python Guideline

ExcelBDD开源项目位于 ExcelBDD Homepagehttps://dev.azure.com/simplopen/ExcelBDD

相关推荐
雪度娃娃3 分钟前
设计模式——单例模式
开发语言·c++·设计模式
Cyber4K4 分钟前
【Python专项】进阶语法-日志分类与分析(2)
开发语言·前端·python
lbb 小魔仙8 分钟前
Python + LangChain 环境搭建完全指南:从零构建本地 RAG 知识库(附 Ollama 本地模型集成)
开发语言·python·langchain
风落无尘8 分钟前
Python 包发布全流程:从项目结构到 PyPI 上线,以及我踩过的那些坑
开发语言·python·pip
xxjj998a9 分钟前
PHP vs C#:两大编程语言终极对比
开发语言·c#·php
Lenyiin10 分钟前
《LeetCode 顺序刷题》61 - 70
java·c++·python·算法·leetcode·lenyiin
岁岁的O泡奶12 分钟前
NSSCTF_crypto_[LitCTF 2023]babyLCG
经验分享·python·算法·密码学·crypto·流密码
风落无尘17 分钟前
我用 LangChain 写了一个带“定速巡航”的向量化工具,发布到 PyPI 了!
人工智能·python·langchain
AI技术控17 分钟前
RAG 效果差不是模型问题:10 个检索增强失败原因总结
人工智能·python·自然语言处理
敲代码的瓦龙20 分钟前
Android?基础UI控件!!!
java·开发语言