silverstripe / silverstripe-testsession

Support module for browser-based test sessions, e.g. for Behat behaviour testing
BSD 3-Clause "New" or "Revised" License
3 stars 20 forks source link

Browser Test Session Module

CI

Overview

IMPORTANT: This module is intended for development and testing, it poses a security risk if used on production servers. It's completely possible to allow any user to become an admin, or do other nefarious things, if this is installed on a live site.

This module starts a testing session in a browser, in order to test a Silverstripe application in a clean state. Usually the session is started on a fresh database with only default records loaded. Further data can be loaded from YAML fixtures or database dumps.

The session is persisted in a file which is generated upon starting the session. As long as this file exists, the test session is considered in progress, both in web browsers and command-line execution. By default, the file is stored in the webroot under assets/TESTS_RUNNING-<id>.json. The <id> value is a random token stored in the browser session, in order to make the test session specific to the executing browser, and allow multiple people using their own test session in the same webroot.

The module also keeps some metadata about the session state in the database, so that it may be available for the clients as well. E.g. the silverstripe-behat-extension may use it through this module APIs, allowing us to introduce some grey-box testing techniques.

The module also serves as an initializer for the Silverstripe Behat Extension. It is required for Behat because the Behat CLI test runner needs to persist test configuration just for the tested browser connection, available on arbitary URL endpoints. For example, we're setting up a test mailer which writes every email into a temporary database table for inspection by the CLI-based process.

Setup

Simply require the module in a Silverstripe webroot (3.0 or newer):

composer require --dev silverstripe/behat-extension

Usage

You start a test session by manually requesting a certain URL, and interact with it through other URL endpoints.

Commands:

While you can use the interface to set the test session state, it can be useful to set them programmatically through query parameters on "dev/testsession/start":

Example usage with parameters:

dev/testsession/start?database=ss_tmpdb_1234567&fixture=cms/tests/controller/CMSMainTest.yml