Yii - 测试
当我们编写 PHP 类时,我们会逐步调试它,或者使用 die 或 echo 语句来验证它是如何工作的。如果我们开发一个 Web 应用程序,我们会在表单中输入测试数据,以确保页面按预期工作。这个测试过程可以自动化。
自动测试方法适用于长期项目,即 −
- 复杂且庞大
- 不断增长
- 失败成本太高
如果您的项目并不复杂,而且相对简单,或者只是一次性项目,那么自动化测试可能有点过头了。
准备测试
步骤 1 − 安装 Codeception 框架。运行以下代码。
composer global require "codeception/codeception = 2.0.*" composer global require "codeception/specify = *" composer global require "codeception/verify = *"
步骤 2 − 运行以下命令。
composer global status
输出为"将当前目录更改为 <directory>"。您应将"<directory>/vendor/bin"添加到 PATH 变量中。在本例中,运行以下代码 −
export PATH = $PATH:~/.composer/vendor/bin
步骤 3 −创建一个名为 'yii2_basic_tests' 的新数据库。
步骤 4 − 在 tests 目录中运行。
codeception/bin/yii migration
数据库配置可以在 tests/codeception/config/config.php 中找到。
步骤 5 − 通过以下方式构建测试套件。
codecept build
Fixtures
Fixtures 的主要目的是将环境设置为未知状态,以便您的测试以预期的方式运行。Yii 提供了一个近似的 Fixture 框架。Yii Fixture 框架的一个关键概念是 Fixture 对象。它代表测试环境的一个特定方面。 Fixture 对象是 yii est\Fixture 类的一个实例。
要定义 Fixture,您应该创建一个新类并从 yii est\Fixture 或 yii est\ActiveFixture 扩展它。前者更适合通用 Fixture,而后者专门设计用于与数据库和 ActiveRecord 配合使用。
单元测试
单元测试可帮助您测试单个函数。例如,模型函数或组件类。
步骤 1 − 在 tests/codeception/fixtures 目录下名为 ExampleFixture.php 的文件中创建一个新 Fixture。
<?php namespace app ests\codeception\fixtures; use yii est\ActiveFixture; class ExampleFixture extends ActiveFixture { public $modelClass = ‘app⊨’MyUser'; } ?>
步骤 2 − 然后,在 tests/codeception/unit/models 文件夹中创建一个名为 ExampleTest.php 的新测试文件。
<?php namespace tests\codeception\unit\models; use app\models\MyUser; use yii\codeception\TestCase; class ExampleTest extends TestCase { public function testCreateMyUser() { $m = new MyUser(); $m->name = "myuser"; $m->email = "myser@email.com"; $this->assertTrue($m->save()); } public function testUpdateMyUser() { $m = new MyUser(); $m->name = "myuser2"; $m->email = "myser2@email.com"; $this->assertTrue($m->save()); $this->assertEquals("myuser2", $m->name); } public function testDeleteMyUser() { $m = MyUser::findOne(['name' => 'myuser2']); $this->assertNotNull($m); MyUser::deleteAll(['name' => $m->name]); $m = MyUser::findOne(['name' => 'myuser2']); $this->assertNull($m); } } ?>
在上面的代码中,我们定义了三个测试 −
- testCreateMyUser、
- testUpdateMyUser 和
- testDeleteMyUser。
我们刚刚创建了一个新用户,更新了他的姓名,并试图删除他。我们根据 yii2_basic_tests 数据库管理 MyUser 模型,该数据库是我们真实数据库的完整副本。
步骤 3 − 要启动 测试,请移至 tests 文件夹并运行。
codecept run unit models/ExampleTest
它应该通过所有测试。您将看到以下 −

功能测试
功能测试可帮助您 −
- 使用浏览器模拟器测试应用程序
- 验证功能是否正常工作
- 与数据库交互
- 将数据提交到服务器端脚本
在 tests 文件夹中运行 −
generate:cept functional AboutPageCept
上述命令在 tests/codeception/function 文件夹下创建 AboutPageCept.php 文件。在本次功能测试中,我们将检查我们的about页面是否存在。
步骤 1 − 修改 AboutPageCept.php 文件。
<?php $I = new FunctionalTester($scenario); $I->wantTo('perform actions and see result'); $I->amOnPage('site/about'); $I->see('about'); $I->dontSee('apple'); ?>
在上面给出的代码中,我们检查了我们是否在 about 页面上。显然,我们应该在页面上看到单词 'about' 而不是 'apple'。
步骤 2 − 通过运行测试。
run functional AboutPageCept
您将看到以下输出 −
