Python pytest:使用关键字选项(-k)时,不会处理目录样式字符串

Python pytest:使用关键字选项(-k)时,不会处理目录样式字符串,python,keyword,pytest,backslash,Python,Keyword,Pytest,Backslash,我目前正在使用pytest自动化我的测试套件。我的测试分布在以下几个目录中: |-Root | |-Dir1 | | |-Test1 | | |-Test2 | | |-Test3 | |-Dir2 | | |-Testa | | |-Testb | | |-Testc | |-Dir3 | | |-TestI | | |-TestII | | |-TestIII 我希望能够通过排除其他目录在一组目录中运行测试

我目前正在使用pytest自动化我的测试套件。我的测试分布在以下几个目录中:

|-Root
|   |-Dir1
|   |   |-Test1
|   |   |-Test2
|   |   |-Test3
|   |-Dir2
|   |   |-Testa
|   |   |-Testb
|   |   |-Testc
|   |-Dir3
|   |   |-TestI
|   |   |-TestII
|   |   |-TestIII
我希望能够通过排除其他目录在一组目录中运行测试。有些目录有类似的名称,如“test_set_1”和“test_set_1_extended”。我想排除“test\u set\u 1”,但保留“test\u set\u 1\u extended”,因此我需要使用完整路径作为关键字。我注意到,当使用关键字(-k选项)时,pytest不能很好地处理目录结构字符串作为参数。例如,如果我尝试windows样式

py.test -k "not (root\dir1 or dir2)"
我得到一个语法错误:

SyntaxError:行连续字符后出现意外字符

另一方面,如果我尝试unix风格

py.test -k "not (root/dir1 or dir2)" 
我得到一个零错误:

ZeroDivisionError:整数除法或模零除法

我尝试过的事情包括: 将目录字符串括在单引号或双引号中:

py.test -k "not ('root/dir1' or dir2)"
py.test -k "not ("root/dir1' or dir2)"
使用单独的'-k's':

py.test -k "not root/dir1" -k not dir2)
使用当前目录“.”

py.test -k "not (./root/dir1 or dir2)"
跳出斜杠:

py.test -k "not (root\\dir1 or dir2)"
py.test -k "not (root\/dir1 or dir2)"

这些都没有解决问题。有人对如何让pytest正确处理我的路径字符串有什么建议吗?

我正在使用一个非常类似的设置,并且我能够重现您描述的行为(
pytest 3.4.0
python 3.6.4

我发现了一种可能对您有用的解决方法(具体取决于您的具体布局)。基本上,我使用的是
而不是路径分隔符

因此
py.test-k“not(root/dir1或dir2)”
变成
py.test-k“not(root和dir1)或dir2)”
。如果在
root/dir1
下没有更多的
dir1
路径元素,则这两个表达式应该是等效的


由于表达式的行为(包括
/
似乎有些不一致(
py.test-k root/dir1
按预期工作),因此提交一个bug可能是有意义的。

为什么不保存解决方法,只需为不同的测试组使用唯一的标记,并使用

py.test -m "not extended" 
通过这种方式,测试/目录/模块名称可以更改,并且不会出现任何中断