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



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

|-Root
|   |-Dir1
|   |   |-Test1
|   |   |-Test2
|   |   |-Test3
|   |-Dir2
|   |   |-Testa
|   |   |-Testb
|   |   |-Testc
|   |-Dir3
|   |   |-TestI
|   |   |-TestII
|   |   |-TestIII

我希望能够通过排除其他目录,在一组目录中运行测试。有些目录具有类似的名称,如"testronget_1"one_answers"testronget_1_extended"。我想排除"testronget_1",但保留"testronget_1_extended",因此我需要使用完整路径作为关键字。我注意到,当使用关键字(-k选项)时,pytest不能很好地将目录结构字符串作为参数处理。例如,如果我尝试windows风格的

py.test -k "not (rootdir1 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":

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正确处理我的路径字符串有什么建议吗?

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

py.test -m "not extended" 

通过这种方式,测试/目录/模块名称可以更改,并且不会中断。

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

我找到了一个可能对您有用的变通方法,具体取决于您的确切布局)。基本上,我使用的是and,而不是路径分隔符。

因此CCD_ 4变为CCD_。如果在root/dir1下没有更多的dir1路径元素,那么这两个表达式应该是等效的。

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

最新更新