2017-02-25 1 views
0

Ich mache automatisierte API-Tests mit Ruhe. Das Back-End verfügt über REST-Aufrufe, aber alles wird in der elastischen Suche gespeichert. Bisher sind nur POST- und GET-Methoden implementiert und ich kann DELETE nicht als Methode verwenden. Ich weiß, dass es eine Möglichkeit gibt, die elastische Suchbasis durch die Chrome-Erweiterung Sense zu löschen, aber ich suche nach einer Möglichkeit, die elastische Suchbasis in den automatisierten API-Tests zu löschen, um meine Tests unabhängig zu machen. Zum Beispiel in @BeforeTest laden Sie die elastische Suchbasis mit Daten, führen Sie den @Test danach aus und in der @After möchte ich die Basis löschen und es in seinen leeren Standardzustand zurückbringen, um den nächsten Test von Grund auf in einem leeren auszuführen Base. Jede Hilfe wäre willkommen.Elastische Suchbasis in automatisierten API-Tests löschen?

+0

Wenn Sie elastische Suchbasis sagen, meinen Sie einen Index? – paqash

+0

@paqash ich meine wie in allen elastischen Suchbasis klar. – Gudzo

+0

Ja, ich weiß nicht, was eine elastische Suchbasis ist. Elasticsearch speichert Daten in Indizes. – paqash

Antwort

0

Sie können die automatisierten Testfälle soupmix/elasticsearch client überprüfen. Wir verwenden PHP, um einen Client zu erstellen, und bei der Testeinrichtung erstellen wir einen Index und füllen die Daten für diesen Index auf.

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); 
} 

Für Java, können Sie folgenden Code-Block auf Ihrem @BeforeTest Teil verwenden:

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

Danach führen wir einige Testfälle, wie Sie auf Github Seite sehen. Sie können dies in Ihrem Java-Code tun. Am Ende des Tests löschen wir den Index erneut.

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

Für Java, müssen Sie mit diesen Schritte zu tun, unter Code-Schnipsel in Ihrem @After Teil:

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

wie Java Beispiel Drop-Methode, ist in unserem PHP Beispiel direkt über HTTP DELETE Methode.

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; 
} 

Wir verwenden einen Index speziell für alle Testfälle der Lage sein, die Daten einfach alle am Ende des Tests zu löschen.

+0

ich JAVA bin mit mit dem Rest zugesichert, kann ich direkt Elasticsearch zugreifen und ich verwende diesen Befehl in der Verlängerung für Chrone Sense zu löschen: DELETE/xxxxxx/xxxxx_query { "Abfrage": { "match_all": {} } } Meine Frage ist, gibt es eine Möglichkeit, diese Abfrage in den automatisierten Tests zu implementieren. Danke – Gudzo

+0

Ja. Sie verwenden delete_by_query api Endpunkt und Sie können diese Abfrage leicht mit elasticsearch Java Rest Client https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/_example_requests.html#_example_requests erstellen, die ich erstellen kann Ein Beispiel Wenn Sie möchten. In Ihrem Testfall benötigen Sie eine RestClient Instanz und führen Ihre Anfrage mit diesem Client einfach aus. Am Ende des Tests können Sie Ihren Index auch mit Löschanforderung löschen. – hkulekci

+0

Ich habe einige Java-Beispielbefehle hinzugefügt, die mit PHP-Einsen verwandt sind. – hkulekci