yipl/hookah

使用PHPUnit的烟雾测试库

1.6.25 2016-06-25 06:12 UTC

README

还记得那个“巴杰”(祖父)烟斗吗?我们在YIPL记得它。

Hookah Smoke tests

Hookah是一个针对任何Web应用的轻量级烟雾测试命令行库。作为一个简单的合理性检查,它检查给定的URL是否返回正确的响应代码,并且内容不为空。在你听这首hookah mero song(Karma乐队)的时候,测试通常会完成。基本上,它就像上图中的“巴杰”(祖父)在测试你的应用,他不知道如何点击东西、填写表单等等,他只是说是否看到了内容或者空白页面。这就是烟雾测试。

如果你想进行其他行为级别的测试,可以使用Behat/MinkCasperJs

构建状态

它本身没有测试,但会检查配置中提供的网站之一。例如,以下是一个Drupal 7测试安装状态的示例

Build Status

代码质量

代码质量在CodeClimate上进行分析。

Code Climate

先决条件

您需要在系统上安装PHP并运行composer,该软件包依赖于PHPUnitGoutte 2.x。Goutte依赖于Guzzle

安装

可以从以下github仓库克隆Hookah并按照以下步骤安装

  • git clone git@github.com:younginnovations/hookah.git
  • cd hookah
  • composer install --prefer-dist

与其他项目一起使用

您可以使用hookah与其他项目一起使用,它可在packagist上找到,您可以使用composer获取它。以下是一些方法

使用composer require

您可以通过以下方式运行composer require来将hookah添加到您的composer.json文件中

composer require --dev yipl/hookah

将hookah添加到您的composer.json文件中

您甚至可以在composer.jsonrequire-dev部分添加以下内容

	"yipl/hookah":	"~0.4"

如果您想使用goutte ~3.1,请使用以下版本

    "yipl/hookah":  "~0.5"

如果您想使用phpunit ~5.1(它需要PHP 5.6或更高版本),请使用以下版本

    "yipl/hookah":  "~0.6"

运行

可以使用以下命令运行应用程序

  • 使用命令composer install安装应用程序依赖项
  • 然后运行./vendor/bin/phpunit

如果您有网络连接,它应该像以下那样通过

Hookah Smoke tests passing

它运行的速度取决于您的网络速度,因为它试图从以下测试 Drupal 7安装中获取大约7个URL。

更快地运行测试

您可以使用以下命令使用paratest更快地运行测试

./vendor/bin/paratest -f --colors -m 2 -p 4 tests 

在本地机器上大约节省了一半的时间。

Docker

您的系统上没有安装PHP?没问题。如果您已经安装了docker,请在项目根目录下运行以下命令来运行Hookah

  • docker pull geshan/php-composer-alpine
  • docker run -v $(pwd):/var/www geshan/php-composer-alpine "composer install --prefer-dist"
  • docker run -v $(pwd):/var/www geshan/php-composer-alpine "./vendor/bin/phpunit --version"
  • docker run -v $(pwd):/var/www geshan/php-composer-alpine "./vendor/bin/phpunit"

第一条命令将从Docker Hub注册表中拉取容器,数据量仅为约~40 MB。第二条命令将安装容器中的所有Composer依赖。

第三条命令是可选的,它只会打印phpunit版本。第四条命令将在Docker容器中运行测试。

结构

应用程序在tests\Smoke文件夹中以非常简单的方式进行结构化。

Smoke文件夹包含其他2个文件夹

  • 前端:用于测试未登录时网站/应用程序前端用户可见部分的响应代码。
  • 后端:用于测试登录后可访问的网站/应用程序区域。

结构可以根据需要更改,因为现在这个应用程序是一个受这篇博客文章启发的smoke测试的验证(代码已经根据PSR-2和较新的库进行了不同的编写,但本质是相同的)。

设置

您可以在BaseTestCase.php中设置基本URL,并在BaseUserTestCase.php的构造函数方法中设置应用程序的用户,如下所示

/**
 * @var string
 */
protected $baseUrl = 'http://drupal-test.jelastic.elastx.net/';

//other variables to override

/**
 * @var string
 */
protected $loginPath = 'user/login';

/**
 * @var string
 */
protected $usernameField = 'name';

/**
 * @var string
 */
protected $passwordField = 'pass';

/**
 * @var string
 */
protected $submitButtonText = 'Log in';

/**
 * @var array
 */
protected $users =  [
    ['role'=> 'admin', 'identifier' => 'admin', 'password' => '123admin'],
];

/**
 * @var string
 */
protected $loggedInLinkText = 'Log out';

/**
 * To be overridden by child class
 *
 * @var string
 */
protected  $userRole = 'none';

您可以在从BaseTestCase.php文件扩展的PagesTest.Case中的providerFrontEnd方法中添加您的前端路径,如下所示

     return [
                [$this->baseUrl, 200],
                ['about', 200],
                ['not-existing', 404],
                ['.git', 403],
            ];

它使用php unit 数据提供者来为每个前端测试运行测试用例。

后端部分也是如此。设置可以在从BaseUserTestCase类扩展的AdminUserTest中找到,如下所示的providerBackEndPaths方法

    $adminPaths = [
        ['admin', 200],
        ['admin/config', 200],
        ['not-existing', 404]
    ];

目前,测试是为http://drupal-test.jelastic.elastx.net/进行的,以验证概念,建议根据需要,在烟雾测试中使用预发布服务器而不是生产服务器。

编码约定

我们遵循PSR-2,甚至包括编写测试。

与travis的集成

它可以与travis CI集成,以在每次推送时运行测试,请检查此项目的根目录中的.travis.yml文件。它也可以以相同的方式与其他CI系统集成。

贡献

我们期待您的反馈。