如何在 Travis CI 上设置有效的自动化浏览器测试?
Posted
技术标签:
【中文标题】如何在 Travis CI 上设置有效的自动化浏览器测试?【英文标题】:How to set up working automated browser tests on Travis CI? 【发布时间】:2019-01-23 15:09:32 【问题描述】:我正在尝试在 Travis CI 上为我的 Web 应用程序设置自动化测试。我说的是自动化浏览器测试 - 运行单元测试很简单,但我需要一个进程/系统测试来启动无头浏览器并执行各种用例的脚本测试。
我的应用程序使用 php,所以我决定使用 PHPUnit、Selenium 和无头 Firefox。
经过大量研究和反复试验,我以以下 .travis.yml 文件结束:
language: php
php:
- '7.1'
services:
- mysql
addons:
firefox: latest
env:
- MOZ_HEADLESS=1
DISPLAY=:99.0
SELENIUM_FIREFOX_DRIVER=/home/travis/build/lotcz/zSample/geckodriver
before_install:
- sudo apt-get update > /dev/null
- wget https://selenium/download/url -O selenium-server.jar
- wget https://github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-linux32.tar.gz
- tar -xzf geckodriver-v0.21.0-linux32.tar.gz
install:
- sudo apt-get install apache2
- sudo service apache2 start
- mysql -e 'CREATE DATABASE IF NOT EXISTS zsample;'
before_script:
- nohup java -jar -Dwebdriver.gecko.driver=$SELENIUM_FIREFOX_DRIVER selenium-server.jar &
- composer install
script:
- phpunit --fail-on-risky --fail-on-warning --stop-on-skipped --stop-on-incomplete --verbose --debug --colors
after_failure:
- cat nohup.out
我编辑了一些特定于我的应用程序的部分。请相信我,我在运行测试之前正确设置了我的应用程序。
现在一个非常简单的测试可能看起来像这样:
class VisitorLoginTest extends PHPUnit_Extensions_Selenium2TestCase
public function setUp()
$this->setHost('localhost');
$this->setPort(4444);
$this->setBrowserUrl('http://localhost');
$this->setBrowser('firefox');
public function tearDown()
$this->stop();
public function testFrontPage()
$this->url('/');
$content = $this->byClass('main-title')->text();
$this->assertEquals('Hello', $content);
当我的测试运行时,我得到这个:
The Selenium Server is not active on host localhost at port 4444.
OK, but incomplete, skipped, or risky tests!
Tests: 1, Assertions: 0, Skipped: 1.
The command "make test" exited with 0.
现在我的问题是:
这个文件对我来说似乎真的很长而且太复杂了,因为我想做一些相当标准的事情(我认为自动化浏览器测试现在很常见)。我希望 Travis CI 能够提供一种更简单的方式来执行自动浏览器测试。这里我要下载安装启动Apache、Selenium驱动、Selenium服务器、使用composer获取PHPUnit Selenium插件等... Selenium 服务器似乎没有运行,我找不到原因。 最后,由于 PHPUnit 巧妙地返回 0,即使它甚至无法运行测试,Travis 报告此测试成功。所有这些标志,如--fail-on-risky
或 --stop-on-skipped
仍然不会强制 PHPUnit 报告测试失败,我认为这是测试明显失败的唯一合乎逻辑的结果。
我知道这太宽泛了,包含多个问题。恐怕我在某个地方走错了方向,我可能正在尝试以复杂的方式做一些简单的事情。
有人可以为自动浏览器测试提供 .travis.yml 文件的工作示例吗?我的应用程序是用 PHP 编写的,但我可以用 Node.js、Python、Java 或其他任何东西编写测试,只要测试能够真正起作用并且如果出现任何问题都会报告失败。
【问题讨论】:
***.com/questions/37699036/… 假设所有这些都是标准方式,您真的无法找出为什么 Selenium 服务器没有(似乎?)运行?真的吗?请分享您的想法和cmets。 【参考方案1】:要执行上述测试,Selenium 服务器应该已启动并在 localhost 上运行,端口为 4444。由于服务器未启动并在执行执行的机器上运行,请尝试删除下面提到的行并尝试。
$this->setHost('localhost');
$this->setPort(4444);
【讨论】:
我试过了,没有任何改变。我认为 PHPUnit Selenium 扩展需要 Selenium 服务器,并且 localhost 和端口 4444 是默认值。 服务器应该由这块启动:"nohup java -jar -Dwebdriver.gecko.driver=$SELENIUM_FIREFOX_DRIVER selenium-server.jar &" 但不是。当我在没有 nohup 和 & char 的情况下运行这个命令时,它运行正常,但它必须像这样运行才能在后台运行以上是关于如何在 Travis CI 上设置有效的自动化浏览器测试?的主要内容,如果未能解决你的问题,请参考以下文章
markdown 如何在15分钟内从Travis CI设置自动上传到Anaconda
markdown 如何在15分钟内从Travis CI设置自动上传到Anaconda