logo头像

Hello World

Codeception安装使用(一)

简介

Codeception是PHP的现代全栈测试框架。 受BDD的启发,它为您提供了一种绝对新的编写验收、功能和单元测试的方式。 由PHPUnit提供支持。

尽管TDD(测试驱动开发)受到广泛普及,但一些PHP开发人员从来没有为他们的应用程序编写自动化测试,主要是因为他们认为它很难、慢或无聊。Codeception框架是为了实际测试而开发的。 它允许以单一、连贯的方式进行编写单元、功能、集成和验收测试。

它可以称为BDD(行为驱动开发)框架。 所有的Codeception测试都以描述性方式编写。 只要看着测试本体,您就可以清楚地了解正在测试的内容以及如何进行测试。 即使是具有许多断言的复杂测试也是用简单的PHP域特定语言(DSL)编写的。

Yii2下的Codeception单元测试

因为近期开发项目一直使用Yii2框架。因此本文将介绍Yii2下的codeception的使用。
另外Codeception官方也提供了许多框架的文档。
Yii2: http://codeception.com/for/yii
Laravel: http://codeception.com/for/laravel
Wordpress: http://codeception.com/for/wordpress
Symfony: http://codeception.com/for/symfony

安装部署

1
composer require "codeception/codeception" --dev

我在安装的时候,发现Yii2已经集成了该插件,但是缺少”guzzlehttp/guzzle”依赖无法运行。于是我执行了。composer require guzzlehttp/guzzle

2018年1月23日 11:04:07更新一些遇到的坑:

运行时可能会遇到各种神奇的错误,这个时候一定要注意你的PHP版本。如果是PHP7版本,记的wget http://codeception.com/codecept.phar 。 不然你将遇到各种类找到等奇奇怪怪的错误…PHP5版本wget http://codeception.com/php5/codecept.phar

因为文章时效性,具体准确链接以官方网站为准。

在测试时,如果是高级模板(yii2-advanced-template),单元测试将区分不同的目录,在backend、frontend、common分别会有一个test文件夹,用于单元测试。

如果测试后台应用,就切换到backend目录,运行codecept run。如果想测试所有,则在项目根目录运行codecept run。

  • 初始化

    1
    codecept bootstrap
  • 配置数据库

    在上面我们说过,yii2的单元测试是区分目录的,数据库配置也是单独的。

    在config目录下,会有一个test.php和test-local.php存放单元测试的配置信息。

    我们需要将backend、frontend、common目录下的config目录分别配置。其配置和main里的配置类似

    在进行单元测试的时候,最好使用单独的测试数据库,以免在进行单元测试的时候,某些操作将数据库清空。
  • 运行

    1
    codecept run

    默认是没有codecept命令的,需要配置一下。
    windows在环境变量Path里加入 D:\Path\to\project\vendor\codeception\base

    QQ截图20180122154329.jpg

    通过模板创建测试

  • generate:cept suite filename - Generates a sample Cept scenario

  • generate:cest suite filename - Generates a sample Cest test
  • generate:test suite filename - Generates a sample PHPUnit Test with Codeception hooks
  • generate:phpunit suite filename - Generates a classic PHPUnit Test
  • generate:suite suite actor - Generates a new suite with the given Actor class name
  • generate:scenarios suite - Generates text files containing scenarios from tests
  • generate:helper filename - Generates a sample Helper File
  • generate:pageobject suite filename - Generates a sample Page object
  • generate:stepobject suite filename - Generates a sample Step object
  • generate:environment env - Generates a sample Environment configuration
  • generate:groupobject group - Generates a sample Group Extension

PS:本来对这些英文进行了翻译,但是怕翻译不准确,这里还是看英文比较舒服。

  • 对自己写的Helper函数进行测试

    1. 首先创建单元测试模板。

      1
      codecept g:test unit \libraries\\DataHelper
    2. 编写测试方法

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      public function testRemoveSpace()
      {
      $arr = [
      '半角空格'=>['123'=>' 123 ','你好'=>' 你好 '],
      '全角空格'=>['123'=>' 123  ','你好'=>' 你好  '],
      'Tab空格' =>['123'=>"\t123\t",'你好'=>"\t你好\t"],
      '混合空格'=>['你好,123'=>"\t      你好,123\t   "],
      ];
      foreach ($arr as $key => $list){
      foreach ($list as $k => $value){
      $result = DataHelper::removeSpace($value);
      expect('函数存在遗漏:'.$key, $result == $k)->true();
      }
      }
      }
    3. 进行单元测试

      1
      codecept run

    QQ截图20180122181453.jpg
    说明函数没有问题。我们来将函数故意写错,看一下是否可以报错。
    我们故意在半角空格处写错,发现可以报错。
    1.jpg

上一篇