快速編寫sql接口測試用例


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