MySQL Test Suite使用
阿新 • • 發佈:2019-01-02
MySQL Test Suite使用
MySQL自動測試套件(The MySQL Test Suite)用於對MySQL程式進行測試,包括各種功能與儲存引擎。包含於MySQL與MariaDB版本程式碼中,位於mysql-test目錄下。總體測試指令碼為mysql-test-run.pl。該perl指令碼通過呼叫各種已有的測試指令碼,將測試結果與預置的result檔案做對比來判斷測試是否通過。(任何一點差異都會導致測試失敗,包括預期之外的warning)一、主要目錄介紹
-
- include
1 2 3 4 | if (`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'innodb' AND support IN ('YES', 'DEFAULT', 'ENABLED')`) { --skip Test requires InnoDB. } |
如不滿足,則會跳過需要該驗證的測試。
-
- suite
-
- t
1 2 3 4 5 | # # Check that we haven't any strange new tables or databases # show databases; show tables in mysql; |
上面內容即為1st這個測試用例的測試指令碼
2、配置檔案 例:innodb_bug53674-master.opt –loose-innodb-locks-unsafe-for-binlog –binlog-format=mixed 為該測試需要的特殊配置項 3、指令碼檔案,在測試開始之前執行的指令碼 例:rpl_misc_functions-slave.sh rm -f $MYSQLTEST_VARDIR/master-data/test/rpl_misc_functions.outfile
-
- r
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | show databases; Database information_schema mtr mysql performance_schema test show tables in mysql; Tables_in_mysql column_stats columns_priv db event func general_log gtid_slave_pos help_category help_keyword help_relation help_topic host index_stats innodb_index_stats innodb_table_stats plugin proc procs_priv proxies_priv roles_mapping servers slow_log table_stats tables_priv time_zone time_zone_leap_second time_zone_name time_zone_transition time_zone_transition_type user |
執行完1st用例會嚴格比對該檔案。完全一致則測試通過。
-
- std_date
-
- var
二、測試用例集
./mysql-test-run.pl不帶任何引數表示執行所有測試用例集。使用—suite=suitename來指定單獨執行suitename目錄下的所有測試用例。 測試用例集包括:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | main:主要測試用例 archive binlog csv encryption:加密功能 engines federated funcs_1:額外功能(包括檢視、儲存過程、INFORMATION_SCHEMA等) funcs_2:額外功能(字符集等) galera galera_3nodes handler heap innodb innodb_fts:innodb全文索引 innodb_zip:innodb壓縮 jp:日本字元相關測試 large_tests: maria mtr mtr2 multi_source ndb optimizer_unfixed_bugs parts percona perfschema perfschema_stress plugins roles rpl storage_engine stress sys_vars unit vcol wsrep |
三、主要引數
force:預設情況下,只要遇到一個用例出錯,測試程式就會退出,在指定force的情況下,測試程式會繼續執行下面的測試(但是最多發現10個錯誤還是會退出) suite:指定使用的測試suite do-test:會以輸入的字串進行匹配用例執行 skip-test:會以輸入的字串進行匹配跳過用例執行 big-test:執行標記為big的測試用例。因為用例較大、耗時較長,標記為big的用例預設不會執行。輸入兩遍big-test則只執行標記為big的測試用例 recored:重新生成結果檔案 mysqld:傳遞啟動引數給mysqld,每個引數需要分別指定一個mysqld 其他還有很多選項,可以使用./mtr –help檢視 如果需要在服務啟動前執行一些指令碼,可以寫在 t/testname.sh檔案中,由mtr自動執行。四、測試舉例
例1:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | [[email protected] mysql-test]$ ./mtr --force --big-test --suite=archive Logging: ./mtr --force --big-test --suite=archive vardir: /home/lzk/mysql-test/var Checking leftover processes... Removing old var directory... Creating var directory '/home/lzk/mysql-test/var'... Checking supported features... MariaDB Version 10.1.12-MariaDB - SSL connections supported Using suites: archive Collecting tests... Installing system database... ============================================================================== TEST RESULT TIME (ms) or COMMENT -------------------------------------------------------------------------- worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 16000..16019 archive.archive_debug [ skipped ] Requires debug build archive.partition_archive [ pass ] 74 archive.archive_no_symlink [ pass ] 5 archive.archive-big [ pass ] 298619 archive.archive [ pass ] 417 archive.archive_bitfield [ pass ] 37 archive.archive_gis [ pass ] 66 archive.archive_symlink [ pass ] 11 archive.discover [ pass ] 47 archive.discover_5438 [ pass ] 7 archive.mysqlhotcopy_archive [ pass ] 1035 archive.repair [ pass ] 3 archive.archive_plugin [ pass ] 6 -------------------------------------------------------------------------- The servers were restarted 3 times Spent 300.327 of 309 seconds executing testcases Completed: All 12 tests were successful. 1 tests were skipped, 0 by the test itself. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | [[email protected] mysql-test]$ ./mtr binlog_innodb_row Logging: ./mtr binlog_innodb_row vardir: /home/lzk/mysql-test/var Checking leftover processes... - found old pid 28610 in 'mysqld.1.pid', killing it... process did not exist! Removing old var directory... Creating var directory '/home/lzk/mysql-test/var'... Checking supported features... MariaDB Version 10.1.12-MariaDB - SSL connections supported klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_550) Collecting tests... Installing system database... ============================================================================== TEST RESULT TIME (ms) or COMMENT -------------------------------------------------------------------------- worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 16000..16019 binlog.binlog_innodb_row 'innodb_plugin,row' [ pass ] 3361 binlog.binlog_innodb_row 'row,xtradb' [ pass ] 3349 -------------------------------------------------------------------------- The servers were restarted 1 times Spent 6.710 of 17 seconds executing testcases Completed: All 2 tests were successful. |
每個測試結束前,mtr會檢索error日誌,如果發現warning或error,則測試失敗。
再來看兩個失敗用例: (擷取部分日誌)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | innodb.innodb_bug53674 'innodb_plugin' [ fail ] Found warnings/errors in server log file! Test ended at 2016-03-24 20:57:36 line 2016-03-24 20:57:35 7fd0fc6fc7e0 InnoDB: Warning: Using innodb_locks_unsafe_for_binlog is DEPRECATED. This option may be removed in future releases. Please use READ COMMITTED transaction isolation level instead, see http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html. ^ Found warnings in /home/lzk/mysql-test/var/log/mysqld.1.err ok - saving '/home/lzk/mysql-test/var/log/innodb.innodb_bug53674-innodb_plugin/' to '/home/lzk/mysql-test/var/log/innodb.innodb_bug53674-innodb_plugin/' innodb.innodb_bug53674 'xtradb' [ fail ] Found warnings/errors in server log file! Test ended at 2016-03-24 20:57:37 line 2016-03-24 20:57:36 7f274c58b7e0 InnoDB: Warning: Using innodb_locks_unsafe_for_binlog is DEPRECATED. This option may be removed in future releases. Please use READ COMMITTED transaction isolation level instead, see http://dev.mysql.com/doc/refman/5.6/en/set-transaction.html. ^ Found warnings in /home/lzk/mysql-test/var/log/mysqld.1.err ok - saving '/home/lzk/mysql-test/var/log/innodb.innodb_bug53674-xtradb/' to '/home/lzk/mysql-test/var/log/innodb.innodb_bug53674-xtradb/' |
分析日誌可以看出是在測試過程中在錯誤日誌中發現了warnings/errors。原因是使用了廢棄的引數innodb_locks_unsafe_for_binlog導致warning。
找到並修改配置檔案:innodb_bug53674-master.opt 將–loose-innodb-locks-unsafe-for-binlog –binlog-format=mixed 修改為:–transaction-isolation=READ-COMMITTED –binlog-format=mixed 重新測試:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | [[email protected] mysql-test]$ ./mtr innodb_bug53674 Logging: ./mtr innodb_bug53674 vardir: /home/lzk/mysql-test/var Checking leftover processes... Removing old var directory... Creating var directory '/home/lzk/mysql-test/var'... Checking supported features... MariaDB Version 10.1.12-MariaDB - SSL connections supported klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_550) Collecting tests... Installing system database... ============================================================================== TEST RESULT TIME (ms) or COMMENT -------------------------------------------------------------------------- worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 16000..16019 innodb.innodb_bug53674 'innodb_plugin' [ pass ] 211 innodb.innodb_bug53674 'xtradb' [ pass ] 205 -------------------------------------------------------------------------- The servers were restarted 1 times Spent 0.416 of 10 seconds executing testcases Completed: All 2 tests were successful. |
不再有warning,測試通過。