Data-Processer模擬數(shù)據(jù)生成器
Data-Processer
簡介
1、是什么?
它是一個模擬數(shù)據(jù)生成器。我們在測試過程中,產(chǎn)生完整、全面的真實數(shù)據(jù)可能比較困難。我們可以根據(jù)需求,創(chuàng)建對應的模版和詞典,利用數(shù)據(jù)模擬生成器生成我們需要的模擬數(shù)據(jù)。
2、能做什么?
他能夠根據(jù)構建的模版和詞典,生成我們需要的數(shù)據(jù)。
三個應用場景:
-
測試場景
: 測試過程中,我們需要驗證數(shù)據(jù)后端的功能或性能,此時,需要降低與數(shù)據(jù)產(chǎn)生端的耦合,那么需要一個穩(wěn)定優(yōu)秀的數(shù)據(jù)生成器,來持續(xù)的不間斷的產(chǎn)生正確的數(shù)據(jù),和特殊情況下的異常數(shù)據(jù)。
-
持續(xù)集成場景:
在整個持續(xù)集成場景中,一個或多個模塊組成一個平臺,需要有源源不斷的數(shù)據(jù)進入持續(xù)集成環(huán)境,用以自動化地完成測試和迭代工作,使用Data-Processer則可以通過數(shù)據(jù)樣本的指定和簡單的編碼,非常簡單地完成這個需求。
-
生產(chǎn)場景
: 在一個項目完成測試和迭代,發(fā)布到生產(chǎn)環(huán)境之后,通常也需要進行持續(xù)的功能或可用性監(jiān)測,那么則需要有各種正?;虍惓?shù)據(jù)按照某種規(guī)則和定義,持續(xù)穩(wěn)定地生產(chǎn)并送回平臺,此時將持續(xù)集成場景中的case,只需通過簡單配置,則可以進行生產(chǎn)的驗證,以滿足這個需求。
3、架構
數(shù)據(jù)生成器包括:模版變量提取,模版變量執(zhí)行,模版變量替換組成,三部分組成
4、術語:
函數(shù)變量:模版和詞典中以"$Func{"開頭,以"}"結尾的字符串是一個函數(shù)變量。形如:$Func{intRand()},其中,intRand()為內(nèi)置函數(shù)。不支持函數(shù)嵌套
詞典變量:模版中以"$Dic{"開頭,以"}"結尾的字符串是一個詞典變量。形如:$Dic{name},其中,name為詞典文件中的一個詞典名。
自定義變量:模版中以"$Var{"開頭,以"}"結尾的字符串是一個自定義變量。形如:$Var{tmp},其中,tmp是自定義變量名。自定義變量需要與函數(shù)變量或者詞典變量聯(lián)合使用,中間以"="隔開,且無空格。 定義方式:$Var{tmp}=$Func{doubleRand(0,10,2)}。引用方式是;$Var{tmp}
5、內(nèi)置函數(shù)
long timestamp() 生成當前13位時間戳(ms)。
int intRand() 生成int正隨機整數(shù)。
int intRand(Integer n) 生成0~n的隨機整數(shù)。
int intRand(Integer s, Integer e) 生成s~e的隨機整數(shù)。
long longRand() 生成long正隨機整數(shù)。
double doubleRand() 生成0~1.0的隨機雙精度浮點數(shù)。
doubleRand(Integer s, Integer e, Integer n) 生成s~e的保留n位有效數(shù)字的浮點數(shù)。
String uuid() 生成一個uuid。
String numRand(Integer n) 生成n位隨機數(shù)。
String strRand(Integer n) 生成n位字符串,包括數(shù)字,大小寫字母。
6、怎么用?
使用之前,需要引入simulatedata-generator的jar包。
(1) 編譯:在simulatedata-generator目錄下執(zhí)行:
$ mvn clean package
在target目錄下可以看到生成了simulatedata-generator-0.0.1-SNAPSHOT.jar文件。 應用中引入此文件作為依賴即可。
(2) 編輯詞典
詞典中含有模版中需要的常量以及函數(shù),詞典文件以dic為后綴名,test.dic詞典文件形如:
name=xiaoming|||hanmeimei|||lilei
reqUrl=http://www.abc.com/a/b/c|||http://www.def.com/d/e/f
tmp=$Func{intRand(1000000000, 1999999999)}
b=testVar
ot=$Func{intRand(2)}
等號前面是詞典名,等號后面是詞典值,值可以是字符串,也可以是函數(shù)變量,多個值用"|||"隔開。如果有多個值,取值時,會隨機取其中一個值作為詞典變量值。 注意:詞典文件放置在應用跟目錄下的dictionaries目錄下。
(3) 編輯模版
模版文件以tpl后綴名,test.tpl模版文件形如:
{
"infos":{
"d_id": $Func{intRand()},
"version": $Var{tmp}=$Func{doubleRand(0,10,2)},
"os_type": "$Dic{ot}",
"os": "$Var{tmp}",
"test": "$Dic"
}
}
在模版文件中,在需要的地方放置變量(函數(shù),詞典,或者自定義),變量定義方式如第三點(術語)所述。在上面的模版中,version取值是$Func{doubleRand(0,10,2)}的值,然后將$Func{doubleRand(0,10,2)}的值賦給$Var{tmp},在下面os處,以$Var{tmp}方式引用。這樣,version和os的取值就一樣了。
(4) 調(diào)用Api執(zhí)行
//加載詞典 DicInitializer.init(); //創(chuàng)建模版分析器 TemplateAnalyzer testTplAnalyzer = new TemplateAnalyzer(tplName, tpl); //分析模版生成模擬數(shù)據(jù) testTplAnalyzer.analyse();
使用示例
//加載詞典(只需執(zhí)行一次即可)
DicInitializer.init();
//編輯模版
String tplName = "abc.tpl";
String tpl = "My name is $Dic{name}, my age is $Func{intRand(1,5)}";
//創(chuàng)建模版分析器(一個模版new一個TemplateAnalyzer對象即可)
TemplateAnalyzer testTplAnalyzer = new TemplateAnalyzer(tplName, tpl);
//分析模版生成模擬數(shù)據(jù)
String abc = testTplAnalyzer.analyse();
//打印分析結果
System.out.println(abc);