PHP开发教程

Yii测试

当我们写一个PHP类,我们一般会一步步或使用 die 或 echo 语句来验证它是如何工作的。

如果我们开发一个 Web 应用程序,使用表单来进入测试数据,以确保网页如我们预期的那样工作。

测试过程可以被自动化。

对于长期的项目,自动测试方法是有道理的,这是因为 -

  • 项目复杂和巨大

  • 不断地增长

  • 项目失败的成本过于昂贵

如果项目没有得到复杂和相对简单,又或者它仅仅是一个一次性的项目,那么自动化测试就是大材小用了。

准备测试

第1步 - 安装 Codeception 框架。运行下面的代码。

c:\basic>composer global require "codeception/codeception"
c:\basic>composer global require "codeception/specify"
c:\basic>composer global require "codeception/verify"

步骤2 - 运行如下

c:\basic>composer global status

输出“Changed current directory to <directory>”如下图所示:

11.png

应该加上'C:/Users/Administrator/AppData/Roaming/Composer/vendor/bin ' 到 PATH 环境变量。在本示例中,运行下面的代码 -

export PATH = $PATH:~/.composer/vendor/bin

注:windows系统可右键"我的电脑"=>"高级系统设置"=>"环境变量"来添加。

第3步 - 创建一个新数据库 “yii2_basic_tests” 

第4步 - 测试 tests 目录内运行。

C:\basic\tests>codeception/bin/yii migrate

数据库配置可以在这里找到:tests/codeception/config/config.php.

第5步 - 构建测试套件通过如下命令:

11.png

C:\basic\tests>codecept build

Fixtures

fixtures 的主要目的是建立环境处于未知状态,这样测试就可以按照预期的方式运行。 Yii提供一个接近固定的框架。在Yii fixture框 架中的一个关键概念是 fixture 对象。它代表了测试环境的特定方面。fixture 对象是 yii\test\Fixture 类的一个实例。

要定义 fixture ,应该创建一个新的类,并从 yii\test\Fixture 或 yii\test\ActiveFixture 扩展。

前者是为通用目的会更好,而后者是特别设计用数据库和 ActiveRecord 来工作的。

单元测试

单元测试帮助你来测试各项功能。例如,模型的功能或组件类。

第1步 - 在 tests/codeception/fixtures 目录下创建一个新的 fixture 在 ExampleFixture.php 文件中。

<?php
   namespace app\tests\codeception\fixtures;
   use yii\test\ActiveFixture;
   class ExampleFixture extends ActiveFixture {
      public $modelClass = 'app/models/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@yiibai.com";
         $this->assertTrue($m->save());
      }
      public function testUpdateMyUser() {
         $m = new MyUser();
         $m->name = "myuser2";
         $m->email = "myser2@yiibai.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 数据库,用户模型是数据库完整副本。

第3步 - 要开始测试,进入 tests 文件夹内并运行。

C:\basic\tests>codecept run unit models/ExampleTest

它应该通过所有测试。会看到如下输出结果 -

11.png

功能测试

功能测试可以帮助你  -

  • 使用浏览器模拟器应用测试

  • 验证功能的正常使用

  • 与数据库进行交互

  • 将数据提交到服务器端脚本

在 tests 测试文件夹中运行 -

c:\basic\tests>codecept generate:cept functional AboutPageCept

上述命令在 tests/codeception/functional 文件夹下创建一个 AboutPageCept.php 文件。

11.png

功能测试

功能测试可以帮助你  -

  • 使用浏览器模拟器应用测试

  • 验证功能的正常使用

  • 与数据库进行交互

  • 将数据提交到服务器端脚本

在 tests 测试文件夹中运行 -

c:\basic\tests>codecept generate:cept functional AboutPageCept

上述命令在 tests/codeception/functional 文件夹下创建一个 AboutPageCept.php 文件。

11.png

Powered by PHP二次开发 ©2008-2017