我正在尝试在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.
现在我的问题是这些
--fail-on-risky
或--stop-on-skipped
这样的所有标志仍然不会强制PHPUnit报告测试失败,在我看来,这是唯一的逻辑结果,因为测试显然失败了。我知道这太广泛了,其中包含多个问题。恐怕我在某个地方走错了方向,我可能正在尝试以复杂的方式做一些简单的事情。
有人可以提供 .travis.yml 文件的工作示例以进行自动浏览器测试吗?我的应用程序使用PHP,但是我可以用Node.js,Python,Java或其他任何语言编写测试,只要测试能够真正起作用,并且在出现任何问题时会报告失败。
答案 0 :(得分:0)
要执行上述测试,Selenium服务器应在4444端口的本地主机上启动并运行。由于服务器未在发生执行操作的计算机上启动并运行,请尝试删除以下提到的行并尝试。
$this->setHost('localhost');
$this->setPort(4444);