matthias leich omer barnir...– based on ‘mysqltest’ test cases and scripts – high level...

Post on 05-Sep-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Writing Advanced Test Case

Matthias Leich

&

Omer BarNir

2Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Agenda

• Upgrade/Downgrade Tests (Omer BarNir)

• Concurrency/Longevity Tests (Omer BarNir)

• Best Practices and Advance Mysqltest Features(Matthias Leich)

3Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Upgrade/Downgrade Tests

• Overview (1/2)

– Shell based framework to test MySQL feature compatibility

between different MySQL Server versions.

– Based on ‘mysqltest’ test cases and scripts

– High level execution path:

• Starts an 'old' version of the server

• Executes initial ‘setup’ tests

• Export the database

• Stops the old server and starts the new one (using the existing

copy of the database or creates a fresh on -- as configured) – If fresh database loads the old exported database

• Runs the upgrade program

• Executes ‘upgrade’ tests

• Stops the new server and starts the old one (using the existing

copy of the database or creates a fresh on -- as configured) – If fresh database loads the new exported database

• Executes ‘downgrade’ tests

4Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Upgrade/Downgrade Tests

• Overview (2/2)

– Execution path is repeated running combination of ‘live’and ‘import/expert based upgrade and downgrade cycles.

– Execution path can be limited to a single test in a test scenario

– Execution path can be run in a ‘no upgrade’ mode

• To isolate if a problem is upgrade related

– Execution can be run in a ‘debug’ mode

• Where the script is stopped in key steps and the mysql

command line client can be invoked

5Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Upgrade/Downgrade Tests

• Script files• ‘run_updown’

– Main script running the upgrade/downgrade test

• Environment file (*.env)– A configuration file containing information related to where binaries are installed and

other system related parameters

• Scenario file (*.tst)– A configuration file containing information related to how the tests should be run

and other test related parameters

./run_updown --config=local.env --scenario=50to51.tst

• Test Files• Each test is made up of three ‘mysql-test’ files, one run before

upgrade, one after the upgrade and the third after the downgrade.

• Test file names are in the format of{initial|upgrade|downgrade}<nn>.test

where nn is a sequential number given to that test.

• All tests for a given ‘scenario’ (i.e. ’50minor’, ‘50to51’ etc.) are stored in ‘scenario name’ directory.

6Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Upgrade/Downgrade Tests

• Location, Files and Directory Structure

– Located in the mysql-test-extra-5. n trees in the */mysql-test-/qa-suite/updown directory.

– Structure of the updown directory:

• ‘bin’ directory– Holds execution scripts, and configuration files

• ‘scenarios’ directory– Holds sub-directory for each of the ‘scenarios’

• Each of the ‘scenario’ directories includes– /t for test files

– /r for result files

7Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Upgrade/Downgrade Tests

• Directory Structure

updown (‘test-extra’/mysql-test/qa-suite/updown)|-- bin| |-- 50to51.tst| |-- local.env| \-- run_updown\-- scenarios

\-- 50to51|-- r| |-- downgrade00.result| |-- downgrade01.result| |-- downgrade02.result| |-- initial00.result| |-- initial01.result| |-- initial02.result| |-- upgrade00.result| |-- upgrade01.result| `-- upgrade02.result|-- t| |-- disabled.def| |-- downgrade00.test| |-- downgrade01.test| |-- downgrade02.test| |-- initial00.test| |-- initial01.test| |-- initial02.test| |-- manifest.txt| |-- upgrade00.test| |-- upgrade01.test| \-- upgrade02.test\-- res_dd (dl/ld/ll)

8Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Upgrade/Downgrade Tests

• How to run the tests:– Install ‘old’ and ‘new’ binaries

– Clone the ‘test-extra’ tree

– In new_bin/mysql-test/suite and old_bin/mysql-test/suitecreate links to the test_extra/mysql-test/qa-suite/updowndirectory:

• ln –s test_extra/mysql-test/qa-suite/updown updown

– Configure the environment file

– Modify the ‘scenario file (if needed)

– From test-extra/mysql-test/qa-suite/updown/bin, Execute:

• ./run_updown –scenario=file –config=file

• Optional command line options– --pause - for debug stops and invoking the client

– --no-upgrade - to run all tests against the ‘old’ binaries

– --test-num=n - to run a specific test

9Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Upgrade/Downgrade Tests

• Environment file example

###########################################################################SUITE="updown"

TOP_DIR_OLD_VER=/home/omer/ent-5.0.46-com # Top directory of old MySQL versionTOP_DIR_NEW_VER=/home/omer/beta-5.1.21 # Top directory of new MySQL versionTOP_TEST_EXTRA=/home/omer/source/tst51_801 # Top directory for mysql-test-extra

WINDOWS=0 # Set to '1' if running on Windows

SERVER_HOST="localhost" # Server hostname:# <localhost> for local connections# <some-host-name> for remote connections

SERVER_PORT="9306" # Port for remote connections

VAR_DIR=/tmp/systest/var # Variable pointing to the var'directory

# The following variables are used for storing result files fir the different# up/down permutations during the test runs. Names are relative to the location# of the 'scenario' directory in test-extraDD_DIR=res_dd # Upgrade/downgrade using a dump fileDL_DIR=res_dl # Upgrade using dump file, live downgradeLD_DIR=res_ld # Live upgrade, using dump file for downgradeLL_DIR=res_ll # live upgrade and downgrade

# TZ=GMT-3 # Set timezone variable if needed

################################################################################

10Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Upgrade/Downgrade Tests

• Scenario file example (1/2)

###########################################################################SCENARIO=50to51 # Scenario name

UPGRADE_TYPE="live" # Determines the upgrade method to use,# Can be set to:# 'live' - Use the existing database after upgrade# 'dump' - Export the db and import it after upgrade

DOWNGRADE_TYPE="dump" # Determines the downgrade method to use,# Can be set to:# 'live' - Use the existing database after downgrade# 'dump' - Export the db and import it after downgrade

UPDN_TYPE="major" # Indicates the differences bewtten the two releases# tested (since 'live' downgrade is not supported# between 'major' releases). Can be set to:# 'minor' - allow 'live' downgrade testing# 'major' - bypass 'live' downgrade testing,# -> If UPDN_MODE="single" set DOWNGRADE_TYPE to 'dump'# -> If UPDN_MODE="all", bypass 'live' DOWNGRADE_TYPE.

UPDN_MODE="all" # Indicates which of the combinations of# UPGRADE_TYPE and DOWNGRADE_TYPE will be used.# Can be set to:# 'single' - Run one round using $UPGRADE_TYPE for# the upgrade method and $DOWNGRADE_TYPE# for the downgrade method.# 'all' - Run four rounds using all combinations# of 'live' and 'dump' (ignoring the above# values of UPGRADE_TYPE and DOWNGRADE_TYPE

11Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Upgrade/Downgrade Tests

• Scenario file example (2/2)

# TEST_NUM= # If set limits the run to a specific test scenario# Values are in the form of 00, 01,...

BATCH_MODE="one-pass" # Determines the order in which the test cases will# be executed. Can be set to:# 'one-pass - run all 'initial' then all 'opgrade' then# all 'downgrade' (i1,i2...,u1,u2...,d1,d2...)# 'none' - run each test in its own uprade/downgrade# cycle (i1,u1,d1,i2,u2,d2,...)# Note: BATCH_MODE is ignored if --test-num is specified# on the command line or if $TEST_NUM is set.

NEW_UPG_TOOL=mysql_upgrade # Determines what tool should be used during upgrade# can be set to 'fix_privs' or 'mysql_upgrade'# If new/old versions prior to 5.0.19 (*nix)# and 5.0.23 (Windows) should be 'fix_privs'

OLD_UPG_TOOL=mysql_upgrade # Determines what tool should be used during downgrade# can be set to 'fix_privs' or 'mysql_upgrade'# If new/old versions prior to 5.0.19 (*nix)# and 5.0.23 (Windows) should be 'fix_privs'

OLDVER_DUMP_OPT="" # Additional command line parameters to pass to# 'mysqldump' when dumping the 'old version' database# during a 'dump' upgrade.

NEWVER_DUMP_OPT="--skip-events" # Additional command line parameters to pass to# 'mysqldump' when dumping the 'new version' database# during a 'dump' downgrade.

###########################################################################

12Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Upgrade/Downgrade Tests

• More information:– https://inside.mysql.com/wiki/QA_UpDown_Howto

• Credits/Owner

– Initial Scripts: Matthias Leich

– Major Update and 5.0 test cases: Eric MaLossi

– Current revision, 5.1 test cases and current maintainer: Omer BarNir

– Other contributions: Serge Kozlov

13Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Questions?

14Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• Overview– Perl/shell based framework to test MySQL features in

concurrency for long durations of time.

– Based on ‘mysqltest’ test cases and scripts

– High level execution path:

• Starts a MySQL server (using mysql-test-run.pl)

• Executes initial ‘setup’ tests

• Executes subsequent tests concurrently for a specified

duration

• Stops the clients after duration has been reached

15Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• Script files• ‘run_systest’

– Parent shell script controls the overall execution of the test.

• ‘mysql-stress-test.pl’– ‘low level script executing parallel executions of mysqltest with different test files as

specified in command line arguments

• Environment file (*.env)– A configuration file containing information related to where binaries are installed and

other system related parameters

• Scenario file (*.tst)– A configuration file containing information related to how the tests should be run

and other test related parameters

./run_systems --config=local.env --scenario=50to51.tst

• Test Files• Test files are grouped into ‘lists’.

• List files are text based

• ‘mysql-test’ test files are picked at random / in order from the list file and are executed against the server.

16Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• Location, Files and Directory Structure

– Located in the mysql-test-extra-5.n trees in the */mysql-test-/qa-suite/systems directory.

– Structure of the systems directory is similar to other ‘test’ suites.

17Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• How to run the tests:

– Clone the ‘test-extra’ tree

– Create links to the test_extra/mysql-test/qa-suite/updowndirectory:

• ln –s test_extra/mysql-test/qa-suite/updown updown

– Configure the environment file

– Modify the ‘scenario file (if needed)

– From test-extra/mysql-test/qa-suite/updown/bin, Execute:

• ./run_systest –scenario=file –config=file

• Optional command line options (override scenario file):– --duration=m - time to run the test (seconds)

– --threads=n - number of threads (1st client)

18Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• Environment file example

###########################################################################STRESS_SUITE="systems"

MYSQL_BASEDIR="/home/qauser/bin64_5122rc“ # Top location of MySQL binariesMYSQL_BINDIR="$MYSQL_BASEDIR/bin" # Location of the MySQL BinariesMYSQL_TEST="$MYSQL_BINDIR/mysqltest“ # Full path to mysqtest binarySTRESS_TEST_BASEDIR="/home/qauser/extra51_0827“ # Location of test-extra treeSTRESS_TEST_WORKDIR="/data0/qa_test_data/5122“ # Location of test log files

WINDOWS=0 # Set to '1' for Wimdows environmentsSERVER_HOST="localhost" # Server hostname:

# <localhost> for local connections through socket# <some-host-name> for remote connections

SERVER_PORT="9306" # Port for remote connections

MONITOR_FILE="sys_data.out" # Name of system monitor fileMONITOR_INTR=10 # Sleep time between system monitoringCLEANUP_INTR=30 # Sleep time between log file cleanup

CLEANUP=1 # Set to '0' if running as a client against a remote server

VAR_DIR="/data0/qa_test_data/5122_64bit-rhel5/var"# If running as a client of a remote server# Set to the value of the VARDIR on the server

export VAR_DIR # Used by log_cleanup.sh

SERVER_SOCKET="$VAR_DIR/tmp/master.sock"STRESS_TEST_SUITEDIR="$STRESS_TEST_BASEDIR/mysql-test/qa-suite/$STRESS_SUITE"

################################################################################

19Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• Scenario file example (1/2)

###########################################################################DURATION=86400 # 24 hour run - Duration in secondsTHREADS=50 # Number of test threadsLOG_TIME=30 # Defaut sleep time

LOAD_LINES=5000 # Initial # of lines loaded to tablesNUM_VAL=15 # Random values/segments to useIUDS_UNIT=10 # Number of rows used in some routines.

LOG_UPPER=5000 # Max Number of rows in log tableLOG_LOWER=4000 # Number of rows to truncate log

ENG1=innodb # Engine type used for the first tableENG1_ALT=myisam # Engine type used for altering the first tableENG2=innodb # Engine type used for the second tableENG_LOG=myisam # Engine type used for the log table

PROGRAM_INIT="initdb.txt" # Testprogram (collection of scripts) which# should be executed before the stress test# clients and the monitor are started

PROGRAM_TASK_1="log_tests.txt" # Testprogram (Collection of scripts) which# should monitor the ongoing stress test

LOG_TIME_1=$LOG_TIME # Sleep time between logging for the first task

PROGRAM_CLIENT_1="iuds3_tests.txt" # Testprogram (Collection of scripts) which# should be executed by the first stress test client

THREADS_CLIENT_1=25 # Number of threads for the first client

20Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• Scenario file example (2/2)

# The following can be used to specify a command to run once the test has completed# and all clients were terminatedPOST_TEST_COMMAND="$MYSQL_BINDIR/mysql --user=root --protocol=tcp --port=$SERVER_PORT \

-e'SET GLOBAL event_scheduler=OFF;'"

# Settings for the 2nd client run (ignored if PROGRAM_CLIENT_2 is unset)PROGRAM_CLIENT_2="iuds1_tests.txt" # Testprogram (Collection of scripts) which

# should be executed by the 2nd stress test clientTHREADS_CLIENT_2=10 # Number of threads for the 2nd client

# Settings for the 3rd client run (ignored if PROGRAM_CLIENT_3 is unset)PROGRAM_CLIENT_3="iuds0_tests.txt" # Testprogram (Collection of scripts) which

# should be executed by the 3rd stress test clientTHREADS_CLIENT_3=15 # Number of threads for the 3rd client

# Settings for the 2nd task run (ignored if PROGRAM_TASK_2 is unset)PROGRAM_TASK_2="tb1_mgr_mon.txt" # Testprogram (Collection of scripts) which

# should be executed by the 2nd test taskLOG_TIME_2=35 # Sleep time for the 2nd task

# Settings for the 3rd task run (ignored if PROGRAM_TASK_3 is unset)PROGRAM_TASK_3= # Testprogram (Collection of scripts) which

# should be executed by the 3rd test task

LOG_TIME_3= # Sleep time for the 3rd task

###########################################################################

21Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• How to Add Tests:– Copy the test files you want to use in to the ‘/t’ directory under

‘systems’

– Copy the result files you want to use in to the ‘/r’ directory under ‘systems’

– In the ‘/t’ directory create: • a text file listing the ‘test’ file(s) you want to be run once for the test

setup.

• Test files listing ‘test’ file(s) you want to be be run concurrently during the test.

– In the ‘systems’ directory create (or copy an existing) ‘scenario’(*.tst) file. • Set the ‘PROGRAM_CLIENT_n‘ and ‘PROGRAM_TASK_n’ to point to

test files created above

• Set ‘THREADS_CLIENT_n’ for required number of concurrent threads

• Set ‘LOG_TIME_n’ for required task sleep time

• Set required values for ‘DURATION’, ‘THREADS’ and ‘LOG_TIME’

– Configure the environment file

– From test-extra/mysql-test/qa-suite/updown/bin, Execute:• ./run_systest –scenario=file –config=file

22Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• Test Results

– Test run result files including test log files, 'reject' files, screen outputs and error files are located under the 'STRESS_TEST_WORKDIR' location as defined in the 'environment file.

– These files need to be reviewed during/after the test run in order to analyze the test results

23Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• Quick Run Option:

For running a single test case, a simplified ‘mysql-test-run.pl’

wrapper can be used:

perl ./mysql-test-run.pl --stress --stress-init-file=init.txt

--stress-test-file=run.txt –stress-test-duration=<seconds>

--stress-threads=<number of threads>

where –

init.txt includes the name of the test file to run once for the setup

run.txt includes the name(s) of the test files to run by the concurrent threads

24Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Concurrency/Longevity Tests

• More information:– https://inside.mysql.com/wiki/QA_Systems_Howto

• Credits/Owner

– mysql-stress-test.pl: Alexey Stroganov (Ranger)

– run_systems: Omer BarNir / Matthias Leich

– Current maintainer: Omer BarNir

25Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Questions?

26Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Best Practices and Advance

Mysqltest Features

• Details and Examples :– https://inside.mysql.com/wiki/Uni_How_to_Create_good_Tests

27Copyright 2007 MySQL AB The World’s Most Popular Open Source DatabaseMySQL Confidential

Questions?

top related