gpt4 book ai didi

mysql - 特拉维斯 : how to run tests against different MySQL backends?

转载 作者:行者123 更新时间:2023-11-29 06:44:15 27 4
gpt4 key购买 nike

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

类似于 here ,使用matrix->include。例如:

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

我目前发现的是:

后面提到

You can also install MySQL 5.7 on sudo-enabled Ubuntu Trusty.

但没有提及例如如何使用 5.6 和 5.7。

可能的解决方法(如果没有“Travis”方法来解决它):

  1. 方法:创建不同的 Docker 设置,每个设置都具有特定的 MySQL 版本,并手动测试我的脚本。但这会使我的开发环境变得非常臃肿并且非常耗时。

  2. 根据相关的环境变量(例如 MYSQL_VERSION == 5.5),从sources/via apt 安装所需的 MySQL 服务器。使用一定的配置来访问它。

感谢您的反馈!

最佳答案

我会回答我自己的问题,但对其他方法持开放态度。

解决方案

以下解决方案基于 PyMySQL 项目中的 .travis.yml:https://github.com/PyMySQL/PyMySQL/blob/master/.travis.yml

您需要脚本和 .travis.yml 配置的组合。

脚本

如果您想重用以下代码,请在项目中使用以下路径:.travis/install-and-init-db.sh

以下脚本安装所需版本的数据库:

# debug
set -x
# verbose
set -v

if [ ! -z "${DB}" ]; then
# disable existing database server in case of accidential connection
sudo service mysql stop

docker pull ${DB}
docker run -it --name=mysqld -d -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 ${DB}
sleep 10

mysql() {
docker exec mysqld mysql "${@}"
}
while :
do
sleep 5
mysql -e 'select version()'
if [ $? = 0 ]; then
break
fi
echo "server logs"
docker logs --tail 5 mysqld
done

mysql -e 'select VERSION()'

if [ $DB == 'mysql:8.0' ]; then
WITH_PLUGIN='with mysql_native_password'
mysql -e 'SET GLOBAL local_infile=on'
docker cp mysqld:/var/lib/mysql/public_key.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/ca.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/server-cert.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/client-key.pem "${HOME}"
docker cp mysqld:/var/lib/mysql/client-cert.pem "${HOME}"
else
WITH_PLUGIN=''
fi

mysql -uroot -e 'create database testdb DEFAULT CHARACTER SET utf8mb4'
else
cat ~/.my.cnf

mysql -e 'select VERSION()'
mysql -e 'create database testdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;'
fi

.travis.yml

您必须使用矩阵->包含 block 。对于 PHP,请参阅以下代码。在提到的 PyMySQL 中,您将找到一种适用于 Python 的方法。

sudo: required

language: php

services:
- docker

matrix:
fast_finish: true
include:
#
# Define versions of MySQL and MariaDB to test against.
#
# mysql 5.5
- php: 5.6
env: DB=mysql:5.5
- php: 7.0
env: DB=mysql:5.5
- php: 7.1
env: DB=mysql:5.5
- php: 7.2
env: DB=mysql:5.5
# mysql 5.6
- php: 5.6
env: DB=mysql:5.6
# ...
# mariadb 10.0
- php: 5.6
env: DB=mariadb:10.0
- php: 7.0
env: DB=mariadb:10.0
- php: 7.1
env: DB=mariadb:10.0
- php: 7.2
env: DB=mariadb:10.0
# ...

before_script:
#
# install and init database (see matrix => include => env)
#
- ./.travis/install-and-init-db.sh

#
# setup and run tests
#
# Install composer packages, will also trigger dump-autoload
- travis_retry composer install --no-interaction

script:
- vendor/bin/phpunit --coverage-clover gen/coverage/clover.xml

创建并使用连接

使用以下参数创建与数据库服务器的连接:

$dbConfig = array(
'db_name' => 'testdb',
'db_user' => 'root',
'db_pwd' => '',
'db_host' => '127.0.0.1',
);

关于mysql - 特拉维斯 : how to run tests against different MySQL backends?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50237943/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com