使用 chromedriver 跳过 phpunit 的所有测试

Posted

技术标签:

【中文标题】使用 chromedriver 跳过 phpunit 的所有测试【英文标题】:Skipped all tests on phpunit with chromedriver 【发布时间】:2017-12-05 22:04:05 【问题描述】:

我在 Ubuntu 16.04 上安装了 selenium 3.01、chromedriver 2.27 和 chrome 59。

一切都可以在我的本地机器上运行(运行 gnome 桌面),但不能在测试机器上运行(没有任何 GUI)。

我使用下一个命令启动了 Selenium(我在这台机器上没有 GUI):

xvfb-run java -Dwebdriver.chrome.driver=/usr/local/bin/chromedriver -jar /usr/local/bin/selenium-server-standalone-3.0.1.jar -debug

我用 telnet 确认它从 4444 端口开始:

root@xxx:~# telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

f
HTTP/1.1 400 No URI
Content-Length: 0
Connection: close
Server: Jetty(9.2.15.v20160210)

Connection closed by foreign host.

但是当使用 phpunit 运行测试时,它们会失败:

root@xxx:/var/www/dev.xxx.tt-laravel/site# "vendor/phpunit/phpunit/phpunit" tests/General/NotAuth.php --verbose
PHPUnit 5.7.21 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.0.18-0ubuntu0.16.04.1
Configuration: /var/www/dev.domain-laravel/site/phpunit.xml

SS                                                                  2 / 2 (100%)

Time: 2 minutes, Memory: 12.00MB

There were 2 skipped tests:

1) NotAuth::test_shops_index_load
The Selenium Server is not active on host localhost at port 4444.

/var/www/dev.domain-laravel/site/vendor/phpunit/phpunit-selenium/PHPUnit/Extensions/Selenium2TestCase.php:299
/var/www/dev.domain-laravel/site/vendor/phpunit/phpunit-selenium/PHPUnit/Extensions/Selenium2TestCase.php:337
/var/www/dev.domain-laravel/site/vendor/phpunit/phpunit-selenium/PHPUnit/Extensions/Selenium2TestCase.php:314

2) NotAuth::test_shops_categories_load
The Selenium Server is not active on host localhost at port 4444.

/var/www/dev.domain-laravel/site/vendor/phpunit/phpunit-selenium/PHPUnit/Extensions/Selenium2TestCase.php:299
/var/www/dev.domain-laravel/site/vendor/phpunit/phpunit-selenium/PHPUnit/Extensions/Selenium2TestCase.php:337
/var/www/dev.domain-laravel/site/vendor/phpunit/phpunit-selenium/PHPUnit/Extensions/Selenium2TestCase.php:314

OK, but incomplete, skipped, or risky tests!
Tests: 2, Assertions: 0, Skipped: 2.

以及 selenium 选项卡的输出:

2017-07-02 17:18:00.738:INFO::main: Logging initialized @497ms
2017-07-02 17:18:00.870:INFO:osjs.Server:main: jetty-9.2.15.v20160210
2017-07-02 17:18:00.917:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@5158b42f/,null,AVAILABLE
2017-07-02 17:18:00.938:INFO:osjs.ServerConnector:main: Started ServerConnector@6771beb3HTTP/1.10.0.0.0:4444
2017-07-02 17:18:00.939:INFO:osjs.Server:main: Started @698ms
Starting ChromeDriver 2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320) on port 6589
Only local connections are allowed.
Starting ChromeDriver 2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320) on port 16531
Only local connections are allowed.

感谢任何帮助。谢谢!

PS:这是测试之一:

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Modelizer\Selenium\SeleniumTestCase;

// https://github.com/Modelizer/Laravel-Selenium
// https://github.com/Modelizer/Laravel-Selenium/wiki/APIs

require_once(__DIR__.'/../../vendor/hacks/load_env.php');

class NotAuth extends SeleniumTestCase


    /**
     * SHOPS MODULES START
     */

    public function test_shops_index_load()
    
        $url = trim(route('shops_index', [], FALSE));
        $this->visit($url)
            ->see('Top Shops')
            ->see('Help Center3')
            ->seePageIs($url)
        ;
    

    public function test_shops_categories_load()
    
        $url = trim(route('shops_categories', [], FALSE));
        $this->visit($url)
            ->see('Automotive')
            ->see('Baby')
            ->seePageIs($url)
        ;
    

    /**
     * SHOPS MODULES END
     */

【问题讨论】:

你能告诉我你的连接代码吗,你确定它可以在没有 GUI 的情况下工作吗? selenium 将如何打开浏览器? @Dennis 我正在使用github.com/Modelizer/Laravel-Selenium,我将编辑我的问题并放入我编写的 2 个测试之一 尝试添加 $this->setPort(4444);在 SeleniumTestCase.php 'setUp' 方法中强制使用端口 4444。 我忘了说一切都在我的电脑上运行(使用 gnome)。 ***.com/questions/34342632/… 也许它会帮助你。你试过 setPort(4444) 吗? 【参考方案1】:

在过去的两个多月里,我遇到了完全相同的问题,并且一直在对此进行大量调查。

我注意到在我的环境中,整个过程在本地运行,但在构建服务器上完全相同的设置失败...

我最终注意到,在本地,我正在以 vagrant 用户身份运行和安装所有内容。然而,在构建服务器(Ubuntu 16.04.2 LTS)上,我以 root 身份完成所有操作,并且由于系统由 Puppet 维护,因此无法手动将项目添加到 PATH。

注意到,我将所有必需的权限更改为 Jenkins(ci 最终将运行测试)。

我还全局安装了 phpunit 和 phpunit-selenium 以及所有必需工具的特定版本。

Xvfb Google-Chrome - V59.0.3071.115 FireFox - V54.0 Chrome 驱动程序 - V2.30 GeckoDriver - V0.16.1 Selenium 独立服务器 - V3.4.0 PHPUnit - V5.7.21 PHPUit-Selenium - V3.0.3

我遵循的安装: 爪哇:

apt-get -qq install default-jre

谷歌浏览器:

apt-get -qq install libxss1 libappindicator1 libindicator7
wget http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_59.0.3071.115-1_amd64.deb
dpkg -i google-chrome*.deb
apt-get -qq install -f

火狐:

apt-get -qq update
apt-get -qq install firefox

Xvfb:

apt-get -qq install xvfb

谷歌浏览器驱动程序。 (V2.30):

cd ~/
mkdir browser-drivers
cd browser-drivers
wget https://chromedriver.storage.googleapis.com/2.30/chromedriver_linux64.zip
unzip chromedriver*.zip
chmod a+x chromedriver
chmod 775 chromedriver
chown jenkins:jenkins chromedriver

Firefox Gecko 驱动程序。 (V0.16.1):

cd ~/browser-drivers
wget -N https://github.com/mozilla/geckodriver/releases/download/v0.16.1/geckodriver-v0.16.1-linux64.tar.gz
tar -xvzf geckodriver*
chmod a+x geckodriver
chmod 775 geckodriver
chown jenkins:jenkins geckodriver

Selenium 单机版:

cd ~/
mkdir selenium
cd selenium
wget -N http://selenium-release.storage.googleapis.com/3.4/selenium-server-standalone-3.4.0.jar
chmod a+x selenium*
chown jenkins:jenkins selenium*

PhpUnit (V5.7.21):

curl -Lo /usr/local/bin/phpunit https://phar.phpunit.de/phpunit-5.7.21.phar
chmod +x /usr/local/bin/phpunit
chown -R jenkins:jenkins /usr/local/bin/phpunit
# Run from "/var/lib/jenkins" as jenkins user
cd /var/lib/jenkins
su jenkins
composer global require 'phpunit/phpunit=5.*'
composer global require 'phpunit/phpunit-selenium=3.0.3'

然后我还创建了两个脚本来在每次测试后启动 xvfb 和 selenium。

seleniumxvfbup.sh

#!/bin/bash

Xvfb :8 -screen 8 1920x1080x24 -ac +extension GLX +render -noreset > /dev/null 2>&1 &

export DISPLAY=:8.8

java -Dwebdriver.gecko.driver=browser-drivers/geckodriver -Dchrome.binary=/opt/google/chrome/chrome -Dwebdriver.chrome.driver=browser-drivers/chromedriver -jar selenium/selenium-server-standalone-3.4.0.jar -port 4444 > /dev/null 2>&1 &

以这种方式启动 selenium 服务器允许我在 chrome 或 firefox 上进行单独测试,而不必每次都停止/启动 selenium。

杀死服务很简单

pkill -f selenium & pkill -f Xvfb &

最后

chmod +x ~/seleniumxvfbup.sh
chown jenkins:jenkins seleniumxvfbup.sh

只要确保没有任何必需的文件驻留在 /root/ 目录中,因为这是我这边系统失败的主要问题。

希望对你有所帮助...

【讨论】:

以上是关于使用 chromedriver 跳过 phpunit 的所有测试的主要内容,如果未能解决你的问题,请参考以下文章

selenium使用ChromeDriver

chromedriver类怎么引入

ChromeDriver的安装和使用

将 chromedriver 与 selenium/python/ubuntu 一起使用

会话未创建:此版本的 ChromeDriver 仅支持 Chrome 版本 74 错误与 ChromeDriver Chrome 使用 Selenium

在 Mac 上使用 selenium 和 chromedriver