Describe Selenium testing setup and provide a function to clear the SQL database

pull/171/merge
Thomas Bruederli 11 years ago
parent eea11ecdde
commit d220ebd708

@ -0,0 +1,27 @@
<?php
/*
+-----------------------------------------------------------------------+
| Roundcube Webmail Selenium Tests Entry Point |
| |
| Copyright (C) 2005-2014, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
| |
| PURPOSE: |
| This is the public entry point for all HTTP requests to the |
| Roundcube webmail application loading the 'tests' environment. |
+-----------------------------------------------------------------------+
| Author: Thomas Bruederli <thomas@roundcube.net> |
+-----------------------------------------------------------------------+
*/
define('INSTALL_PATH', realpath(__DIR__) . '/');
$GLOBALS['env'] = 'test';
// include index.php from application root directory
include INSTALL_PATH . 'index.php';

@ -2,6 +2,12 @@
class Selenium_Login extends Selenium_Test
{
protected function setUp()
{
bootstrap::init_db();
parent::setUp();
}
public function testLogin()
{
// first test, we're already on the login page

@ -0,0 +1,49 @@
Running Selenium Tests
======================
In order to run the Selenium-based web tests, some configuration for the
Roundcube test instance need to be created. Along with the default config for a
given Roundcube instance, you should provide a config specifically for running
tests. To do so, create a config file named `config-test.inc.php` in the
regular Roundcube config dir. That should provide specific `db_dsnw` and
`default_host` values for testing purposes as well as the credentials of a
valid IMAP user account used for running the tests with.
Add these config options used by the Selenium tests:
```php
// Unit tests settings
$config['tests_username'] = 'roundcube.test@example.org';
$config['tests_password'] = '<test-account-password>';
$config['tests_url'] = 'http://localhost/roundcube/index-test.php';
```
The `tests_url` should point to Roundcube's index-test.php file accessible by
the Selenium web browser.
WARNING
-------
Please note that the configured IMAP account as well as the Roundcube database
configred in `db_dsnw` will be wiped and filled with test data in every test
run. Under no circumstances you should use credentials of a production database
or email account!
Run the tests
-------------
First you need to start a Selenium server. We recommend to use the
[Selenium Standalone Server][selenium-server] but the tests will also run on a
Selenium Grid. The tests are based in [PHPUnit_Selenium][phpunit] which can be
installed through [PEAR][pear-phpunit].
To start the test suite call `phpunit` from the Selenium directory:
```
cd <roundcube-dir>/tests/Selenium
phpunit
```
[phpunit]: http://phpunit.de/manual/4.0/en/selenium.html
[pear-phpunit]: http://pear.phpunit.de/
[selenium-server]: http://docs.seleniumhq.org/download/

@ -5,7 +5,7 @@
| tests/Selenium/bootstrap.php |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2009-2013, The Roundcube Dev Team |
| Copyright (C) 2009-2014, The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
@ -38,7 +38,7 @@ if (set_include_path($include_path) === false) {
die("Fatal error: ini_set/set_include_path does not work.");
}
$rcmail = rcube::get_instance('test');
$rcmail = rcmail::get_instance('test');
define('TESTS_URL', $rcmail->config->get('tests_url'));
define('TESTS_BROWSER', $rcmail->config->get('tests_browser', 'firefox'));
@ -48,7 +48,56 @@ define('TESTS_SLEEP', $rcmail->config->get('tests_sleep', 5));
PHPUnit_Extensions_Selenium2TestCase::shareSession(true);
// @TODO: remove user record from DB before running tests
/**
* satisfy PHPUnit
*/
class bootstrap
{
/**
* Wipe and re-initialize (mysql) database
*/
public static function init_db()
{
$rcmail = rcmail::get_instance();
// drop all existing tables first
$db = $rcmail->get_dbh();
$db->query("SET FOREIGN_KEY_CHECKS=0");
$sql_res = $db->query("SHOW TABLES");
while ($sql_arr = $db->fetch_array($sql_res)) {
$table = reset($sql_arr);
$db->query("DROP TABLE $table");
}
// init database with schema
$dsn = parse_url($rcmail->config->get('db_dsnw'));
$db_name = trim($dsn['path'], '/');
if ($dsn['scheme'] == 'mysql' || $dsn['scheme'] == 'mysqli') {
system(sprintf('cat %s %s | mysql -h %s -u %s --password=%s %s',
realpath(INSTALL_PATH . '/SQL/mysql.initial.sql'),
realpath(TESTS_DIR . '/Selenium/data/mysql.sql'),
escapeshellarg($dsn['host']),
escapeshellarg($dsn['user']),
escapeshellarg($dsn['pass']),
escapeshellarg($db_name)
));
}
}
/**
* Wipe the configured IMAP account and fill with test data
*/
public static function init_imap()
{
if (!TESTS_USER)
return false;
// TBD.
}
}
// @TODO: make sure mailbox has some content (always the same) or is empty
// @TODO: plugins: enable all?
@ -59,12 +108,12 @@ class Selenium_Test extends PHPUnit_Extensions_Selenium2TestCase
{
protected function setUp()
{
// $this->rc = rcube::get_instance();
$this->setBrowser(TESTS_BROWSER);
// Set root to our index.html, for better performance
// See https://github.com/sebastianbergmann/phpunit-selenium/issues/217
$this->setBrowserUrl(TESTS_URL . '/tests/Selenium');
$baseurl = preg_replace('!/index(-.+)?\.php^!', '', TESTS_URL);
$this->setBrowserUrl($baseurl . '/tests/Selenium');
}
protected function login()
@ -87,7 +136,7 @@ class Selenium_Test extends PHPUnit_Extensions_Selenium2TestCase
protected function go($task = 'mail', $action = null)
{
$this->url(TESTS_URL . '/?_task=' . $task);
$this->url(TESTS_URL . '?_task=' . $task);
// wait for interface load (initial ajax requests, etc.)
sleep(TESTS_SLEEP);

Loading…
Cancel
Save