phmlabs/smoke

此包已被废弃且不再维护。未建议替代包。

Smoke 可以用来检查一个 Web 平台是否基本正常工作。

此包的官方仓库似乎已消失,因此该包已被冻结。

维护者

详细信息

github.com/leankoala-gmbh/Smoke

此包尚无发布版本,可用的信息不多。


README

目的

Smoke 可以用来检查一个 Web 平台是否基本正常工作。

您只需定义扫描器的入口点并开始。Smoke 捕获器将扫描它找到的前 n 个(定义为命令行参数)网站,并对照一组定义的规则进行检查。

Smoke.phar analyse "http://www.amilio.de"

安装

使用 curl 下载 phar 归档

curl -O -LSs http://pharchive.phmlabs.com/archive/phmLabs/Smoke/current/Smoke.phar && chmod +x Smoke.phar

安装完成。

配置

分析命令行参数

  • --num_urls 定义要检查的 URL 数量。标准是 20。
    示例: Smoke.phar analyse --num_urls="20" test.com

  • --parallel_requests 定义并行进行的请求数量。标准是 10。
    示例: Smoke.phar analyse --parallel_requests="10" test.com

  • --config_file 设置用于后续测试的配置文件
    示例: Smoke.phar custom --config_file="path/to/my.yml"

配置文件

您可以使用 URL 白名单黑名单 以及规则集 定义 来配置任何 Smoke 运行。配置存储在单个 YAML 文件中,因此可以在后续测试运行中使用。配置文件可能包含最多三个元素

  • whitelist 包含一个用破折号分隔的 URL 正则表达式模式列表。这允许 Smoke 在 HTML 源中找到时测试相关的 URL。

  • blacklist 可选 - 包含一个用破折号分隔的 URL 正则表达式模式列表,Smoke 不允许测试。这对于任何独立项目的链接第三方域或服务很有用,例如子域上的在线商店。

  • rules 可选 - 包含具有相应 PHP 类和测试参数的命名测试列表。

目前,无法 黑名单 某个 URL 模式并 白名单 与黑名单匹配的另一个。

配置示例和用法

responseRetriever:
  class: whm\Smoke\Extensions\SmokeResponseRetriever\Retriever\Crawler\Crawler
  parameters:
    startPage: "http://www.amilio.de"
    filters:
      _BlackWhiteListFilter:
        class: whm\Smoke\Extensions\SmokeResponseRetriever\Retriever\Crawler\Filter\BlackWhiteListFilter

      _ValidUrlFilter:
        class: whm\Crawler\Filter\ValidUrlFilter

      _ForeignDomainFilter:
        class: whm\Smoke\Extensions\SmokeResponseRetriever\Retriever\Crawler\Filter\ForeignDomainFilter

whitelist:
 - ^www.amilio.de^
 
blacklist: 
 - ^www.amilio.de/api^

rules:
  HtmlSize:
    class: whm\Smoke\Rules\Html\SizeRule
    parameters:
      maxSize: 1

  ImageSize:
      class: whm\Smoke\Rules\Image\SizeRule
      parameters:
        maxSize: 1

reporter:
  XUnitReporter:
    class: whm\Smoke\Extensions\SmokeReporter\Reporter\XUnitReporter
    parameters:
      filename: /tmp/xunit.xml

更多示例,请参阅examples目录。要使用您的配置文件调用Smoke,只需在命令行中输入

Smoke.phar custom --config_file="test.yml"

如何编写自定义规则

每个规则定义在一个简单的PHP类中,该类实现了具有validate方法的whm\Smoke\Rules\Rule接口。这是Rule基本规定的内容

<?php
namespace whm\Smoke\Rules;

use whm\Smoke\Http\Response;

interface Rule
{
    public function validate(Response $response);
}

### 编写自己的规则

规则配置的可选init方法可以接收一个参数,其值在您的Smoke配置文件中定义。在您的validate方法内部,使用传入的Response对象;如果测试失败,则抛出ValidationFailedException

<?php
namespace MyApplication;

use whm\Smoke\Http\Response;
use whm\Smoke\Rules\Rule;
use whm\Smoke\Rules\ValidationFailedException;

class FooTest implements Rule
{
	private $search;
	
    public function init($foo = "foo")
    {
        $this->foo = $foo;
    }
    
    public function validate(Response $response)
    {
        if ( stripos($response->getBody(), $this->foo ) === false) {
            throw new ValidationFailedException( $this->foo . ' not found' );
        }
    }
}

与配置文件一起使用

在您的Smoke配置文件中,您可以像这样引用您的规则

rules:
  MyFooTest:
    class: MyApplication\FooTest
    parameters:
      foo: "bar"    

响应对象

Response对象提供了一系列有用的快捷方式,用于处理页面请求完成之前发生的事情

<?php
use whm\Smoke\Http\Response;

class BarTest implements Rule
{
    public function validate(Response $response)
    {
    	// HTTP status code, e.g. 400
    	$status       = $response->getStatus();
    	
    	// S'th like "text/html"
    	$content_type = $response->getContentType();
    	
    	// String, usually page HTML
    	$body         = $response->getBody();
    	
    	// Integer (milliseconds)
    	$duration     = $response->getDuration();
    	
    	// To be explained
    	$request      = $response->getRequest();
    	$header       = $response->getHeader()
	}
}