在PHP里面支持利用Excel的BDD,也支持利用Excel进行参数化测试
ExcelBDD
Use Excel file as BDD feature file, get example data from Excel files, support automation tests.
Features
The main features provided by this library are:
- Read test data according to BDD from excel files.
- Read test data according to Table from excel files.
Install
Install the library using composer Opens in new window or tab:
composer require excelbdd/excelbdd
or
php composer.phar require excelbdd/excelbdd
Excel BDD Tool Specification By ExcelBDD Method
This tool is to get BDD test data from an excel file, its requirement specification is below

Examples
Read Simple BDD data

The above is the simple BDD format for most usage.
php
<?php
use PHPUnit\Framework\TestCase;
use ExcelBDD\Behavior;
final class BehaviorTest extends TestCase
{
public static function BehaviorgetExampleListProvider(): array
{
$excelFile = "./BDDExcel/ExcelBDD.xlsx";
$sheetName = "Sheet1";
return Behavior::getExampleList($excelFile, $sheetName, "", "wrong");
}
/** @dataProvider BehaviorgetExampleListProvider */
public function testBehaviorgetExampleList($ParamName1, $ParamName2, $ParamName3, $ParamName4)
{
echo $ParamName1, $ParamName2, $ParamName3, $ParamName4, "\n";
$this->assertSame(strpos($ParamName1, "V1"), 0);
$this->assertSame(strpos($ParamName2, "V2"), 0);
}
}
Input vs Expect + Test Result Format - SBT - Specification By Testcase

testcase example is below, which uses headerMatcher to filter the data
php
public static function BDDSBTDataProvider(): array
{
$excelFile = "../Java/src/test/resources/excelbdd/ExcelBDD.xlsx";
$sheetName = "SBTSheet1";
return Behavior::getExampleList($excelFile, $sheetName, "Scenario");
}
#[DataProvider('BDDSBTDataProvider')]
public function testBDDSBTExampleList($ParamName1, $ParamName1Expected, $ParamName1TestResult, $ParamName2, $ParamName2Expected, $ParamName2TestResult, $ParamName3, $ParamName3Expected, $ParamName3TestResult, $ParamName4, $ParamName4Expected, $ParamName4TestResult)
{
echo "===testBDDSBTExampleList===", "\n";
echo $ParamName1, $ParamName1Expected, $ParamName1TestResult, $ParamName2, $ParamName2Expected, $ParamName2TestResult, $ParamName3, $ParamName3Expected, $ParamName3TestResult, $ParamName4, $ParamName4Expected, $ParamName4TestResult, "\n";
$this->assertSame(strpos($ParamName1, "V1"), 0);
$this->assertSame(strpos($ParamName2, "V2"), 0);
$this->assertSame($ParamName1TestResult,"pass");
}
Input vs Expected
ExcelBDD can detect 3 parameter-header patterns automatically, the last one is below.

php
public static function BDDExpectedDataProvider(): array
{
$excelFile = "../Java/src/test/resources/excelbdd/ExcelBDD.xlsx";
$sheetName = "Expected1";
return Behavior::getExampleList($excelFile, $sheetName);
}
#[DataProvider('BDDExpectedDataProvider')]
public function testBDDExpectedExampleList($ParamName1, $ParamName1Expected, $ParamName2, $ParamName2Expected, $ParamName3, $ParamName3Expected, $ParamName4, $ParamName4Expected)
{
echo "===testBDDSBTExampleList===", "\n";
echo $ParamName1, $ParamName1Expected, $ParamName2, $ParamName2Expected, $ParamName3, $ParamName3Expected, $ParamName4, $ParamName4Expected, "\n";
$this->assertSame(strpos($ParamName1, "V1"), 0);
$this->assertSame(strpos($ParamName2, "V2"), 0);
}
Read table data

php
<?php
use PHPUnit\Framework\TestCase;
use ExcelBDD\Behavior;
use PHPUnit\Framework\Attributes\DataProvider;
final class BDDTest extends TestCase
{
public static function TableDataProvider(): array
{
$excelFile = "../Java/src/test/resources/excelbdd/DataTable.xlsx";
$sheetName = "DataTable2";
return Behavior::getExampleTable($excelFile, $sheetName);
}
#[DataProvider('TableDataProvider')]
public function testTableData($Header01, $Header02, $Header03, $Header04, $Header05, $Header06, $Header07, $Header08)
{
echo $Header01, $Header02, $Header03, $Header04, $Header05, $Header06, $Header07, $Header08, "\n";
$this->assertStringContainsString("Value1", $Header01);
}
}
API
Behavior::getExampleList
public static function getExampleList(string $excelFile, string $sheetName = null, string $headerMatcher = null, string $headerUnmatcher = null): array
- $excelFile: excel file path and name, relative or absolute
- $sheetName: sheet name, optional, default is the first sheet in excel file
- $HeaderMatcher: filter the header row by this matcher, if matched, this set will be collected in. optional, default is to select all.
- $HeaderUnmatcher: filter the header row by this matcher, if matched, this set will be excluded. optional, default is to exclude none.
Behavior::getExampleTable
public static function getExampleTable($excelFile, $sheetName = null, $headerRow = 1, $startColumn = '`'): array
- $excelFile: excel file path and name, relative or absolute
- $sheetName: sheet name, optional, default is the first sheet in excel file
- $headerRow: the number of header row, optional, default is 1
- $startColumn: the char of first data area, optional, default is auto detect
ExcelBDD PHP Guideline 线上版维护在 ExcelBDD PHP Guideline on Azure
ExcelBDD开源项目位于 ExcelBDD Homepagehttps://dev.azure.com/simplopen/ExcelBDD