2017-02-25 41 views
0

我正在做放心的自動API測試。後端具有REST調用,但所有內容均以彈性搜索存儲。到目前爲止,只有POST和GET方法被實現,我不能使用DELETE作爲方法。我知道有一種方法可以通過Chrome擴展Sense刪除彈性搜索庫,但我正在尋找一種方法來在自動化API測試中刪除彈性搜索庫,以便使測試獨立。例如在@BeforeTest中加載帶有數據的彈性搜索庫,然後在@After中執行@Test我想刪除基礎並將其返回到它的默認空狀態,以便從空白處運行下一個測試基礎。任何幫助,將不勝感激。刪除自動化API測試中的彈性搜索庫?

+0

當你說彈性搜索基地,你的意思是一個指數? – paqash

+0

@paqash我的意思是在清除所有彈性搜索基礎。 – Gudzo

+0

是的,我不知道什麼是彈性搜索基礎。 Elasticsearch將數據存儲在索引中。 – paqash

回答

0

您可以檢查soupmix/elasticsearch client自動化測試用例。我們使用php來創建客戶端,並在測試設置中創建索引並將數據填充到此索引。

protected function setUp() 
{ 
    $config =[ 
     'db_name' => 'test', 
     'hosts' => ['127.0.0.1:9200'], 
    ]; 
    $client = ClientBuilder::create()->setHosts($config['hosts'])->build(); 
    $this->client = new ElasticSearch($config, $client); 
} 

對於Java,您可以在@BeforeTest部分使用下面的代碼塊:

RestClient restClient = RestClient.builder(
    new HttpHost("localhost", 9200, "http" 
).build(); 

在那之後,我們運行一些測試情況下,你可以GitHub的頁面上看到的。你可以在你的java代碼中做到這一點。在測試結束後,我們再次放棄索引。

protected function tearDown() 
{ 
    $this->client->drop('test'); 
} 

對於Java,你需要做這個步驟,下面的代碼片段在@After部分:

Response deleteIndex = restClient.performRequest(
    "DELETE", 
    "/test", 
    Collections.<String, String>emptyMap()); 
restClient.close(); 

Java一樣例如,降法,是在我們的PHP例如,使用直接HTTP DELETE方法。

public function drop($collection) 
{ 
    $params = ['index' => $this->index]; 
    try { 
     $this->conn->indices()->delete($params); 
    } catch (\Exception $e) { 
     // This ignore the error 
     return false; 
    } 
    return true; 
} 

我們使用一個索引,特別是對於所有的測試用例,能夠在測試結束時輕鬆刪除所有數據。

+0

我正在使用JAVA和Rest Assured,我可以直接訪問彈性搜索,並使用Chrone Sense的擴展名中的此命令來刪除:DELETE/xxxxxx/xxxxx_query { 「query」:{ 「match_all」:{} } }我的問題是有什麼辦法可以在自動化測試中實現這個查詢。謝謝 – Gudzo

+0

是的。您正在使用delete_by_query API端點,並且您可以使用elasticsearch Java Rest Client輕鬆構建此查詢https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/_example_requests.html#_example_requests我可以創建一個例子如果你想。在你的測試案例中,你需要一個RestClient實例的工廠,並輕鬆地用這個客戶端來執行你的請求。在測試結束時,您還可以使用刪除請求刪除索引。 – hkulekci

+0

我添加了一些與php相關的java示例命令。 – hkulekci