
Codeception 是一个强大的 PHP 自动化测试框架,支持多种测试类型,包括单元测试、功能测试、接受测试、API 测试等。它通过简洁的语法、丰富的模块和扩展机制使得测试的编写和执行变得非常方便。在本文中,我们将介绍 Codeception 的基础使用,帮助你快速上手并开始编写和执行自动化测试。
1. 安装 Codeception
1.1 安装 Codeception
你可以通过 Composer 来安装 Codeception:
composer require --dev codeception/codeception
安装完成后,Codeception 会被添加到项目的 vendor
目录中。你可以通过执行以下命令来验证是否成功安装:
./vendor/bin/codecept --version
你将看到 Codeception 的版本信息,确认安装成功。
1.2 安装所需模块
Codeception 提供了多个模块支持不同类型的测试。例如,你可以使用 PhpBrowser
模块进行功能测试,使用 WebDriver
模块进行浏览器自动化测试,或者使用 Db
模块进行数据库测试等。
例如,安装 PhpBrowser
模块来进行功能测试:
composer require --dev codeception/module-phpbrowser
2. 初始化 Codeception 项目
Codeception 提供了一个初始化命令,用来快速生成项目所需的基本文件和配置:
./vendor/bin/codecept bootstrap
该命令会创建一个 tests
目录,目录下包含以下几个子目录:
tests/_support
:存放辅助类、模块、配置等。tests/_data
:存放测试数据。tests/acceptance
:接受测试文件夹。tests/functional
:功能测试文件夹。tests/unit
:单元测试文件夹。
3. 编写测试
Codeception 支持三种主要的测试类型:
- 单元测试(Unit Test):测试代码中的小单元,通常是函数、方法等。
- 功能测试(Functional Test):测试系统的某个功能模块,通常不涉及外部依赖。
- 接受测试(Acceptance Test):模拟用户行为进行端到端测试,通常涉及到用户界面和外部依赖。
3.1 创建单元测试
使用 Codeception 创建一个单元测试文件:
./vendor/bin/codecept generate:test unit ExampleTest
这将会在 tests/unit
目录下生成一个 ExampleTest.php
文件。打开该文件,你将看到一个基础的测试模板:
<?php
namespace Tests\Unit;
use Codeception\Test\Unit;
class ExampleTest extends Unit
{
// _before() 和 _after() 方法可选,用于执行测试前后的操作
protected function _before()
{
}
protected function _after()
{
}
// 测试方法
public function testSomething()
{
$this->assertTrue(true);
}
}
在 testSomething()
方法中,你可以编写你的测试代码。运行单元测试命令:
./vendor/bin/codecept run unit ExampleTest
3.2 创建功能测试
功能测试用于模拟用户与应用程序交互,通常不涉及外部浏览器。使用 PhpBrowser
模块进行功能测试。
首先创建一个功能测试:
./vendor/bin/codecept generate:test functional ExampleFunctionalTest
这会在 tests/functional
目录下生成一个 ExampleFunctionalTest.php
文件。你可以使用 PhpBrowser
模块来编写测试:
<?php
namespace Tests\Functional;
use Codeception\Util\Stub;
use Tests\Support\AcceptanceTester;
class ExampleFunctionalTestCest
{
public function _before(AcceptanceTester $I)
{
}
// 测试用户登录
public function tryToTest(AcceptanceTester $I)
{
$I->amOnPage('/login');
$I->see('Login');
$I->fillField('username', 'admin');
$I->fillField('password', 'password');
$I->click('Submit');
$I->see('Welcome, admin');
}
}
运行功能测试:
./vendor/bin/codecept run functional ExampleFunctionalTest
3.3 创建接受测试
接受测试用于模拟实际用户的浏览器行为,通常用于端到端测试。它使用 WebDriver
模块,可以和浏览器交互。
首先,安装 WebDriver
模块:
composer require --dev codeception/module-webdriver
然后,创建接受测试:
./vendor/bin/codecept generate:test acceptance ExampleAcceptanceTest
在 tests/acceptance
目录下创建 ExampleAcceptanceTest.php
文件:
<?php
namespace Tests\Acceptance;
use Codeception\Util\Stub;
use Tests\Support\AcceptanceTester;
class ExampleAcceptanceTestCest
{
public function _before(AcceptanceTester $I)
{
}
public function tryToTest(AcceptanceTester $I)
{
$I->amOnPage('/login');
$I->see('Login');
$I->fillField('username', 'admin');
$I->fillField('password', 'password');
$I->click('Submit');
$I->see('Welcome, admin');
}
}
要运行 WebDriver 测试,通常你需要在本地或服务器上运行一个 Selenium 服务。你可以使用 docker
启动一个 Selenium 容器:
docker run -d -p 4444:4444 selenium/standalone-chrome
然后执行测试:
./vendor/bin/codecept run acceptance ExampleAcceptanceTest
4. 配置文件
Codeception 配置文件位于 tests/_support
目录下。以下是一些常见的配置文件和配置项:
tests/_support/Helper
:自定义辅助类。tests/_support/AcceptanceTester.php
:接受测试的默认类,可以在其中定义一些通用的测试方法。tests/_support/FunctionalTester.php
:功能测试的默认类。tests/_support/UnitTester.php
:单元测试的默认类。
每个测试模块都有一个配置文件,位于 tests/_support/config
目录下,例如 tests/_support/config/acceptance.suite.yml
,你可以在这些配置文件中设置各模块的参数,例如数据库、浏览器、超时等。
5. 常见命令
以下是一些常用的 Codeception 命令:
run
:运行所有测试或指定测试类型(unit、functional、acceptance)。
./vendor/bin/codecept run
./vendor/bin/codecept run unit
./vendor/bin/codecept run functional
./vendor/bin/codecept run acceptance
generate:test
:生成测试文件。
./vendor/bin/codecept generate:test unit ExampleTest
./vendor/bin/codecept generate:test functional ExampleFunctionalTest
./vendor/bin/codecept generate:test acceptance ExampleAcceptanceTest
bootstrap
:初始化 Codeception 项目。
./vendor/bin/codecept bootstrap
guy
:使用guy
生成模拟的测试代码和功能。
./vendor/bin/codecept generate:guy FunctionalTester
6. 测试报告与结果
在 Codeception 执行测试后,会生成测试报告,默认情况下报告会显示在命令行界面,你可以通过以下方式查看报告:
- HTML 报告:你可以配置 Codeception 生成 HTML 格式的测试报告,便于查看详细的测试结果。
- JUnit 报告:生成 JUnit 格式的测试报告,以便与 CI/CD 工具(如 Jenkins)集成。
./vendor/bin/codecept run --coverage --html
7. 总结
通过 Codeception,你可以快速开始自动化测试,并轻松扩展为更复杂的测试场景。通过简单易用的接口和模块,你可以编写功能测试、接受测试、API 测试等多种类型的测试,确保你的代码质量和系统稳定性。