2016-10-17 2 views
0

Ich benutze @ pytest.mark.parametrize mit verschiedenen Testfällen und erwarteten Ausgaben. Es ist mit wenigen Testfällen völlig in Ordnung und gibt diesen Fehler in einigen anderen Fällen. Nicht einmal in der Lage, es zu googeln. Ich möchte wissen, was schief gehen könnte. Ich würde mich freuen, wenn mir jemand sagen könnte, wie man google für diesen Fehler atleast!Fehler mit pytest

============================= test session starts ============================= platform win32 -- Python 2.7.12, pytest-3.0.3, py-1.4.31, pluggy-0.4.0 -- c:\python27\python.exe

cachedir: .cache

rootdir: C:\Python27, inifile:

collected 0 items/1 errors

=================================== ERRORS ====================================

___________________ ERROR collecting test_mod_pppoe_disc.py ___________________

lib\site-packages\py_path\local.py:650: in pyimport

import(modname)

lib\site-packages\pytest-3.0.3-py2.7.egg_pytest\assertion\rewrite.py:131: in find_module

source_stat, co = _rewrite_test(self.config, fn_pypath)

lib\site-packages\pytest-3.0.3-py2.7.egg_pytest\assertion\rewrite.py:322: in _rewrite_test

tree = ast.parse(source)

lib\ast.py:37: in parse

return compile(source, filename, mode, PyCF_ONLY_AST)

E ValueError: invalid \x escape

!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!! =========================== 1 error in 0.21 seconds ===========================

@pytest.mark.parametrize("test_input1,test_input2,expected", [ 
(ARP(sha='D\x85\x00\xa2}\xad', spa='\n\[email protected]=', tha='\x00\x00\x00\x00\x00\x00', tpa='\n\[email protected]\x01'),"<socket._socketobject object at 0x0000000003DC8118>",0), 
(ARP(sha='jrofalfeoiexad', spa='\[email protected]=', tha='\x00\x00\x00\x02jfcalkfel', tpa='\n\xcjfeiafa1'),"<socket._socketobject object at 0x0000000003D2BD48>",0), 
(ARP(eioakn iejfoeajoijea),"<socket._socketobject object at 0x0000000003DC8118>",0) 
]) 
def test_mod_arp(test_input1,test_input2,expected): 
    assert mod_arp(test_input1,test_input2) == expected 

Beschreibung über den Code ein: Dies ist der Code, wo ich Fehler. Ich habe geeignete Funktionen definiert. Mit dem ersten Testfall gut arbeiten. Scheiterte bei den letzten beiden Testfällen.

+0

Können Sie eine Beispieldatei anzeigen, die diesen Fehler verursacht? –

+0

Dies ist mein Testcode http://pastebin.com/BiU4xmcU. Sie können sehen, dass ich drei Testfälle gegeben habe. Es funktioniert gut mit dem ersten Testfall. Ich bekomme über Fehler mit Ruhe zwei Fälle. Ich habe alle relevanten Funktionen definiert. Ich tue das, um zu prüfen, ob meine Funktion in der Lage ist, arp-Pakete richtig zu parsen und ob es in der Lage ist, falsche Pakete zu verarbeiten. Aus diesem Grund habe ich in den letzten beiden Testfällen versucht, einen Müllwert anstelle eines Pakets anzugeben. Jetzt möchte ich, dass pytest zumindest sagt, dass das Parsen mit falschen Paketen fehlgeschlagen ist, aber keine Fehler wie diese geben. –

+0

Grundsätzlich möchte ich selbst Paket erstellen und so wie es ist als Eingabe für meine Funktionen und Test geben. Gehört von Scapy. Aber Fehler bei der Installation von Scapy. Die Eingabeaufforderung hängt gerade auf. –

Antwort

3

Die Beispiel Du klebst kann ein bisschen in diese Datei minimiert werden:

import pytest 

@pytest.mark.parametrize("foo", ['\n\xcjfeiafa1']) 
def test_escapes(foo): 
    pass 

Was uns den gleichen Fehler mit Python gibt 2 und einen klareren Fehler mit Python 3:

/usr/lib/python3.5/site-packages/_pytest/python.py:410: in _importtestmodule 
    mod = self.fspath.pyimport(ensuresyspath=importmode) 
/usr/lib/python3.5/site-packages/py/_path/local.py:650: in pyimport 
    __import__(modname) 
E  File "/home/florian/tmp/foo.py", line 3 
E  @pytest.mark.parametrize("foo", ['\n\xcjfeiafa1']) 
E          ^
E SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \xXX escape 

Die Grund dafür ist aufgrund Ihrer \xcj Escape, die keine gültige Escape ist.

+0

Vielen Dank für die Info. –

+0

@KalyanamRajashree Gern geschehen! Kannst du bitte [akzeptiere die Antwort] (http://stackoverflow.com/help/someone-answers), wenn es deine Frage gelöst hat? –