【发布时间】: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 或其他任何东西编写测试,只要测试能够真正起作用并且如果出现任何问题都会报告失败。
【问题讨论】:
-
假设所有这些都是标准方式,您真的无法找出为什么 Selenium 服务器没有(似乎?)运行?真的吗?请分享您的想法和cmets。
标签: selenium testing phpunit travis-ci browser-automation