如何在 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

如何在 Travis-CI 配置文件 (YAML) 中正确使用 curl?

GitHub项目加入Travis-CI的自动集成

如何让 Travis CI 自动同意 pip?

使用 svn repo 自动运行 Travis-ci?