ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Yii 2 受入テスト(验收测试)实战指南:用 Codeception 从用户视角验证 Web 应用

Yii 2 受入テスト(验收测试)实战指南:用 Codeception 从用户视角验证 Web 应用 Yii 2 受入テスト验收测试实战指南用 Codeception 从用户视角验证 Web 应用【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址: https://gitcode.com/gh_mirrors/yi/yii2导读本文围绕 Yii 2 框架官方文档中的验收测试Acceptance Test专题展开讲解如何借助 Codeception 测试框架通过 PhpBrowser 或真实浏览器以 HTTP 协议访问被测试应用、从用户视角验证完整业务场景。读完本文你将掌握验收测试与单元测试、功能测试的定位差异了解 Yii 2 与 Codeception 的官方集成方式、测试环境的搭建命令以及运行项目模板测试的具体途径。什么是验收测试Acceptance Test根据 受入テスト日文版 与 Acceptance Tests英文版 的定义验收测试是从用户user的视角来验证场景scenario的测试。被测试的应用既可以通过 PhpBrowser 访问也可以通过真实浏览器访问。无论哪种方式浏览器都是通过 HTTP 进行通信的因此应用必须由 Web 服务器托管served via web server。这段话包含了验收测试的三个关键特征用户视角测试脚本模拟的是“用户做了什么操作、期望看到什么结果”而不是“某个函数是否返回了正确值”。HTTP 通信与在进程内直接调用代码不同验收测试的每一次交互都经过真实的 HTTP 请求/响应链路。必须部署到 Web 服务器由于依赖 HTTP被测应用需要被真实托管例如php yii serve、Apache、Nginx 或内置 PHP 开发服务器这是验收测试与功能测试在运行前提上的根本区别。在 Yii 2 中验收测试的落地依赖 Codeception 测试框架。Codeception 提供了“场景描述 断言”的 DSL 语法并封装了浏览器自动化与 HTTP 客户端模块使开发者可以用接近自然语言的方式书写验收场景。三种测试类型的定位验收、功能与单元Yii 2 对 Codeception 提供官方维护的集成支持支持三种测试类型详见 テスト環境の構築日文版 与 Testing environment setup英文版测试类型验证目标视角关键手段单元测试Unit一段代码单个代码单元是否符合预期开发者直接调用类与方法如 PHPUnit功能测试Functional从用户视角验证场景用户浏览器模拟emulation在代码内直接执行应用实例验收测试Acceptance从用户视角验证场景用户在真实浏览器环境中通过 HTTP 访问可以看到功能测试与验收测试的“验证目标”都是用户视角的场景二者的差异体现在实现机制上这正是 機能テスト功能测试 中所强调的功能测试不通过 HTTP 通信而是填充 POST、GET 等环境参数后直接从代码中执行应用实例application instance功能测试通常比验收测试更快并且在失败时能提供详细的堆栈跟踪stack traces官方给出了一条实用的经验法则rule of thumb除非有特殊的 Web 服务器配置或者由 JavaScript 驱动的复杂 UI否则应优先选择功能测试。从源码结构可以印证这一点Yii 2 框架自身在 tests/TestCase.php 中提供了mockApplication()与mockWebApplication()方法直接以yii\console\Application/yii\web\Application类在内存中构建应用实例再通过 tests/bootstrap.php 定义YII_ENV为test、关闭YII_ENABLE_ERROR_HANDLER并加载框架入口framework/Yii.php。这种“进程内构建应用”的方式正是功能测试/单元测试的典型基础设施而验收测试则需要另行启动 Web 服务器由 Codeception 的浏览器模块通过 HTTP 访问。Codeception 与 Yii 2 的官方集成与安装Yii 2 与 Codeception 的集成是官方维护的officially maintained integration。这一集成保证三种测试类型在yii2-basic与yii2-advanced两个官方项目模板中都提供开箱即用的测试集ready to use test sets两个模板都预装了 Codeception开发者无需额外安装即可直接编写与运行测试。如果你的项目没有使用这两个模板需要自行安装 Codeception 及相关辅助包命令如下摘自 テスト環境の構築composer require --dev codeception/codeception composer require --dev codeception/specify composer require --dev codeception/verify说明codeception/codeception测试框架本体提供场景 DSL、模块系统与 CLIcodecept命令codeception/specify提供 BDD 风格的specify()分组断言语法codeception/verify提供更简洁的断言风格如verify($x)-equals($y)。作为对照本仓库 composer.json 的require-dev中框架自身测试使用phpunit/phpunit: ^9.6并配套phpstan、rector等静态分析与重构工具。这说明框架核心测试走 PHPUnit 路线而面向应用开发者的验收测试走 Codeception 路线两者并存是 Yii 2 生态的常态。验收测试的工作原理PhpBrowser 与真实浏览器验收测试通过以下两种客户端之一访问被测应用1. PhpBrowser无头浏览器模拟PhpBrowser 基于 HTTP 客户端如 Guzzle实现不加载 JavaScript。它的优势是无需安装浏览器驱动、无需图形环境适合 CI 环境执行速度远快于真实浏览器适用于传统的表单提交、链接跳转、Cookie 与 Session 验证等场景。2. 真实浏览器WebDriver通过 WebDriver如 Selenium、ChromeDriver驱动真实浏览器完整执行页面中的 JavaScript。适用于大量依赖前端 JS 渲染的单页应用SPA复杂 UI 交互拖拽、动态加载、弹窗等需要验证真实浏览器兼容性的场景。一个典型的验收测试场景文件Codeception 标准语法配合 Yii2 模块时可通过$I访问应用配置与数据库大致如下?php // tests/acceptance/LoginCest.php class LoginCest { public function tryToLogin(AcceptanceTester $I) { $I-amOnPage(/site/login); $I-fillField(#loginform-username, admin); $I-fillField(#loginform-password, secret); $I-click(login-button); $I-see(Logout); // 断言登录成功后的可见内容 } }对应的 Codeception 套件配置acceptance.suite.yml示意通常包含actor: AcceptanceTester modules: enabled: - PhpBrowser: url: http://localhost:8080 # 被测应用的 Web 服务器地址 - Yii2: part: init # 按需启用 Yii2 模块的 ORM/夹具能力注意上述配置为 Codeception 生态的通用写法具体模块参数请以你所使用模板中的tests/acceptance.suite.yml实际内容为准。如何在模板项目中运行验收测试受入テスト 明确给出了运行途径如果你基于**アドバンスト・テンプレート高级模板**开发请参阅该模板的“测试”指南start-testing.md了解运行细节如果你基于**ベーシック・テンプレート基础模板**开发请查看其 README 中的 testing 章节。这两个模板是独立于框架仓库的官方项目模板yiisoft/yii2-app-advanced与yiisoft/yii2-app-basic测试相关文件tests/目录、codeception.yml、各 suite 配置随模板一起分发。通用的运行流程为使用模板初始化项目并安装依赖Composer启动 Web 服务器托管应用如php yii serve --port8080或配置 Nginx/Apache在tests/acceptance.suite.yml中把url指向该服务器地址执行 Codeception 命令运行验收套件vendor/bin/codecept run acceptance从仓库测试基础设施看 Yii 的测试方法论虽然框架核心自身以 PHPUnit 为主但 tests/bootstrap.php 与 tests/TestCase.php 展示了 Yii 2 测试基建的关键设计可帮助你理解模板中测试环境的构成逻辑环境常量YII_ENVtest、YII_DEBUGtrue、关闭YII_ENABLE_ERROR_HANDLER确保测试期间暴露全部错误入口加载优先加载 Composer 自动加载器再加载framework/Yii.php并设置yiiunit别名应用模拟mockApplication()与mockWebApplication()以最小配置在内存中构建应用idtestapp、basePath、vendorPath、cookieValidationKey等tearDown()时自动销毁Yii::$app并关闭 Session参数化配置通过tests/data/config.php提供getParam()可切换不同数据库连接switchDbConnection()。这套思路同样适用于 Codeception 场景在验收测试中通过 Yii2 模块访问Yii::$app与数据库在功能测试中直接执行应用实例从而在“用户视角”与“代码内部状态”之间建立可验证的桥梁。何时该用验收测试实践建议结合 テスト日文版概述 与功能测试的对比实践上可遵循以下建议优先功能测试除非存在特殊 Web 服务器配置或复杂 JS UI功能测试更快、失败定位更容易应作为默认选择复杂前端用验收测试页面高度依赖 JavaScript 渲染、或需要验证真实浏览器行为时使用 WebDriver 型验收测试验收测试需要稳定的运行环境被测应用必须由 Web 服务器托管且测试期间需保持服务器可用因此 CI 中应一并配置启动与清理流程两者可互补功能测试覆盖业务逻辑主路径验收测试覆盖关键用户旅程注册、登录、下单等端到端流程共同构成完整测试金字塔。小结验收测试是 Yii 2 测试体系中从用户视角把关应用质量的最后一环它以 HTTP 方式访问由 Web 服务器托管的真实应用借助 Codeception 的场景 DSL 描述并断言用户行为结果。无论是通过 PhpBrowser 快速验证传统页面还是通过真实浏览器验证 JS 驱动的复杂交互Yii 2 都在官方模板中预置了完整可用的测试基础设施。深入理解验收测试与功能测试、单元测试的边界并根据页面复杂度合理选择测试手段是构建健壮 Yii 2 应用的关键实践之一。【免费下载链接】yii2Yii 2: The Fast, Secure and Professional PHP Framework项目地址: https://gitcode.com/gh_mirrors/yi/yii2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表