Yii2中如何使用CodeCeption

Yii2和CodeCeption

CodeCeption是一个全栈的PHP测试框架,关于CodeCeption的介绍见:CodeCeption官方文档

Yii2官方增加了对CodeCeption的支持,这里主要讲解Yii2里如何基于CodeCeption进行单元测试和功能测试。

知识准备

执行后面操作的前提是本地已经正确安装配置composer。

通过脚手架开始一个Yii2项目

通过Composer,我们可以很简单的在本地基于脚手架创建一个Yii2项目:

  • 进入一个可以通过web服务器访问的目录:cd <webroot>
  • 执行:composer global require "fxp/composer-asset-plugin:~1.0.0" 命令验证必须插件是否全局安装
  • 执行:composer create-project yiisoft/yii2-app-basic basic 命令在当前目录的basic目录创建一个”yiisoft/yii2-app/basic”脚手架项目。注意,如果是本地开发环境,你也可以增加--prefer-dist --stability=dev选项,参考stability选项,这样,composer会到github上拉取最新的开发包下来。

通过以上操作,你的本地目录应该大致如下:

webroot/basic
    |--- assets/
    |--- commands/
    |--- config/
    |--- controllers/
    |--- mail/
    |--- models/
    |--- runtime/
    |--- tests/
    |--- vendor/
    |--- views/
    |--- web/
    |--- .gitignore
    |--- composer.json
    |--- composer.lock
    ...

其中,tests就是框架默认创建的测试代码目录,里面有框架提供的一些测试的例子,你可以按如下步骤测试一下:

  • cd basic/tests/ 进入CodeCeption测试用例所在目录
  • codecept build 将构建测试用例(根据cept生成tester)
  • codecept run 运行测试用例

如果你终端提示codecept命令未知,请执行以下命令安装codeception扩展:

composer global require "codeception/codeception=2.0.*"
composer global require "codeception/specify=*"
composer global require "codeception/verify=*"
composer require --dev yiisoft/yii2-faker:*

正常安装后,再执行codecept run时,如果看到类似如下的报错:

1) Failed to ensure that about works in [1mAboutCept[22m (D:\php\basic\tests\codeception\acceptance\AboutCept.php)
Can‘t be on page "/index-test.php?r=site%2Fabout":
GuzzleHttp\Exception\ConnectException: cURL error 7: Failed to connect to localhost port 8080: Connection refused

提示在xx端口连接拒绝,这里,我们需要修改一下配置文件:

  • 修改basic/tests/codeception.yml里面的config/test_entry_url配置,为你实际的项目入口地址
  • 修改basic/tests/codeception/acceptance.suite.yml里面的modules/config/PhpBrowser配置为你实际的地址

完成后,再执行codecept run,你应该可以看到终端没有报错了。

我们来看看tests目录的结构:

webroot/basic/tests
    |--- codeception/
    |        |--- _output/
    |        |--- _pages/
    |        |--- acceptance/
    |        |--- bin/
    |        |--- config/
    |        |--- fixtures/
    |        |--- functional/
    |        |--- templates/
    |        |--- unit
    |        |--- _bootstrap.php
    |        |--- acceptance.suite.yml
    |        |--- functional.suite.yml
    |        |--- unit.suite.yml
    |--- codeception.yml

其实,这里acceptance、functional、unit是Yii2默认为我们创建的三个suite,顾名思义,分别用于验收,功能,单元测试。

而执行codecept run时,会依次将codeception目录的所有suite运行,故,你可以通过codecept run suitename的方式制定执行某个suite;同理,可以执行codecept run suitename testname的方式执行某个test。

你可以仿照functional,unit,acceptance里面的例子写你自己的测试用例。

注:通过脚手架创建的Yii2项目会自动增加gitignore,将vendor中的内容从版本库中忽略,如果你需要提交,请手动修改gitignore文件。

从已有的Yii2项目开始CodeCeption

对于一个已有的Yii2项目,我们需要遵循如下几步来配置CodeCeption。

  • 在项目根目录执行composer init来初始化composer。
  • 执行如下指令确保codeception的扩展包已经全局安装
    • composer global require "codeception/codeception=2.0.*"
    • composer global require "codeception/specify=*"
    • composer global require "codeception/verify=*"
    • composer require --dev yiisoft/yii2-faker:*
  • 在项目合适的目录创建一个codeception目录作为codeception的测试代码目录
  • 进入codeception目录,执行codecept bootstrap来初始化生成测试代码脚手架。
  • 仿照yii2-app-basic,修改codeception.yml
  • 仿照yii2-app-basic,修改codeception/tests/_bootstrap.php文件
  • 仿照yii2-app-basic,修改codeception/tests/*.suite.yml
  • 增加一个codeception/tests/config目录,以存储配置文件。仿照yii2-app-basic的形式增加config.php,common.php

具体的配置内容依实际情况而定,具体可以参考yii2-app-basic提供的例子。

附:如何基于yii2-app-basic按照module来组织项目代码

前面所述,通过脚手架创建yii2-app-basic开发环境后,我们的代码目录结构为:

webroot/basic
    |--- assets/
    |--- commands/
    |--- config/
    |--- controllers/
    |--- mail/
    |--- models/
    |--- runtime/
    |--- tests/
    |--- vendor/
    |--- views/
    |--- web/
    |--- .gitignore
    |--- composer.json
    |--- composer.lock
    ...

这个结构是Yii2默认创建的目录,我们可以看到它并没有安装module进行划分。我们可以对其进行调整:

  • 新建一个modules目录,假设默认的module为demo
  • 在modules目录下面新建demo目录作为demo模块代码存放目录
  • 将上面的controllers,models,views三个目录移到demo目录下面
  • 在demo目录下新建一个Module.php,新建一个类继承自[[\yii\base\Module]],代码见后。
  • 在config目录下面增加一个modules.php,增加对demo目录的配置
  • 修改web.php,增加对modules.php的引用
  • 修改index.php,增加@modules的别名
  • 对应调整modules/demo/里面的namespace

按照以上步骤调整后的路径如下:

webroot/basic
    |--- assets/
    |--- commands/
    |--- config/
    |--- modules/
    |        |--- demo/
    |        |        |--- controllers/
    |        |        |--- views/
    |        |        |--- models/
    |        |--- ...
    |--- mail/
    |--- runtime/
    |--- tests/
    |--- vendor/
    |--- web/
    |--- .gitignore
    |--- composer.json
    |--- composer.lock
    ...

各文件的内容如下:

basic/modules/demo/Module.php

<?php
 /**
  * Module.php
  *
  * @author        fangliang
  * @create_time       2015-06-16
  */

namespace modules\demo;

class Module extends \yii\base\Module
{
    public $layout = "main";
    public $controllerNamespace = ‘modules\demo\controllers‘;

    public function init()
    {
        parent::init();
        //do something init here
    }
} 

basic/web/index.php

<?php

// comment out the following two lines when deployed to production
defined(‘YII_DEBUG‘) or define(‘YII_DEBUG‘, true);
defined(‘YII_ENV‘) or define(‘YII_ENV‘, ‘dev‘);

require(__DIR__ . ‘/../vendor/autoload.php‘);
require(__DIR__ . ‘/../vendor/yiisoft/yii2/Yii.php‘);

$config = require(__DIR__ . ‘/../config/web.php‘);

Yii::setAlias("@modules",dirname(__DIR__) .‘/modules‘ );

(new yii\web\Application($config))->run();

basic/config/web.php

<?php

$params = require(__DIR__ . ‘/params.php‘);

$config = [
    ‘id‘ => ‘basic‘,
    ‘basePath‘ => dirname(__DIR__),
    ‘bootstrap‘ => [‘log‘],
    ‘components‘ => [
        ‘request‘ => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            ‘cookieValidationKey‘ => ‘0_wkmOLxql9rlIaqjYNPFL3pYDfLNuLk‘,
        ],
        ‘cache‘ => [
            ‘class‘ => ‘yii\caching\FileCache‘,
        ],
        ‘user‘ => [
            ‘identityClass‘ => ‘modules\demo\models\User‘,
            ‘enableAutoLogin‘ => true,
        ],
        ‘errorHandler‘ => [
            ‘errorAction‘ => ‘demo/site/error‘,
        ],
        ‘mailer‘ => [
            ‘class‘ => ‘yii\swiftmailer\Mailer‘,
            // send all mails to a file by default. You have to set
            // ‘useFileTransport‘ to false and configure a transport
            // for the mailer to send real emails.
            ‘useFileTransport‘ => true,
        ],
        ‘log‘ => [
            ‘traceLevel‘ => YII_DEBUG ? 3 : 0,
            ‘targets‘ => [
                [
                    ‘class‘ => ‘yii\log\FileTarget‘,
                    ‘levels‘ => [‘error‘, ‘warning‘],
                ],
            ],
        ],
        ‘db‘ => require(__DIR__ . ‘/db.php‘),
    ],
    ‘params‘ => $params,
    ‘modules‘=> require(__DIR__.‘/modules.php‘),
];

if (YII_ENV_DEV) {
    // configuration adjustments for ‘dev‘ environment
    $config[‘bootstrap‘][] = ‘debug‘;
    $config[‘modules‘][‘debug‘] = ‘yii\debug\Module‘;

    $config[‘bootstrap‘][] = ‘gii‘;
    $config[‘modules‘][‘gii‘] = ‘yii\gii\Module‘;
}

return $config;

basic/config/modules.php

<?php

return [
    ‘demo‘ =>[
        ‘class‘=>‘modules\demo\Module‘,
    ]
];

在完成以上的配置后,基本的配置就完成了。

如果是一个全新的项目,你可以直接fork我的这个脚手架:Yii2模块化Web应用脚手架

时间: 2024-10-01 23:53:47

Yii2中如何使用CodeCeption的相关文章

Yii2中的模块、应用程序(Module,Application)

原文地址:http://www.kuitao8.com/20140626/2715.shtml 模块(Module ) 模块是一个功能独立的逻辑单元,每一个模块都可以包含有多个子模块,但每个模块只能有一个对应的父模块(如果有的话).它的定义在yii\base\Module 应用程序(Application) Yii2中的应用程序有两种:web应用程序(yii\web\Application)和控制台应用程序(yii\console\Application).他们都继承于yii\base\Appl

Yii2中多表关联查询(with、join、joinwith)

表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order         (id  order_name   customer_id   book_id) 图书表Book          (id  book_name    author_id) 作者表Author        (id  author_name) 模型定义 下面是这4个个模型的定义,只写出其中的关联 Customer class Customer ex

yii2中的资源....

1.模板文件中访问view和controller,view : $this,controller :$this->context 模板文件显示流程: 1.控制器会在render中,把控制器本身,模板文件传给view 2.呈现模板文件,首先view会查找主题,主题如果拥有模板文件,则优先使用主题内模板文件.并将模板文件赋值给变量$content 3.呈现布局文件,同样查找主题,并将$content作为变量导入 4.引入模板文件时,是发生在view中,所以$this就是view 2.注册资源 reg

yii2中添加验证码的实现方法

本文实例讲述了yii2中添加验证码的实现方法.分享给大家供大家参考,具体如下: 首先,在模型中添加验证码字段: ? 1 2 3 public function rules(){ return ['verifyCode', 'captcha'], } 其次,可以在函数attributeLabels中添加前台页面中验证码的字段名称: ? 1 2 3 public function atrributeLabels(){ return ['verifyCode'=>'Verification Code'

Yii2中多表关联查询(join、joinwith) with是不执行sql的

Yii2中多表关联查询(join.joinwith) 我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name customer_id book_id) 图书表 (id book_name author_id) 作者表 (id author_name) 模型定义 下面是这4个个模型的定义,只写出其中的关联 Customer class Customer extends \

Yii2中多表关联查询(join、joinwith)

我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_name       customer_id   book_id) 图书表                    (id  book_name       author_id) 作者表                    (id  author_name) 模型定义 下面是这4个个模型的定义,只写

【PHP】Yii2中事务的使用以及代码实例

Yii2中事务的使用以及代码实例 前言 一般我们做业务逻辑,都不会仅仅关联一个数据表,所以,会面临事务问题. 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性.一致性.隔

PHP在yii2中封装SuperSlide 幻灯片编写自己的SuperSlideWidget的例子

因为近期给朋友公司做个门户网站,把荒置了6.7年的PHP又重新拾起,发现PHP这些年兴旺多了,很多新的东西看的不明不白,研究了几个框架ZendFramework.thinkphp.Symfony.yii2,也曾经考虑直接用网上现有的开源cms,要么因为商用授权太贵,要么后台太复杂,要么覆盖行业太多导致业务复杂,看了一通代码,头晕得很,最终选择yii2自己开发个轻量的cms+shop系统,慢慢的做,应该能做出后台简单.有自己特色的网站系统来!一下是我的一些开发过程和经验,因为没有考虑太多的技术和通

Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)(转)

我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_name       customer_id   book_id) 图书表                    (id  book_name       author_id) 作者表                    (id  author_name) 模型定义 下面是这4个个模型的定义,只写