2017-02-25 40 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