如何在CircleCI中运行Nightwatch测试?

问题描述:

我想在CircleCI中运行Nightwatch测试,它已经有点...噩梦如何在CircleCI中运行Nightwatch测试?

似乎CricleCI没有设置为运行PHP应用程序的网络服务器。

Chrome浏览器〜54

CircleCI版本与Nightwatch,这是要求兼容> =〜55

CircleCI的Chrome找不到我local.webapp.dev域,并给出了错误ERR_ICANN_NAME_COLLISION

我已经安装了Web服务器,使用下面的Apache配置,在CircleCI docs从推荐的版本修改:

<VirtualHost *:80> 
    LoadModule php5_module /opt/circleci/php/5.6.17/libexec/apache2/libphp5.so 

    DocumentRoot /home/ubuntu/phpwebapp 
    ServerName local.webapp.dev 
    <FilesMatch \.php$> 
    SetHandler application/x-httpd-php 
    </FilesMatch> 
</VirtualHost> 

大量的试验和错误之后,我终于有了这个工作:

文件的例子:

的测试是自动由圆使用package.json运行

"test": "./node_modules/.bin/nightwatch --env circleci" 

这拾起并运行从您的Nightwatch.json测试:

"circleci" : { 
    "output_folder" : "${CIRCLE_TEST_REPORTS}", 
    "launch_url" : "http://local.phpwebapp.dev", 
    "selenium_host" : "localhost", 
    "selenium_port" : 4444, 
    "screenshots" : { 
    "enabled" : false, 
    "path" : "" 
    }, 
    "desiredCapabilities" : { 
    "browserName" : "chrome", 
    "marionette": true 
    } 
} 

CircleCI机使用的是旧版本的Chrome,这是不符合硒/ Nightwatch的当前版本兼容。 Chrome需要在circle.yamlpre依赖关系进行更新:

dependencies: 
    pre: 
    # Update Google Chrome. 
    - google-chrome --version 
    - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - 
    - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb stable main" >> /etc/apt/sources.list.d/google.list' 
    - sudo apt-get update 
    - sudo apt-get --only-upgrade install google-chrome-stable 
    - google-chrome --version 

Circle docs忘记在Apache的conf文件中的一个重要棋子,你必须set the allow/deny rules for your webroot directory,端口也被更改为使用默认端口80

<VirtualHost *:80> 
    LoadModule php5_module /opt/circleci/php/5.6.17/libexec/apache2/libphp5.so 

    DocumentRoot /home/ubuntu/phpwebapp 
    ServerName local.phpwebapp.dev 
    <FilesMatch \.php$> 
    SetHandler application/x-httpd-php 
    </FilesMatch> 
    <Directory /home/ubuntu/phpwebapp> 
    AllowOverride all 
    Require all granted 
    </Directory> 
</VirtualHost> 

然后,必须激活所有需要的Apache模块,并加载你的conf到Apache中,使用circle.yaml:

dependencies: 

    ... 

    post: 
     # circle seems to expect this but doesnt install it 
     - sudo apt-get install libapache2-mod-php5 
     # copy apache config file 
     - sudo cp ~/phpwebapp/circleApache.conf /etc/apache2/sites-available 
     # give phpwebapp to apache 
     - sudo chown -R www-data:www-data ~/phpwebapp 
     - sudo a2enmod rewrite 
     - sudo a2enmod headers 
     - sudo a2ensite circleApache 
     # DocumentRoot doesnt work, so symlinking instead 
     - sudo rm -r /var/www/html 
     - sudo ln -s /home/ubuntu/phpwebapp /var/www/html 
     - ls /var/www/html 
     - sudo service apache2 restart 
     # add local.phpwebapp.dev to /etc/hosts 
     - sudo sh -c "echo 127.0.0.1 local.phpwebapp.dev >> /etc/hosts" 

a2enmod行为PHP应用程序启用必要的apache模块重写和标头。

a2ensite启用配置文件和您的域。某些领域,如* .dev还需要添加一行到/etc/hosts

- sudo sh -c "echo 127.0.0.1 local.phpwebapp.dev >> /etc/hosts"

这是实现当圆Chrome浏览器是给错误ERR_ICANN_NAME_COLLISION。通过Nightwatch打印source of the test page发现错误:

browser 
    .url("http://www.local.phpwebapp.dev") 
    .source(function (result){ 
     // Source will be stored in result.value 
     console.log(result.value); 
    })