亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL?Test?Run?測(cè)試框架詳細(xì)介紹?

 更新時(shí)間:2022年02月22日 08:47:19   作者:GreatSQL社區(qū)  
這篇文章主要介紹了MySQL?Test?Run?測(cè)試框架,主要通過(guò)include、suite展開(kāi)MySQL?Test?Run?測(cè)試框架相關(guān)內(nèi)容,文章介紹詳細(xì),需要的小伙伴可以參考一下

一、介紹

MySQL Test Run 簡(jiǎn)稱(chēng)MTR,是MySQL官方提供的自動(dòng)化測(cè)試框架,執(zhí)行腳本在發(fā)布路徑的mysql-test目錄下。

主要測(cè)試步驟,是通過(guò)執(zhí)行一個(gè)case(*.test)中的語(yǔ)句(包括sql語(yǔ)句和其他管理語(yǔ)句),將case的輸出記錄保存在結(jié)果文件(*.result)中,或者是將語(yǔ)句執(zhí)行結(jié)果與標(biāo)準(zhǔn)的輸出結(jié)果作diff,如果出現(xiàn)偏差就會(huì)報(bào)錯(cuò)。

MySQL自動(dòng)化框架包括一組測(cè)試用例和用于運(yùn)行它們的程序:perl 腳本(mysql-test-run.pl)和 c++ 二進(jìn)制(mysqltest)。

  • perl 腳本:負(fù)責(zé)控制流程,包括啟停、識(shí)別執(zhí)行哪些用例、創(chuàng)建文件夾、收集結(jié)果等操作。
  • mysqltest:負(fù)責(zé)執(zhí)行測(cè)試用例,包括讀文件,解析特定語(yǔ)法,執(zhí)行用例。

二、安裝

安裝依賴(lài)包

本次安裝環(huán)境是CentOS 8.5

yum -y install perl* -y

下載安裝包并解壓:

本文采用的MySQL版本是8.0.28,可根據(jù)需要自行選擇版本。

cd ?/home/
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-test-8.0.28-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-test-8.0.28-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.28-linux-glibc2.12-x86_64 mysql_mtr_8.0.28
cd /home/mysql_mtr_8.0.28/
cp -r /path-to-db/* /home/mysql_mtr_8.0.28/ ?#將mysql安裝包目錄下的文件與mtr目錄合并
cd /home/mysql_mtr_8.0.28/mysql-test #進(jìn)入mtr目錄

主要介紹:

include:

包含.inc文件,用于測(cè)試開(kāi)始時(shí)判斷是否滿(mǎn)足測(cè)試條件,在測(cè)試用例中通過(guò)source命令引入,就像C/C++的頭文件,在mtr的體系中,我們可以將許多可重復(fù)利用的測(cè)試語(yǔ)句,提取到*.inc文件中,放到對(duì)應(yīng)的include目錄中,以便在*.test中直接調(diào)用。

suite:

包含所有測(cè)試suite,每一個(gè)suite為一個(gè)測(cè)試用例集,一般地,我們將若干個(gè)測(cè)試功能點(diǎn)同屬于一個(gè)功能模塊的testcase放在一個(gè)大目錄下,這個(gè)包含了t和r目錄的大目錄被稱(chēng)為一個(gè)testsuite。其中a.test文件會(huì)放在t目錄,而a.result放在r目錄。

三、測(cè)試示例

我們通過(guò)一個(gè)最簡(jiǎn)單的例子來(lái)說(shuō)明這個(gè)框架是怎么使用的。

四、創(chuàng)建測(cè)試用例

在 mysql-test/t 目錄下創(chuàng)建一個(gè)文件名為 mytest.test的測(cè)試用例:

# vi mytest.test
--disable_warnings
DROP TABLE IF EXISTS t1;
SET @@sql_mode='NO_ENGINE_SUBSTITUTION';
--enable_warnings

SET SQL_WARNINGS=1;

CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (2);

DROP TABLE t1;?

執(zhí)行并查看結(jié)果:

# ./mtr --record mytest.test
Logging: ./mtr ?mytest.test
MySQL Version 8.0.28
Checking supported features...
?- SSL connections supported
Collecting tests...
Checking leftover processes...
Removing old var directory...
Creating var directory '/usr/local/mysql/mysql-test/var'...
Installing system database...
Using parallel: 1

==============================================================================

TEST ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?RESULT ? TIME (ms) or COMMENT
--------------------------------------------------------------------------

worker[1] Using MTR_BUILD_THREAD 300, with reserved ports 13000..13009
worker[1] mysql-test-run: WARNING: running this script as _root_ will cause some tests to be skipped
[100%] main.mytest ? ? ? ? ? ? ? ? ? ? ? ? ?[ pass ] ? ? 12
--------------------------------------------------------------------------
The servers were restarted 0 times
Spent 0.012 of 4 seconds executing testcases

Completed: All 1 tests were successful.?

看到successful說(shuō)明執(zhí)行成功。

執(zhí)行說(shuō)明:

  •  1. mysql-test/mtr這個(gè)文件,是一個(gè)perl腳本。同目錄下還有 mysql-test-run 和mysql-test-run.pl,這三個(gè)文件是一模一樣的; 
  •  2. 執(zhí)行case時(shí)會(huì)自動(dòng)啟動(dòng)一個(gè)mysql服務(wù),默認(rèn)端口為13000。如果這個(gè)case涉及到需要啟動(dòng)多個(gè)服務(wù)(比如主從),則端口從13000遞增; 
  •  3. ./mtr的參數(shù)只需要指明測(cè)試case的前綴即可,當(dāng)你執(zhí)行./mtr mytest會(huì)自動(dòng)到t/目錄下搜索 mytest.test文件來(lái)執(zhí)行,也可以輸入完整的測(cè)試?yán)Q(chēng)如./mtr mytest.test。 如果要執(zhí)行某個(gè)功能模塊的所有測(cè)試用例,可以在suite目錄下創(chuàng)建一個(gè)大目錄如spTest然后再分別創(chuàng)建t和r目錄,執(zhí)行該目錄的測(cè)試?yán)梢詫?xiě)成:./mtr spTest.mytest; 
  •  4. mytest.test最后一行是刪除這個(gè)創(chuàng)建的表。因?yàn)槊總€(gè)case都要求不要受別的case影響,也不要影響別的case,因此自己在case中創(chuàng)建的表要?jiǎng)h除;
  •  5.第一次執(zhí)行建議加上參數(shù)--record,執(zhí)行完會(huì)在對(duì)應(yīng)的r目錄下生成mytest.result;mtr會(huì)將mytest.test的執(zhí)行結(jié)果與r/mytest.result作diff。  若完全相同,則表示測(cè)試結(jié)果正常(如果需要和往期測(cè)試結(jié)果做對(duì)比,需要在r目錄下先提供一份xx.result文件);
  •  6.MTR提供了一套測(cè)試用例,如果不帶任何參數(shù)直接執(zhí)行./mtr,會(huì)運(yùn)行t目錄下的的所有case,包括上面剛新增的用例。

五、mtr 其他常用參數(shù)介紹

–force

默認(rèn)情況下,只要遇到一個(gè)用例出錯(cuò),測(cè)試程序就會(huì)退出,加入該參數(shù)后,mtr會(huì)忽略錯(cuò)誤并繼續(xù)執(zhí)行下一個(gè)case直到所有case執(zhí)行結(jié)束再退出(但如何腳本存在太多錯(cuò)誤還是會(huì)退出);

–record

是否記錄results結(jié)果,首次執(zhí)行建議帶上,讓其自動(dòng)生成.results文件(再修改成我們預(yù)期的結(jié)果文件);

若一個(gè)執(zhí)行輸出結(jié)果和testname.result文件不同,會(huì)生成一個(gè)testname.reject文件,該文件在下次執(zhí)行成功之后被刪除;檢查reject文件的內(nèi)容,如果里面是期望的輸出,則將內(nèi)容拷貝到.result文件中,作為以后判斷運(yùn)行結(jié)果是否通過(guò)的依據(jù);

–big-test

執(zhí)行標(biāo)記為big的測(cè)試用例,因?yàn)橛美^大、耗時(shí)較長(zhǎng),標(biāo)記為big的用例默認(rèn)不會(huì)執(zhí)行,輸入兩遍big-test則只執(zhí)行標(biāo)記為big的測(cè)試用例;

–suite=[dirname]

批量執(zhí)行指定測(cè)試目錄下的所有測(cè)試?yán)?,有時(shí)候我們要執(zhí)行一套xx.test文件,這樣可以在執(zhí)行時(shí)候指定套件名稱(chēng)。

連接遠(yuǎn)程的數(shù)據(jù)庫(kù)進(jìn)行mtr執(zhí)行:
 

#./mtr --extern host=192.168.6.1 --extern port=3306 --extern user=root --extern password='123456' ?--record --force example.1

--extern:一般情況下mtr是啟動(dòng)自己的MySQL服務(wù)來(lái)進(jìn)行測(cè)試,如果在啟動(dòng)時(shí)指定參數(shù)—extern,則可以使用指定的MySQL服務(wù)進(jìn)行測(cè)試;
host | port :遠(yuǎn)程服務(wù)器地址 | 端口;
user | password: 對(duì)應(yīng)數(shù)據(jù)庫(kù)的用戶(hù)名 | 密碼;

六、測(cè)試用例編寫(xiě)的規(guī)范

  • 盡可能避免每行超過(guò)80個(gè)字符 ;
  • 用#開(kāi)頭,作為注釋;
  • 縮進(jìn)使用空格,避免使用tab;
  • SQL 語(yǔ)句使用相同的風(fēng)格,包括關(guān)鍵字大寫(xiě),其它變量、表名、列名等小寫(xiě);
  • 增加合適的注釋。特別是文件的開(kāi)頭,注釋出測(cè)試的目的、可能的引用或者修復(fù)的bug編號(hào);
  • 為了避免可能的沖突,習(xí)慣上表命名使用 t1、t2…視圖命名使用v1、v2…;

case運(yùn)行失敗的原因:

  • 用例文件中的sql可能不合法;
  • 產(chǎn)生的結(jié)果文件與期望文件diff結(jié)果不一致;
  • 具體錯(cuò)誤原因可以通過(guò)查看執(zhí)行時(shí)的輸出日志進(jìn)行排查修改;

處理預(yù)期錯(cuò)誤:

  • 在期望有返回錯(cuò)誤的語(yǔ)句前面使用error指令,例如創(chuàng)建一個(gè)已經(jīng)存在的表名時(shí),可以使用以下任一種方式:

--error 1050
--error ER_TABLE_EXISTS_ERROR
其中數(shù)字對(duì)應(yīng)錯(cuò)誤碼,ER_TABLE_EXISTS_ERROR對(duì)應(yīng)錯(cuò)誤的邏輯名。
這樣在mysqltest運(yùn)行后,會(huì)將返回的錯(cuò)誤信息一起寫(xiě)入結(jié)果文件,這些錯(cuò)誤信息就作為期望結(jié)果的一部分了。

也可以使用SQLSTATE來(lái)指示期望有錯(cuò)誤返回,例如與MySQL錯(cuò)誤碼1050關(guān)聯(lián)的SQLSTATE值是42S01,使用下面的方式,注意編碼增加了S前綴:

--error S42S01
在指令error后面是可以加入多個(gè)錯(cuò)誤碼作為參數(shù)的,使用逗號(hào)分隔即可;.

MTR其他詳細(xì)用法可以參考官網(wǎng): 官方文檔

到此這篇關(guān)于MySQL Test Run 測(cè)試框架詳細(xì)介紹 的文章就介紹到這了,更多相關(guān)MySQL Test Run 測(cè)試框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL操作并使用Python進(jìn)行連接

    MySQL操作并使用Python進(jìn)行連接

    這篇文章主要介紹了MySQL操作并使用Python進(jìn)行連接,文章通過(guò)設(shè)置外鍵進(jìn)行表與表的相連,且外鍵必須是其他表的主鍵展開(kāi)詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-06-06
  • mysql 8.0.17 解壓版安裝配置方法圖文教程

    mysql 8.0.17 解壓版安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.17 解壓版安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • mYsql日期和時(shí)間函數(shù)不求人

    mYsql日期和時(shí)間函數(shù)不求人

    mYsql日期和時(shí)間函數(shù)不求人...
    2007-04-04
  • MySQL中order?by的執(zhí)行過(guò)程

    MySQL中order?by的執(zhí)行過(guò)程

    這篇文章主要介紹了MySQL中order?by的執(zhí)行過(guò)程,一訂單表為例展開(kāi)相應(yīng)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • mysql數(shù)據(jù)庫(kù)鎖的產(chǎn)生原因及解決辦法

    mysql數(shù)據(jù)庫(kù)鎖的產(chǎn)生原因及解決辦法

    這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)鎖的產(chǎn)生原因及解決辦法,需要的朋友可以參考下
    2016-01-01
  • centos 7安裝mysql5.5的方法

    centos 7安裝mysql5.5的方法

    這篇文章主要介紹了centos 7安裝mysql5.5的方法,需要的朋友可以參考下
    2015-09-09
  • MySQL數(shù)據(jù)庫(kù)完全卸載的方法

    MySQL數(shù)據(jù)庫(kù)完全卸載的方法

    MySQL數(shù)據(jù)庫(kù)是一款非常好用的數(shù)據(jù)庫(kù)管理系統(tǒng),但是相對(duì)來(lái)說(shuō)卸載起來(lái)麻煩一些,本文就詳細(xì)的介紹有一下卸載方法,感興趣的可以了解一下
    2022-03-03
  • Mysql計(jì)算字段長(zhǎng)度函數(shù)之CHAR_LENGTH函數(shù)

    Mysql計(jì)算字段長(zhǎng)度函數(shù)之CHAR_LENGTH函數(shù)

    mysql中計(jì)算字符串長(zhǎng)度有兩個(gè)函數(shù)分別為char_length和length,char_length函數(shù)可以計(jì)算unicode字符,下面這篇文章主要給大家介紹了關(guān)于Mysql計(jì)算字段長(zhǎng)度函數(shù)之CHAR_LENGTH函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • django2.2版本連接mysql數(shù)據(jù)庫(kù)的方法

    django2.2版本連接mysql數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了django2.2版本如何連接mysql數(shù)據(jù)庫(kù),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 淺談MySQL 有哪些死鎖場(chǎng)景

    淺談MySQL 有哪些死鎖場(chǎng)景

    本文主要介紹了淺談MySQL 有哪些死鎖場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論