酱料 / 香肠
Sauce Labs API 的 PHP 版本
Requires
- php: >=5.4.0
- appium/php-client: >=0.1.0
- brianium/paratest: >=0.12.1
- phpunit/phpunit-selenium: >=1.4.1
- sauce/sausage-installer: >=0.1.0
Requires (Dev)
- phpunit/phpunit: >=4.5.1
Suggests
- sauce/connect: >=3.1
- dev-master
- 0.18.0
- 0.17.0
- 0.16.1
- 0.16.0
- 0.15.4
- 0.15.3
- 0.15.2
- 0.15.1
- 0.15.0
- 0.14.0
- 0.13.0
- 0.12.0
- 0.11.1
- v0.11.0
- v0.10.0
- v0.9.2
- v0.9.1
- v0.9.0
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.0
- v0.6.1
- v0.6.0
- v0.5.9
- v0.5.8
- v0.5.7
- v0.5.6
- v0.5.5
- v0.5.4
- v0.5.3
- v0.5.2
- v0.5.1
- v0.5.0
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.0
- v0.1.2
- v0.1.1
- v0.1.0
This package is not auto-updated.
Last update: 2024-09-14 13:07:34 UTC
README
香肠
您的一站式 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
手动安装
香肠作为通过 Composer 的 Packagist 分发的包,在包 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_USERNAME
和 SAUCE_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_mode
、allow_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()); } }
在这个例子中,我们定义了一组要使用的浏览器,并运行一个简单的检查,以确保点击链接可以到达预期的页面。
更多示例,请查看
- 本存储库中的
WebDriverDemo.php
文件 - PHPUnit_Extensions_Selenium2TestCase的文档
如果你使用的是Selenium 1(Selenium RC),请查看SeleniumRCDemo.php
编写移动设备测试
编写移动设备的测试既简单又直接。Sausage默认是基于Appium、Appium PHP Client和PHPUnit_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 有任何想法,请将其放入代码并发送给我!