Travis:如何针对不同的MySQL后端运行测试?

时间:2018-05-08 16:06:13

标签: mysql travis-ci multi-database

如何使用一个.travis.yml文件针对不同的MySQL后端运行测试?

类似here的内容,使用matrix->include。例如:

  • 针对MySQL 5.5运行测试
  • 针对MySQL 5.6运行测试
  • 针对MySQL 5.7运行测试
  • 针对MySQL 8.0运行测试

我目前发现的是:

后来提到

  

您还可以在启用了sudo的Ubuntu Trusty上安装MySQL 5.7。

但是没有提到如何使用5.6和5.7,例如。

可能的解决方法(如果没有" Travis"解决方法):

  1. 方法:创建不同的Docker设置,每个设置都有一个MySQL版本并手动测试我的脚本。但这会大大增加我的开发环境并且非常耗时。

  2. 从sources / via apt安装所需的MySQL服务器,具体取决于相关的环境变量(例如MYSQL_VERSION == 5.5)。使用某些配置来访问它。

  3. 感谢您的反馈!

1 个答案:

答案 0 :(得分:1)

我以@ k00ni在PyMySQL initializedb.sh script中链接为例,并将其简化为一些简单的例子,因为我的测试不需要TLS或自定义用户。这是Sqitch linux-mysql script

#!/bin/bash

if [ $MYSQL = 'system' ]; then
    exit
fi

# Derived from https://github.com/PyMySQL/PyMySQL/blob/master/.travis/initializedb.sh
set -e
sudo service mysql stop
docker pull ${MYSQL}
RUN_MYSQL="docker run -it --name=mysqld -d -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306"
export MYSQL_URI=db:mysql://root@127.0.0.1/information_schema

if [ $MYSQL == 'mysql:8.0' ]; then
    ${RUN_MYSQL} ${MYSQL} --default-authentication-plugin=mysql_native_password
else
    ${RUN_MYSQL} ${MYSQL}
fi

它导出MYSQL_URI,因此测试没有连接方法。修改以适合您自己的测试。

该脚本无需费心等待MySQL完成启动,因为Sqitch测试需要一到两分钟的时间来做很多其他工作,然后再运行连接到数据库的测试。如果您的项目需要等待MySQL启动,请将其附加到脚本末尾:

while ! docker exec mysqld mysqladmin ping --host localhost --silent &> /dev/null ; do
    echo "Waiting for database connection..."
    sleep 2
done

无论哪种方式,这都是`.travis.yml创建运行多个MySQL版本的构建阶段的方式:

jobs:
  include:
    # https://hub.docker.com/_/mysql
    # https://hub.docker.com/_/mariadb
    - &mysql
      stage:  MySQL
      if: branch = master
      services: docker
      env: MYSQL=mysql:8.0
      before_install:
        - source dev/linux-mysql
        - source dev/linux-prereqs
      script:
        - LIVE_MYSQL_REQUIRED=1 prove -lr --directives --comments t/mysql.t
    - <<: *mysql
      env: MYSQL=mysql:5.7
    - <<: *mysql
      env: MYSQL=mysql:5.6
    - <<: *mysql
      env: MYSQL=mysql:5.5
    - <<: *mysql
      env: MYSQL=mariadb:10.4
    - <<: *mysql
      env: MYSQL=mariadb:10.3
    - <<: *mysql
      env: MYSQL=mariadb:10.2
    - <<: *mysql
      env: MYSQL=mariadb:10.1
    - <<: *mysql
      env: MYSQL=mariadb:10.0
    - <<: *mysql
      env: MYSQL=mariadb:5.5

有关this build的结束方式(以及许多其他数据库测试)。