Python pytest:使用关键字选项(-k)时,不会处理目录样式字符串
我目前正在使用pytest自动化我的测试套件。我的测试分布在以下几个目录中: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 我希望能够通过排除其他目录在一组目录中运行测试
|-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"
通过这种方式,测试/目录/模块名称可以更改,并且不会出现任何中断