2017-06-04 1 views
6

Ich arbeite mit Selenium 3.4.0 mit Python 3.6.1. Ich habe ein Skript nach der Python-Dokumentation geschrieben unittest Modul, das eine integrierte Python basierend auf Java JUnit mit Geckodriver 0.16.1 und Mozilla Firefox 57.0 auf Windows 8 Pro Maschine, 64-Bit-Betriebssystem, x-64-Prozessor ist. In meiner Testmethode test_search_in_python_org() Ich habe die folgenden Zeilen, die gut funktioniert:Selenium3.4.0-Python3.6.1: In Selenium-Python-Bindung mit Unittest Wie kann ich entscheiden, wann self.assertIn oder assert

def test_search_in_python_org(self): 
     driver = self.driver 
     driver.get("http://www.python.org") 
     self.assertIn("Python", driver.title) 
     elem = driver.find_element_by_name("q") 
     elem.send_keys("pycon") 
     elem.send_keys(Keys.RETURN) 
     assert "No results found." not in driver.page_source 

Als ich die „Seitentitel“ am behaupte Ich verwende: self.assertIn("Python", driver.title)

Aber, wenn ich eine Zeichenfolge bin behauptet (meine Vermutung), innerhalb der Seitenquelle, die ich benutze: assert "No results found." not in driver.page_source

Meine Frage ist, was sind die Faktoren/Bedingungen, die entscheiden, ob ich self.assertIn oder einfach assert verwenden soll?

Alle Vorschläge oder Hinweise sind hilfreich.

+0

Überprüfen Sie [diese] (https://stackoverflow.com/questions/2958169/what-are-the-advantages-difference-in-assert-false-and-self-assertfalse) Frage – Andersson

Antwort

5

Mit Blick auf die Python unittestdocumentation und auch aus dem Haufen Django Unitests, die ich hier einmal tun musste, sind meine Ergebnisse.

USE CASE:

Das erste, was die einfachste Sache ist, und meiner Meinung nach der größte Unterschied zwischen den beiden ist die Fälle, in denen Sie jeden Befehl verwenden können. Sie sind beide im Fall einer Testklasse austauschbar verwendbar. Um den Befehl assertIn zu verwenden, müssen Sie jedoch die Bibliothek unittest importieren. Also, ich möchte wissen, ob h in hello ist. Eine einfache Möglichkeit, es durch den assertIn Befehl zu tun ist:

class MyTestCase(unittest.TestCase): 
    def is_h_in_hello(self): 
     self.assertIn("h", "hello") 

und dann brauche ich Tests auszuführen, dass durch unittest.main() in diesem Beispiel ist, um meine Antwort zu bekommen. Aber mit dem Befehl assert ist es viel einfacher zu sehen, ob h in hello ist. Das ist sehr einfach so gemacht:

assert "h" in "hello" 

Aber im Wesentlichen werden beide mir die gleiche Antwort geben. Was jedoch die beiden Methoden unterscheidet, ist die Einfachheit der Verwendung in der zweiten Methode.

ERGEBNISSE:

Der zweite Unterschied Ich war die Lesbarkeit der Ergebnisse auf Python-Shell gefunden. Die Bibliothek unittest ist so konzipiert, dass die Befehle sehr spezifisch sind. Wenn ein Test fehlschlägt, erhalten Sie eine sehr klare Nachricht, die sagt, was falsch gelaufen ist. Sagen Sie jetzt, Sie möchten sehen, ob b in hello ist. es durch die Klassenmethode zu tun (einfach "h"-"b" zu ändern), die Botschaft, die wir nach der Durchführung des Tests erhalten ist:

AssertionError: 'b' not found in 'hello' 

---------------------------------------------------------------------- 
Ran 1 test in 0.038s 

FAILED (failures=1) 

es Ihnen also sehr klar sagt: 'b' not found in 'hello', die es sehr bequem, um zu sehen, was genau macht, ist das Problem. Aber sagen Sie, dass Sie den gleichen Prozess über den assert Befehl ausführen.Die Fehlermeldung ist so etwas wie:

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    assert "b" in "hello" 
AssertionError 

Obwohl Sie den Fehlertyp (AssertionError) erzählt, und die Rückverfolgung, es nicht ausdrücklich sagen, dass "b" is NOT in "hello". In diesem einfachen Fall ist es sehr einfach, den Traceback zu betrachten und zu sagen, oh, es gibt kein b in hallo! In komplizierteren Fällen kann es jedoch schwierig sein zu erkennen, warum diese Fehlermeldung generiert wurde.

Insgesamt sind die beiden Methoden sehr ähnlich und werden Ihnen das gewünschte Ergebnis bringen, aber im Wesentlichen kommt es auf die kleinen Unterschiede hier und da an, mit weniger Codezeilen und wie einfach die Shell-Nachrichten sind.

+1

Vielen Dank für die Details. – DebanjanB

0

Meiner Meinung nach ist assert das integrierte Schlüsselwort in Python, das den internen Status des Programms angibt. Mit anderen Worten, mit dem assert-Schlüsselwort können Sie Ihr Codeverhalten angeben. In Ihrem Fall sollten Sie Assert in Testfall nicht verwenden.

+0

Ich meine, wenn Sie Test schreiben, verwenden Sie self.assert, andernfalls verwenden Sie assert – Erdenezul

Verwandte Themen