如何在Travis CI上设置正常的自动浏览器测试?

时间:2018-08-16 15:36:49

标签: selenium testing phpunit travis-ci browser-automation

我正在尝试在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或其他任何语言编写测试,只要测试能够真正起作用,并且在出现任何问题时会报告失败。

1 个答案:

答案 0 :(得分:0)

要执行上述测试,Selenium服务器应在4444端口的本地主机上启动并运行。由于服务器未在发生执行操作的计算机上启动并运行,请尝试删除以下提到的行并尝试。

$this->setHost('localhost');
$this->setPort(4444);