2016-10-17 40 views
0

我正在使用@ pytest.mark.parametrize與各種測試用例和預期輸出。它通過很少的測試用例並且在其他一些情況下給出了這個錯誤。甚至不能谷歌它。我想知道可能出了什麼問題。我會很高興,如果有人能告訴我如何至少谷歌的這個錯誤!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 

說明有關代碼:這是我得到的錯誤代碼。我有適當的功能定義。在第一個測試用例上正常工作。最後兩個測試用例失敗了。

+0

你可以顯示一個導致該錯誤的示例文件嗎? –

+0

這是我的測試代碼http://pastebin.com/BiU4xmcU。你可以看到我給出了三個測試用例。它的第一個測試用例很好。我在休息兩個案例中遇到了上述錯誤。我定義了所有相關的功能。我這樣做是爲了測試我的函數是否能夠正確解析arp數據包,以及它是否能夠處理錯誤的數據包。這就是爲什麼我在前兩個測試用例中試圖給垃圾代替數據包的原因。現在我想pytest至少告訴解析錯誤的數據包失敗,但不會給出這樣的錯誤。 –

+0

基本上我想自己構造數據包,並將其作爲我的函數和測試的輸入。聽說過scapy。但用scapy安裝會導致錯誤。命令提示符只是掛起。 –

回答

3

您粘貼可以最小化比特到該文件中的例子:

import pytest 

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

這讓我們與Python 2,同樣的錯誤和更清晰的錯誤使用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 

的發生這種情況的原因是由於您的\xcj轉義,這不是有效的轉義。

+0

非常感謝您的信息。 –

+0

@KalyanamRajashree不客氣!你能否請[接受答案](http://stackoverflow.com/help/someone-answers)如果它解決了你的問題? –