本發(fā)明涉及應(yīng)用程序的自動(dòng)化測試領(lǐng)域,具體涉及一種自動(dòng)化測試時(shí)客戶端與服務(wù)端的數(shù)據(jù)庫同步方法及系統(tǒng)。
背景技術(shù):
在應(yīng)用程序的自動(dòng)化測試過程中,測試規(guī)則由服務(wù)端端定義,在客戶端(例如手機(jī)、平板電腦等)上按照相關(guān)規(guī)則進(jìn)行自動(dòng)化測試。每次進(jìn)行自動(dòng)化測試時(shí),客戶端均需要從服務(wù)端上下載最新的數(shù)據(jù)庫文件,下載完成之后需要校驗(yàn)整個(gè)數(shù)據(jù)庫文件是否正確。
但是,客戶端每次從服務(wù)端上載最新的數(shù)據(jù)庫文件時(shí),不僅所需時(shí)間較長,降低了測試效率,而且所需的網(wǎng)絡(luò)流量較大,提高了測試成本;與此同時(shí),校驗(yàn)整個(gè)數(shù)據(jù)庫文件是否正確所需的時(shí)間也較長,而且占用的內(nèi)存較大,進(jìn)而使得測試效率更為低下。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明解決的技術(shù)問題為:在自動(dòng)化測試時(shí)檢測客戶端本地的數(shù)據(jù)庫版本是否與服務(wù)端相同,通過字符串校驗(yàn)服務(wù)端返回的數(shù)據(jù)庫信息。本發(fā)明能夠提高自動(dòng)化測試的測試效率,降低測試成本,非常便于人們使用,適于推廣。
為達(dá)到以上目的,本發(fā)明提供的自動(dòng)化測試時(shí)客戶端與服務(wù)端的數(shù)據(jù)庫同步方法,包括以下步驟:
S1:當(dāng)應(yīng)用程序在客戶端上進(jìn)行自動(dòng)化測試時(shí),客戶端向服務(wù)端發(fā)起數(shù)據(jù)庫信息獲取請求,數(shù)據(jù)庫信息獲包括數(shù)據(jù)庫版本、數(shù)據(jù)庫下載地址、數(shù)據(jù)庫名稱、MD5校驗(yàn)值和數(shù)據(jù)庫大小,轉(zhuǎn)到S2;
S2:客戶端獲取并解析服務(wù)端返回的數(shù)據(jù)庫信息,將解析得到的數(shù)據(jù)庫版本、數(shù)據(jù)庫文件大小和數(shù)據(jù)庫名稱,拼接形成字符串,對該字符串進(jìn)行MD5校驗(yàn)后,生成本地MD5校驗(yàn)碼;當(dāng)本地MD5校驗(yàn)碼與所述MD5校驗(yàn)值相同、且解析得到的數(shù)據(jù)庫版本的值>客戶端本地的數(shù)據(jù)庫版本的值時(shí),轉(zhuǎn)到S3;
S3:客戶端根據(jù)S2中解析得到的數(shù)據(jù)庫下載地址,下載服務(wù)端上的數(shù)據(jù)庫文件;判斷下載過程中是否出現(xiàn)異常,若是,則證明下載失敗,否則證明下載成功。
本發(fā)明提供的實(shí)現(xiàn)上述方法的自動(dòng)化測試時(shí)客戶端與服務(wù)端的數(shù)據(jù)庫同步系統(tǒng),包括位于客戶端上的數(shù)據(jù)庫信息獲取模塊、數(shù)據(jù)庫版本檢測模塊和本地?cái)?shù)據(jù)庫更新模塊;
數(shù)據(jù)庫信息獲取模塊用于:當(dāng)應(yīng)用程序在客戶端上進(jìn)行自動(dòng)化測試時(shí),向服務(wù)端發(fā)起數(shù)據(jù)庫信息獲取請求,數(shù)據(jù)庫信息獲包括數(shù)據(jù)庫版本、數(shù)據(jù)庫下載地址、數(shù)據(jù)庫名稱、MD5校驗(yàn)值和數(shù)據(jù)庫大??;
數(shù)據(jù)庫版本檢測模塊用于:獲取并解析服務(wù)端返回的數(shù)據(jù)庫信息,將解析得到的數(shù)據(jù)庫版本、數(shù)據(jù)庫文件大小和數(shù)據(jù)庫名稱,拼接形成字符串,對該字符串進(jìn)行MD5校驗(yàn)后,生成本地MD5校驗(yàn)碼;當(dāng)本地MD5校驗(yàn)碼與所述MD5校驗(yàn)值相同、且解析得到的數(shù)據(jù)庫版本的值>客戶端本地的數(shù)據(jù)庫版本的值時(shí),向本地?cái)?shù)據(jù)庫更新模塊發(fā)送本地?cái)?shù)據(jù)庫更新信號;
本地?cái)?shù)據(jù)庫更新模塊用于:收到本地?cái)?shù)據(jù)庫更新信號后,根據(jù)數(shù)據(jù)庫版本檢測模塊解析的數(shù)據(jù)庫下載地址,下載服務(wù)端上的數(shù)據(jù)庫文件;判斷下載過程中是否出現(xiàn)異常,若是,則證明下載失敗,否則證明下載成功。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
本發(fā)明在每次進(jìn)行自動(dòng)化測試時(shí),會(huì)先讓客戶端從服務(wù)端上獲取數(shù)據(jù)庫信息,以確定客戶端上的數(shù)據(jù)庫版本是否需要更新。與現(xiàn)有技術(shù)中每次下載最新的數(shù)據(jù)庫文件相比,本發(fā)明的數(shù)據(jù)庫信息僅包括數(shù)據(jù)庫的標(biāo)示參數(shù)(版本、大小、MD5校驗(yàn)值等),其下載所需的網(wǎng)絡(luò)流量非常小,下載速度也較快,因此不僅降低了測試成本,也提高了測試效率。
與此同時(shí),本發(fā)明校驗(yàn)服務(wù)端返回的數(shù)據(jù)庫信息時(shí),能夠?qū)?shù)據(jù)庫信息中的數(shù)據(jù)庫版本、數(shù)據(jù)庫文件大小和數(shù)據(jù)庫名稱組成字符串,并以該字符串生成本地MD5校驗(yàn)碼與數(shù)據(jù)庫信息中的MD5校驗(yàn)值進(jìn)行比對。與現(xiàn)有技術(shù)中校驗(yàn)整個(gè)數(shù)據(jù)庫文件相比,本發(fā)明以字符串生成的本地MD5校驗(yàn)碼較小,校驗(yàn)時(shí)所需的時(shí)間較少,占用的內(nèi)存較小,即校驗(yàn)過程非常快,進(jìn)一步提高了測試效率。
附圖說明
圖1為本發(fā)明實(shí)施例中自動(dòng)化測試時(shí)客戶端與服務(wù)端的數(shù)據(jù)庫同步方法的流程圖。
具體實(shí)施方式
以下結(jié)合附圖及實(shí)施例對本發(fā)明作進(jìn)一步詳細(xì)說明。
參見圖1所示,本發(fā)明實(shí)施例中的自動(dòng)化測試時(shí)客戶端與服務(wù)端的數(shù)據(jù)庫同步方法,包括以下步驟:
S1:當(dāng)應(yīng)用程序在客戶端上進(jìn)行自動(dòng)化測試時(shí),客戶端調(diào)用應(yīng)用接口地址(http://27.17.8.110:8989/auto_server/db.php),向服務(wù)端發(fā)起數(shù)據(jù)庫信息獲取請求,數(shù)據(jù)庫信息獲包括數(shù)據(jù)庫版本和數(shù)據(jù)庫下載地址,轉(zhuǎn)到S2。
S2:客戶端獲取并解析服務(wù)端返回的數(shù)據(jù)庫信息,客戶端將返回的數(shù)據(jù)庫版本與本地的數(shù)據(jù)庫版本進(jìn)行比較,判斷是否需要更新(下載)數(shù)據(jù)庫,若是,轉(zhuǎn)到S3,否則通知上層應(yīng)用不需要更新數(shù)據(jù)庫后結(jié)束。
S2的具體流程為:
S201:客戶端通過HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議),獲取服務(wù)端返回的數(shù)據(jù)庫信息,轉(zhuǎn)到S202。
數(shù)據(jù)庫信息具體包括:
數(shù)據(jù)庫信息的格式舉例為:
S202:客戶端通過JSON解析數(shù)據(jù)庫信息,將解析結(jié)果存放于DBVersionInfo(數(shù)據(jù)庫版本)結(jié)構(gòu)體中,轉(zhuǎn)到S203。
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它基于ECMAScript的一個(gè)子集。JSON采用完全獨(dú)立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言;易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成(一般用于提升網(wǎng)絡(luò)傳輸速率)。
DBVersionInfo結(jié)構(gòu)體的定義為:
S203:客戶端將DBVersionInfo結(jié)構(gòu)體中的version(數(shù)據(jù)庫版本)、size(數(shù)據(jù)庫文件大小)和name(數(shù)據(jù)庫名稱),拼接形成新的字符串,對該字符串進(jìn)行MD5(Message Digest Algorithm 5(消息摘要算法第五版)校驗(yàn)后,生成本地MD5校驗(yàn)碼,轉(zhuǎn)到S204。
S204:判斷本地MD5校驗(yàn)碼與服務(wù)端返回的MD5校驗(yàn)值是否相同,若是,則證明校驗(yàn)成功,轉(zhuǎn)到S205,否則證明校驗(yàn)失敗,通知上層應(yīng)用校驗(yàn)失敗后結(jié)束。
S205:取出DBVersionInfo結(jié)構(gòu)體中的version字段的值a1,判斷a1是否≤客戶端本地的數(shù)據(jù)庫版本的值a2(a2不存在時(shí),設(shè)置a2的默認(rèn)值為-1),若是,則說明本地?cái)?shù)據(jù)庫版本比服務(wù)端版本新或者兩者版本相同,此時(shí)不需要更新本地?cái)?shù)據(jù)庫,通知上層應(yīng)用不需要更新數(shù)據(jù)庫后結(jié)束;否則說明本地?cái)?shù)據(jù)庫版本比服務(wù)端的數(shù)據(jù)庫版本低,此時(shí)需要更新本地?cái)?shù)據(jù)庫,轉(zhuǎn)到S3。
S3:客戶端根據(jù)S2中解析的數(shù)據(jù)庫下載地址,下載服務(wù)端上的數(shù)據(jù)庫文件;判斷下載過程中是否出現(xiàn)異常,若是,則證明下載失敗,將下載失敗信息通知上層應(yīng)用后結(jié)束;否則證明下載成功,將下載成功信息通知上層應(yīng)用后結(jié)束。
S3的具體流程為:
S301:客戶端根據(jù)S202中解析的數(shù)據(jù)庫下載地址,開啟新的線程并通過HTTP協(xié)議向服務(wù)端發(fā)起數(shù)據(jù)庫文件下載請求,客戶端將服務(wù)端返回的下載數(shù)據(jù)全部寫入客戶端上的數(shù)據(jù)庫存儲(chǔ)文件中。
S302:判斷客戶端寫入服務(wù)端返回的下載文件的過程中,是否發(fā)生異常,若是,則證明下載失敗,將下載失敗信息通知上層應(yīng)用后結(jié)束;否則證明下載成功,將下載成功信息通知上層應(yīng)用后結(jié)束。
本發(fā)明實(shí)施例提供的實(shí)現(xiàn)上述方法的自動(dòng)化測試時(shí)客戶端與服務(wù)端的數(shù)據(jù)庫同步系統(tǒng),包括位于客戶端上的數(shù)據(jù)庫信息獲取模塊、數(shù)據(jù)庫版本檢測模塊和本地?cái)?shù)據(jù)庫更新模塊。
數(shù)據(jù)庫信息獲取模塊用于:當(dāng)應(yīng)用程序在客戶端上進(jìn)行自動(dòng)化測試時(shí),向服務(wù)端發(fā)起數(shù)據(jù)庫信息獲取請求,數(shù)據(jù)庫信息獲包括服務(wù)端返回碼、返回碼攜帶消息、數(shù)據(jù)庫版本、數(shù)據(jù)庫下載地址、數(shù)據(jù)庫名稱、MD5校驗(yàn)值和數(shù)據(jù)庫大小。
數(shù)據(jù)庫版本檢測模塊用于:獲取并通過JSON解析服務(wù)端返回的數(shù)據(jù)庫信息,將解析得到的數(shù)據(jù)庫版本、數(shù)據(jù)庫文件大小和數(shù)據(jù)庫名稱,拼接形成字符串,對該字符串進(jìn)行MD5校驗(yàn)后,生成本地MD5校驗(yàn)碼;當(dāng)本地MD5校驗(yàn)碼與所述MD5校驗(yàn)值相同、且解析得到的數(shù)據(jù)庫版本的值>客戶端本地的數(shù)據(jù)庫版本的值時(shí),向本地?cái)?shù)據(jù)庫更新模塊發(fā)送本地?cái)?shù)據(jù)庫更新信號。
數(shù)據(jù)庫版本檢測模塊若發(fā)現(xiàn)本地MD5校驗(yàn)碼與所述MD5校驗(yàn)值不相同,則通知校驗(yàn)失敗,中止工作;若發(fā)現(xiàn)解析得到的數(shù)據(jù)庫版本的值≤客戶端本地的數(shù)據(jù)庫版本的值,則通知不需要更新本地?cái)?shù)據(jù)庫,中止工作;若發(fā)現(xiàn)客戶端中沒有本地?cái)?shù)據(jù)庫版本,則設(shè)置本地?cái)?shù)據(jù)庫版本的值為1。
本地?cái)?shù)據(jù)庫更新模塊用于:收到本地?cái)?shù)據(jù)庫更新信號后,根據(jù)數(shù)據(jù)庫版本檢測模塊解析的數(shù)據(jù)庫下載地址,下載服務(wù)端上的數(shù)據(jù)庫文件;判斷下載過程中是否出現(xiàn)異常,若是,則證明下載失敗,否則證明下載成功。
本地?cái)?shù)據(jù)庫更新模塊的主要接口設(shè)計(jì)如下(Java代碼為例):
Public interface IdownloadCallback{
Public void onError(int errorCode,String errorMsg);
Public void onSuccess(String dbPath);
}
本地?cái)?shù)據(jù)庫更新模塊的具體工作流程為:
根據(jù)所述數(shù)據(jù)庫版本檢測模塊解析的數(shù)據(jù)庫下載地址,開啟新的線程并通過HTTP協(xié)議向服務(wù)端發(fā)起數(shù)據(jù)庫文件下載請求,將服務(wù)端返回的下載數(shù)據(jù)全部寫入客戶端上的數(shù)據(jù)庫存儲(chǔ)文件中;
判斷寫入服務(wù)端返回的下載文件的過程中,是否發(fā)生異常,若是,通知下載失敗,否則通知下載成功。
本發(fā)明不局限于上述實(shí)施方式,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。