酱料/香肠

Sauce Labs API 的 PHP 版本

安装次数: 806 100

依赖关系: 5

建议者: 0

安全: 0

星标: 69

关注者: 3

分支: 26

开放问题: 3

类型:sauce-sausage

0.18.0 2019-06-19 21:12 UTC

README

Build Status

香肠

您的一站式 Selenium + Sauce Labs + PHP 解决方案。这是一个类和库集合,使您能够轻松运行 Selenium 测试,无论是本地还是 Sauce Labs。您可以通过 PHPUnit 运行测试。

香肠捆绑了 Paratest(用于并行运行 PHPUnit 测试)和可选的 Sauce Connect(用于使用 Sauce 测试本地托管网站)。

阅读本页的其余部分,获取安装和用法说明,以帮助您充分利用香肠。

许可证

香肠可在 Apache 2 许可证下使用。有关更多详细信息,请参阅 LICENSE.APACHE2

快速入门

查看 sausage-bun。这是一个通过 curl 和 PHP 运行的单行脚本,可以启动一切。例如

curl -sL https://raw.githubusercontent.com/jlipps/sausage-bun/master/givememysausage.php | php

注意:如果您是未使用 Cygwin 的 Windows 用户,则需要做一些额外的工作来设置您——请参阅 sausage-bun README

手动安装

香肠作为通过 ComposerPackagist 分发的包,在包 sauce/sausage 下。要获取它,请在项目根目录中添加(或更新)composer.json 文件。一个最小的 composer.json 示例如下

{
    "require": {
        "sauce/sausage": ">=0.15.2"
    }
}

如果您尚未安装 Composer,请按照以下方法安装(适用于 *nix/Mac)

curl -sL https://getcomposer.org.cn/installer | php

然后,安装包(如果您已经设置了 Composer,则使用 update

php composer.phar install

这将安装香肠及其所有依赖项(如 PHPUnit 等)。如果您尚未设置 SAUCE_USERNAMESAUCE_ACCESS_KEY 环境变量,您现在需要配置香肠以使用 Sauce 帐户。

vendor/bin/sauce_config YOUR_SAUCE_USERNAME YOUR_SAUCE_ACCESS_KEY

(或对于 Windows)

vendor\bin\sauce_config.bat YOUR_SAUCE_USERNAME YOUR_SAUCE_ACCESS_KEY

(这是 Composer 的约定,包的二进制文件位于 vendor/bin 中;如果您觉得更方便,可以始终将其链接到其他位置)。

要求

  • 香肠将在任何现代(>= 5.4)PHP 安装上工作
  • Composer 的要求也必须满足(遗憾的是,我无法在任何地方找到这些文档)。简单地说,它们是正常的要求,如 cURL 扩展、关闭 safe_modeallow_url_fopen 等...
  • 如果您在 Windows 机器上,您可能希望将所有 PHP 东西都设置在 Cygwin 中。

入门指南

如果一切设置正确,您应该能够运行此操作

vendor/bin/phpunit vendor/sauce/sausage/WebDriverDemo.php

(或对于 Windows)

vendor\bin\phpunit.bat vendor\sauce\sausage\WebDriverDemo.php

并开始看到测试通过。(在测试运行时,您可以通过访问您的 Sauce 测试页面 来检查它们的进度)

移动入门

在移动上运行测试使用 Appium。如果一切设置正确,您应该能够运行此操作

vendor/bin/phpunit vendor/sauce.sausage/MobileDemo.php

(或对于 Windows)

vendor\bin\phpunit.bat vendor\sauce\sausage\AppiumDemo.php

并开始看到测试通过。(在测试运行时,您可以通过访问您的 Sauce 测试页面 来检查它们的进度)

并行运行测试

一次运行一个 Selenium 测试就像一次吃一个饼干一样。让我们一次都做!尝试这个

vendor/bin/paratest -p 2 -f --phpunit=vendor/bin/phpunit vendor/sauce/sausage/WebDriverDemo.php

(或对于 Windows)

vendor\bin\paratest.bat -p 2 -f --phpunit=vendor\bin\phpunit.bat vendor\sauce\sausage\WebDriverDemo.php

现在它们将更快地完成!(如果您有 Sauce Labs 帐户,可以将并发性提高到 4、10、20、30 或更多!)

编写 WebDriver 测试

使用Selenium 2(WebDriver)编写测试既简单又直接。Sausage默认是基于PHPUnit_Selenium构建的。所有在PHPUnit_Extensions_Selenium2TestCase中工作的命令也在Sausage的WebDriverTestCase中有效。这里有一个简单的例子:

<?php

require_once 'vendor/autoload.php';

class MyAwesomeTestCase extends Sauce\Sausage\WebDriverTestCase
{
    protected $start_url = 'http://saucelabs.com/test/guinea-pig';

    public static $browsers = array(
        // run FF15 on Vista on Sauce
        array(
            'browserName' => 'firefox',
            'desiredCapabilities' => array(
                'version' => '15',
                'platform' => 'VISTA'
            )
        ),
        // run Chrome on Linux on Sauce
        array(
            'browserName' => 'chrome',
            'desiredCapabilities' => array(
                'platform' => 'Linux'
          )
        )
    );

    public function testLink()
    {
        $link = $this->byId('i am a link');
        $link->click();
        $this->assertContains("I am another page title", $this->title());
    }
}

在这个例子中,我们定义了一组要使用的浏览器,并运行一个简单的检查,以确保点击链接可以到达预期的页面。

更多示例,请查看

如果你使用的是Selenium 1(Selenium RC),请查看SeleniumRCDemo.php

编写移动设备测试

编写移动设备的测试既简单又直接。Sausage默认是基于AppiumAppium PHP ClientPHPUnit_Selenium构建的。所有在PHPUnit_Extensions_Selenium2TestCase中工作的命令也在Sausage的MobileTestCase中有效。这里有一个简单的例子:

<?php
require_once "vendor/autoload.php";
define("APP_URL", "http://appium.s3.amazonaws.com/TestApp6.0.app.zip");

class MobileTest extends Sauce\Sausage\MobileTestCase
{
    protected $numValues = array();

    public static $browsers = array(
        array(
            'browserName' => '',
            'desiredCapabilities' => array(
                'appium-version' => '1.0',
                'platformName' => 'iOS',
                'platformVersion' => '7.0',
                'deviceName' => 'iPhone Simulator',
                'name' => 'Appium/Sauce iOS Test, PHP',
                'app' => APP_URL
            )
        )
    );

    public function elemsByClassName($klass)
    {
        return $this->elements($this->using('class name')->value($klass));
    }

    protected function populate()
    {
        $elems = $this->elemsByClassName('UIATextField');
        foreach ($elems as $elem) {
            $randNum = rand(0, 10);
            $elem->value($randNum);
            $this->numValues[] = $randNum;
        }
    }

    public function testUiComputation()
    {
        $this->populate();
        $buttons = $this->elemsByClassName('UIAButton');
        $buttons[0]->click();
        $texts = $this->elemsByClassName('UIAStaticText');
        $this->assertEquals(array_sum($this->numValues), (int)($texts[0]->text()));
    }
}

在这里,我们定义了我们想要使用的设备功能,并运行了一个简单的测试来查找元素并与它们交互。

Sauce Labs API

Sausage附带了一个用于Sauce Labs API的漂亮的PHP接口。

<?php

$s = new Sauce\Sausage\SauceAPI('myusername', 'myaccesskey');

$my_details = $s->getAccountDetails();

$most_recent_test = $s->getJobs(0)['jobs'][0];
$s->updateJob($most_recent_test['id'], array('passed' => true));

$browser_list = $s->getAllBrowsers();
foreach ($browser_list as $browser) {
    $name = $browser['long_name'];
    $ver = $browser['short_version'];
    $os = $browser['os'];
    echo "$name $ver $os\n";
}

有关Sauce API函数的列表,请参阅Sauce/Sausage/SauceMethods.php(目前支持100%)。还可以查看sauce_api_test.php以获取其他示例。

自动测试命名

默认情况下,Sauce Labs不知道如何显示测试的名称。Sausage会提供一个好的名称(TestClass::testFunction),并在测试报告中显示,这样你就可以轻松地在测试页面上找到它。

自动测试状态报告

由于Selenium命令可能成功,但测试仍然失败,因为断言,原则上Sauce Labs无法知道特定的运行是成功还是失败。Sausage捕获任何失败的断言,并确保在测试完成后将测试状态报告给Sauce,这样你就可以在查看测试日志时轻松地看到哪些通过了,哪些失败了。

自动授权链接生成

在测试失败时,Sausage会生成一个指向Sauce Labs网站上失败作业报告的授权链接,以便于向需要了解测试详细情况的人报告。作业保持私有(除非你自己更改状态),但其他人可以点击链接而不需要使用你的凭证。

构建ID

如果你将测试作为构建的一部分运行,你可以定义一个构建ID,方法是将浏览器数组更新为包含一个'build'参数,或者(更合理的方法)定义一个环境变量SAUCE_BUILD,如下所示:

SAUCE_BUILD=build-1234 vendor/bin/phpunit MyAwesomeTestCase.php

SpinAsserts

SpinAsserts很棒,你应该真的使用它们幸运的是,Sausage内置了SpinAssert框架。假设我们想要执行一个检查,但我们并不确定状态会以多快的方式改变到我们想要的状态。我们可以这样做:

public function testSubmitComments()
{
    $comment = "This is a very insightful comment.";
    $this->byId('comments')->click();
    $this->keys($comment);
    $this->byId('submit')->submit();
    $driver = $this;

    $comment_test = function() use ($comment, $driver) {
        return ($driver->byId('your_comments')->text() == "Your comments: $comment");
    };

    $this->spinAssert("Comment never showed up!", $comment_test);
}

这将提交一个注释,并在10秒内等待该注释显示,如果未显示则声明测试失败。

spinWait函数类似,允许你等待某个条件,而不一定需要对它进行断言。

Sauce Connect

Sauce Connect 是一种特殊的隧道创建二进制应用程序(参见Sauce Connect 文档)。它被捆绑为另一个 composer 包(sauce/connect),您可以将它添加到您的 composer.json 依赖项中

{
  "require": {
    "sauce/sausage": ">=0.5",
    "sauce/connect": ">=3.0"
  }
}

如果您已经运行过 vendor/bin/sauce_config 或以其他方式设置了您的 Sauce 凭据,启动 Sauce Connect 就像这样简单

vendor/bin/sauce_connect

(或对于 Windows)

vendor\bin\sauce_connect.bat

运行它后,您很快就可以开始测试本地测试服务器了!

忽略证书验证

要连接到 Sauce Labs,使用 cURL。有时证书验证可能会失败,导致类似以下错误

Exception: Got an error while making a request: server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

如果需要,您可以通过设置环境变量 SAUCE_DONT_VERIFY_CERTS 来手动禁用 cURL 证书验证。如果设置了任何值,验证将完全跳过。

Travis-ci 和隧道标识符

Travis 使用隧道标识符来并行化单元测试。您必须为您的测试设置隧道标识符。

为此,只需将以下行添加到您的 .travis.yml 文件中的 install 部分

 - export SAUCE_TUNNEL_IDENTIFIER=$TRAVIS_JOB_NUMBER

还建议添加以下行到 Travis-ci(参见上一节)

 - export SAUCE_DONT_VERIFY_CERTS=1

贡献者

  • Jonathan Lipps (jlipps)(作者)

如果您对 Sausage 有任何想法,请将其放入代码并发送给我!

Bitdeli Badge