您好,登錄后才能下訂單哦!
集成測試在es源碼中的用法比較簡單。我選擇的切入口是delete-by-query插件。
將es插件的源碼導(dǎo)入intellij后,直接運(yùn)行類DeleteByQueryRestIT
, 就會運(yùn)行所有的集成測試用例。
-ea -Dtests.security.manager=false
這個運(yùn)行結(jié)果,會讓我產(chǎn)生兩個疑問:
通過查看其父類ESRestTestCase
,可以看到里面有test注解的test方法,而且設(shè)置斷點(diǎn),可以確定該方法是測試的入口。
那么500多個測試用例來自哪里呢?
看ESRestTestCase
類@BeforeClass
注解的方法
@BeforeClass
public static void initExecutionContext() throws IOException, RestException {
String[] specPaths = resolvePathsProperty(REST_TESTS_SPEC, DEFAULT_SPEC_PATH);
RestSpec restSpec = null;
FileSystem fileSystem = getFileSystem();
// don't make a try-with, getFileSystem returns null
// ... and you can't close() the default filesystem
try {
restSpec = RestSpec.parseFrom(fileSystem, DEFAULT_SPEC_PATH, specPaths);
} finally {
IOUtils.close(fileSystem);
}
validateSpec(restSpec);
restTestExecutionContext = new RestTestExecutionContext(restSpec);
}
通過了解這個方法的源碼,可以了解到在elasticsearch-2.4.5-tests.jar
里面,集成了這些測試用例。
這些測試用例的源碼就在elasticsearch/rest-api-spec
目錄下。
那么如何只運(yùn)行插件中的測試用例而忽略jar包中的測試用例呢?
-Dtests.rest.load_packaged=false
直接運(yùn)行,會發(fā)現(xiàn)測試用例運(yùn)行失敗。原來delete-by-query的測試用例有依賴。先編譯源碼:
編譯前修改項(xiàng)目源碼的elasticsearch/pom.xml文件, 不能略過集成測試。
<skip.integ.tests>false</skip.integ.tests>
然后編譯delete-by-query插件
elasticsearch/plugins/delete-by-query$ mvn install
編譯完成后再運(yùn)行DeleteByQueryRestIT類,即可成功運(yùn)行插件的測試用例。
-ea -Dtests.security.manager=false -Dtests.rest.load_packaged=false
這里的測試用例會啟用一個獨(dú)立的es集群,用來運(yùn)行測試用例,運(yùn)行完成后再shutdown. 其功能由如下的腳本提供:
elasticsearch/dev-tools/src/main/resources/integration-tests.xml
參考:
http://david.pilato.fr/blog/2016/10/18/elasticsearch-real-integration-tests-updated-for-ga/
了解了集成測試插件的運(yùn)行過程后,就可以在開發(fā)插件時自行實(shí)現(xiàn)集成測試的功能。而且通過yaml+json的方式,能夠做到測試用例的復(fù)用。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。