首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >现代全栈 PHP 测试框架 Codeception

现代全栈 PHP 测试框架 Codeception

作者头像
Tinywan
发布于 2026-07-01 17:28:24
发布于 2026-07-01 17:28:24
1530
举报
文章被收录于专栏:开源技术小栈开源技术小栈

概述

Codeception 是一款现代、功能强大的 PHP 测试框架。

它以简洁、易读的方式帮助开发者编写单元测试(Unit)、功能测试(Functional) 和 验收测试(Acceptance)。其核心设计理念是让测试变得有趣且富有表达力,让你能以接近自然语言的方式描述测试场景,从而轻松覆盖应用的各个层面。

无论你是使用 Laravel、Symfony、Yii、WordPress 还是其他框架,Codeception 都能提供统一、连贯的测试体验。

支持的三种测试类型

Codeception 最强大的特性之一,就是可以同时管理三种不同粒度的测试:

测试类型

测试范围

是否需要访问项目 PHP 文件

是否需要 Web 服务器

是否支持 JavaScript

执行速度

典型配置文件

单元测试

单个类或方法

是

否

否

极快

Unit.suite.yml

功能测试

应用内部逻辑(路由、数据库等)

是

否

否

较快

Functional.suite.yml

验收测试

用户真实浏览器行为

否

是

是

较慢

Acceptance.suite.yml

1. 验收测试

从真实用户视角出发,在浏览器中模拟操作,验证整个页面流程是否正确。即使你的项目使用的是小众 CMS 或传统 PHP 系统,也能轻松覆盖。

示例代码:

代码语言:javascript
复制
public function trySignup(AcceptanceTester $I): void
{
    $I->amOnPage('/');
    $I->click('注册');
    $I->submitForm('#signup', [
        'username' => 'Tinywan',
        'email'    => 'tinywan@example.com'
    ]);
    $I->see('注册成功,欢迎加入!');
}

2. 功能测试

无需启动真实浏览器和 Web 服务器,直接在 PHP 层面模拟 HTTP 请求。可以快速验证路由、表单处理、数据库操作等,同时获得详细的错误信息和更快的执行速度。

示例代码:

代码语言:javascript
复制
public function trySignup(FunctionalTester $I): void
{
    $I->amOnPage('/');
    $I->submitForm('#signup', [
        'username' => 'Tinywan',
        'email'    => 'tinywan@example.com'
    ]);
    $I->see('注册成功,欢迎加入!');
    $I->seeInDatabase('users', ['email' => 'tinywan@example.com']);
}

3. 单元测试

专注于测试单个类或方法的内部逻辑。Codeception 基于 PHPUnit 构建,同时提供了更多人性化的辅助工具,让单元测试编写更加简洁清晰。

安装

代码语言:javascript
复制
composer require "codeception/codeception" --dev

快速开始

1. 项目初始化

安装 Codeception 后,在项目根目录执行以下命令初始化:

代码语言:javascript
复制
php vendor/bin/codecept bootstrap

该命令会自动生成以下结构:

  • tests/ 目录下包含 Unit、Functional、Acceptance 三个测试套件
  • 每个套件对应一个 .suite.yml 配置文件
  • codeception.yml 全局配置文件

2. 核心语法风格

Codeception 的方法命名非常直观,分为三类:

  • 动作(Actions):amOnPage()、click()、fillField()、submitForm() 等
  • 断言(Assertions):see()、seeElement()、dontSee() 等
  • 抓取器(Grabbers):grabTextFrom()、grabAttributeFrom() 等,返回值供后续使用

3. Actor(测试执行者)

Codeception 将测试抽象为“某个人”的行为:

  • AcceptanceTester —— 真实用户
  • FunctionalTester —— 了解应用内部的测试者
  • UnitTester —— 开发者

这些 Actor 类的方法来自启用的模块,定义在各自的 suite 配置文件中。修改配置后,运行以下命令重建 Actor 类:

代码语言:javascript
复制
php vendor/bin/codecept build

4. 编写第一个测试

使用命令快速生成测试文件:

代码语言:javascript
复制
php vendor/bin/codecept generate:cest Acceptance Login

生成后的示例(推荐使用 final class):

代码语言:javascript
复制
<?php
namespace Tests\Acceptance;

use Tests\Support\AcceptanceTester;

finalclass LoginCest
{
    publicfunction loginSuccessfully(AcceptanceTester $I): void
    {
        $I->amOnPage('/login');
        $I->fillField('邮箱', 'tinywan@example.com');
        $I->fillField('密码', 'secret123');
        $I->click('登录');
        $I->see('欢迎回来,Tinywan!');
    }
}

5. 配置与运行测试

在 tests/Acceptance.suite.yml 中配置网站地址:

代码语言:javascript
复制
actor: AcceptanceTester
modules:
    enabled:
        - PhpBrowser:
            url: 'http://localhost:8000'

运行所有测试:

代码语言:javascript
复制
php vendor/bin/codecept run

运行指定套件并显示详细步骤:

代码语言:javascript
复制
php vendor/bin/codecept run Acceptance --steps

生成报告:

代码语言:javascript
复制
php vendor/bin/codecept run --html --xml

报告文件会保存在 tests/_output/ 目录中。

常用生成器命令

  • generate:cest —— 生成 Cest 测试
  • generate:feature —— 生成 Gherkin(BDD)文件
  • generate:pageobject —— 生成 Page Object
  • generate:stepobject —— 生成 Step Object
  • generate:helper —— 生成自定义 Helper
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 概述
  • 支持的三种测试类型
    • 1. 验收测试
    • 2. 功能测试
    • 3. 单元测试
  • 安装
  • 快速开始
    • 1. 项目初始化
    • 2. 核心语法风格
    • 3. Actor(测试执行者)
    • 4. 编写第一个测试
    • 5. 配置与运行测试
  • 常用生成器命令
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档