Для создания собственных контрольных тестов можно использовать язык
mysqltest
. К сожалению, полная документация по языку пока еще не написана,
но мы планируем в скором времени это сделать. Можно, однако, обратиться к
имеющимся контрольным тестам и использовать их в качестве примера. В
качестве отправных точек должны служить следующие моменты:
Тесты должны быть расположены в
mysql-test/t/*.test
Контрольные тесты должны состоять из завершающихся точкой с запятой
;
команд и должны соответствовать вводу для клиента командной строкиmysql
. Команда по умолчанию является запросом, который предназначен для посылки серверу MySQL, за исключением тех случаев, когда она распознается как внутренняя команда (напр.sleep
).Все запросы, выдающие результаты, - например
SELECT
,SHOW
,EXPLAIN
и т.д. должны предваряться@/path/to/result/file
. Файл должен содержать ожидаемые результаты. Такой файл результатов можно легко сгенерировать, запустивmysqltest -r < t/test-case-name.test
из каталогаmysql-test
, а затем при необходимости можно отредактировать сгенерированные файлы результатов для подгонки вывода к ожидаемому виду. В этом случае следует быть особенно внимательным, чтобы не добавить или удалить каких-либо невидимых символов - внимательно следите за тем, чтобы только изменялся текст и/или удалялись строки. Если необходимо вставить строку, то нужно следить за тем, чтобы поля были разделены символами жесткой табуляции, и такой же символ жесткой табуляции должен присутствовать в конце. Для проверки того, что текстовый редактор ничего не напутал в процессе редактирования, может пригодитьсяod -c
. Мы, конечно, надеемся, что никому не придется редактировать выводmysqltest -r
, поскольку потребность в этом возникает только в случае обнаружения ошибки.Чтобы получить соответствие нашей конфигурации, следует разместить файлы результатов в каталоге
mysql-test/r
и назвать ихtest_name.result
. Если тест производит более одного результата, следует использоватьtest_name.a.result
,test_name.b.result
и т.д.Если команда возвращает ошибку, то необходимо в предыдущей строке указать
--error error-number
.error-number может
быть списком номеров возможных ошибок, разделенных','
.При написании контрольного теста репликации необходимо в первой строке тестового файла поместить
source include/master-slave.inc;
. Для переключения между головным и подчиненным серверами используетсяconnection master;
иconnection slave;
. Если что-то требуется сделать на дополнительном соединении, то можно выполнитьconnection master1
; для головного иconnection slave1;
для подчиненного.-
Если необходимо что-либо выполнять в цикле, то можно использовать нечто в таком духе:
let $1=1000; while ($1) { # здесь выполняются ваши запросы dec $1; }
Для паузы между запросами используется команда
sleep
. Она поддерживает десятые доли секунды, таким образом можно, например, делатьsleep 1.3;
для временной задержки в 1,3 секунды.Чтобы для определенного контрольного теста запускать подчиненный сервер с дополнительными опциями, нужно поместить эти опции в формате командной строки в
mysql-test/t/test_name-slave.opt
. Для головного сервера опции помещаются вmysql-test/t/test_name-master.opt
.Если у вас возникнут вопросы по тестовому пакету или если вы хотите добавить контрольный тест, шлите e-mail на
<[email protected]>
. Поскольку в списке не допускаются присоединенные файлы, все нужные файлы следует положить на: ftp://support.mysql.com/pub/mysql/Incoming/