TravisCI: Setup MySQL Tables+Data before running Tests
test, mysql, mariadb, travis, continuous integration, before_install
In case your projects make use of external databases like MySQL/MariaDB you need to setup your continuous integration tests with dedicated testcases including application specific database structures. This requires some initial steps to load the database dump before starting the tests. Thanks to travisci.org you do’t need to do this kind of stuff within your application – just use the test configuration!
Travis+MySQL Server#
First of all, we add MySQL Server as service within our .travis.yml file. This initializes a dedicated database instance for testing. Additionally we hook into the before_install action to initialize our database structure. In this example all SQL commands are loaded from an external file located in our test directory.
language: node_js node_js: - "7" - "7.6" - "8" services: - mysql before_install: - mysql -u root --password="" < test/travis.sql
Initial Database Setup#
Our Test Database structure is definied within a dedicated SQL file in test/travis.sql. It contains all necessary commands to add a new user, create demo database, create demo tables and finally add some test-data.
# Create Testuser CREATE USER 'dev'@'localhost' IDENTIFIED BY 'dev'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON *.* TO 'dev'@'localhost'; # Create DB CREATE DATABASE IF NOT EXISTS `demo` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `demo`; # Create Table CREATE TABLE IF NOT EXISTS `users` ( `user_id` int(11) NOT NULL, `created_on` timestamp NULL DEFAULT NULL, `modified_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `username` varchar(50) DEFAULT NULL, `salt` varchar(20) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `email` varchar(150) DEFAULT NULL, `firstname` varchar(50) DEFAULT NULL, `lastname` varchar(50) DEFAULT NULL, `dob` date DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `users` ADD PRIMARY KEY (`user_id`); ALTER TABLE `users` MODIFY `user_id` int(11) NOT NULL AUTO_INCREMENT; # Add Data