2

我想编写 Behat/Mink 场景来检查某些用户帐户是否可以下载大文件。我可以使用该When I follow "largefile.zip"事件,但这似乎会下载整个文件。

我不想浪费时间和资源流式传输大文件,我想(例如)只检查 HTTPHEAD请求的结果,或者只是尝试使用 HTTP 请求开始下载文件,GET然后立即取消它并检查the response status code.

我怎么能用 Behat/Mink 做到这一点?

4

1 回答 1

1

我同意@NathanStretch 关于扩展的看法,所以这就是我所做的。

此示例基于使用http://download.thinkbroadband.com/5MB.zip作为下载 url。不完美,因为我没有在响应标头中看到文件名,但它确实有内容长度。

<?php

class DownloadContext extends Behat\MinkExtension\Context\RawMinkContext {
  private $headers = [];

  /**
   * @When /^I try to download "([^"]*)"$/
   */
  public function iTryToDownload($url)
  {
    $this->headers = get_headers($url);
  }

  /**
   * @Then /^I should see in the header "([^"]*)"$/
   */
  public function iShouldSeeInTheHeader($header)
  {
    assert(in_array($header, $this->headers), "Did not see \"$header\" in the headers.");
  }
}

使用具有以下内容的 .feature 文件:

  Scenario: Try to download a file
    When I try to download "http://download.thinkbroadband.com/5MB.zip"
    Then I should see in the header "Content-Length: 5242880"

如果您可以自己控制下载,那么您可以在标题中设置文件名并检查它而不是大小。如果大小可以变化当然更好,因为我认为这意味着必须拆分内容长度字符串,转换为 int然后进行比较。啊。可能有一个更优雅的解决方案。

希望能有所帮助。

于 2014-08-22T18:31:51.540 回答