- mysqltest case的語法比較簡單,分三類:
- 1. command
- command用來控制運行時的行爲,後面重點介紹。
- 一般有兩種寫法:
- command; # 這是後面帶;的
- --command # 前面帶--,不需要;
- 另外,while和if要稍微特殊些。
- 2. sql
- 就是普通的sql語句,CASE裏面大部分都是sql,以分號結束。
- 3. comment
- 就是註釋,用#開頭
- mysqltest提供了幾十個command,下面只介紹我們常用的。
- 1. --error
- 有些CASE就是要驗證sql失敗的情況,在sql語句前面加上—error 錯誤碼就可以了。--error後面可以跟兩種值,一種是error no,另外一種是sqlstate,如果是後者需要加上S做前綴。
- 比如:
- --error 65535
- create table t1(pk createtime primary key, a int);
- 或
- --error SHY000
- select a from t1 union select * from t2;
- 2. disable_abort_on_error / enable_abort_on_error
- 默認情況下(enable)sql執行失敗後mysqltest就退出了,後面的內容就不會執行,也不會生成reject文件,顯示執行disable命令可以在sql失敗後繼續執行後面的內容,並生成reject文件。
- 3. disable_query_log / enable_query_log
- 默認情況下(enable)所有的sql語句都會在result文件中記錄,在一些情況下(比如使用了循環可能query特別多)不想打開顯示調用disable既可。
- 其他形如enable_XX/disable_XX的命令還有很多,用法都類似。
- 4. enable_parsing/disable_parsing
- 用來註釋多行,跟comment類似。
- 5. connect/disconnect與conncetion
- 測試session的時候可能會用到這兩個命令,前者是建立或斷開一個連接。後者是表示使用哪個連接執行sql語句,可以在多個connection之間切換
- 比如:
- connect (conn3,127.0.0.1,root,,test,25042);
- connection conn3;
- create table t1(a int primary key);
- drop table t1;
- disconnect conn3;
- 6. system/exec
- 執行shell命令
- 7. perl [terminator]
- 嵌入perl code,直到terminator位置,比如:
- perl END_OF_FILE;
- print "This is another test\n";
- END_OF_FILE
- 8. vertical_results/horizontal_results
- 功能跟sql語句的’\G’類似
- 9. exit
- 退出,其後的內容不會執行
- 10. let $var_name = value
- 變量賦值,整數、字符串都可以
- 11. inc $var_name/dec $var_name
- 整數加1/減1,是mysqltest唯一支持的運算。
- 12. eval
- 執行sql語句,支持變量的傳遞,比如:
- eval insert into t1(i,c1,c256,dt,d) values(0,'1','$i','2012-10-10 12:00:00','2012-10-10');
- 13. query
- mysqltest解釋每一行的時候會先判斷是sql語句還是command,如果是query指定的,都認爲是sql語句,這是避免comand名字與sql有衝突,一般也不會。
- 14. send/reap/eval_send
- 發送query後不用等待結果立即返回,在reap之前不能使用同一個connection發送sql語句。
- eval_send支持變量傳遞。
- 15. echo
- 打印
- 16. query_get_value(query, col_name, row_num)
- 獲得query返回的結果中某行某列的值
- 17. source
- 多個case可能共用一塊代碼,這塊代碼可以單獨放到一個文件,通過source導入。
- 18. require
- 將下一個query的結果與require指定的結果文件做對比,如果匹配失敗就報“this test is not supported”的錯誤。這個一般用於判斷test是否可以在某版本中使用。
- 19. result
- 顯式指定保存運行結果的文件路徑
- 20. sleep/real_sleep
- 休眠.
- 21. replace_column
- 對查詢結果的某些列的值進行替換,有些結果是隨着執行時間變化的,比如createtime或modifytime類型,爲了比較可以用這個命令將這個值替換成某常量。比如:
- --replace_column 2 searched
- select pk,b from t1;
- 22. if(exptr)
- {
- }
- 當Exptr非0,就執行大括號部分。注意,mysqltest沒有提供else if或else。低版本的mysqltest不支持exptr爲比較表達式。
- 比如:
- if($value_now == $value_orig)
- {
- --echo succeed
- }
- 23. while(exptr)
- {
- }
- 執行大括號部分,知道exptr爲0. 低版本的mysqltest不支持exptr爲比較表達式。沒有break類似的命令,可以使用end試試。
- 比如:
- while($i < 10000)
- {
- eval insert into t1(i,c1,c256,dt,d) values(0,'1','$i','2012-10-10 12:00:00','2012-10-10');
- inc $i;
- }
- 其他的命令還有:
- 1. ping,shutdown,save_master_pos,sync_slave_with_master , sync_with_master 等等,類似於mysqladmin/mysql(我們暫不支持)的功能。
- 2. start_timer等計時命令
- 3. append_file, mv, remove_file,chmod,write_file等文件操作的命令
- 詳細請參考:http://dev.mysql.com/doc/mysqltest/2.0/en/mysqltest-commands.html
快速編寫sql接口測試用例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.