2013-07-13 109 views
4

所有pytest文档都指定py.test file_name是运行pytest测试用例的标准方法。但是我使用左窗格中的Python脚本和右窗格中的Python解释器在Emacs中开发。从测试脚本中运行pytest测试用例

我的工作流程是,我修改了Python脚本,CTRL-C C它(使更新后的变化发送给REPL),并移动到REPL(CTRL-O),所以测试更新的代码。如果我可以对左侧的测试用例进行更改,移动到右侧的REPL屏幕并执行更新的测试用例,那将会很好。

有没有办法从REPL或脚本内运行pytest测试用例,而不是产生shell并运行pytest命令?

编辑:顺便说一句,我也尝试利用pytest的main函数和调用它的脚本,但对于一些有趣的原因,更改不会拿起除非我杀老REPL并开始一个新的。这不会发生在其他Python脚本中,所以我相信这与pytest有关。下面是代码:

def test_add(): 
    assert myadd(1, 2) == 3 

if __name__ == '__main__': 
    pytest.main() 
+0

我相信pytest.main()是不是考验你有REPL里面有什么,因为它将启动定期py.test亚军,它试图从预期的测试负载测试文件夹,并遵循任何命名约定 –

+0

@ Conrad.Dean:我认为这不是关于REPL。我感觉pytest会在运行测试之前为我的脚本提供最新的代码。但是,似乎一旦加载测试代码就不会重新加载,而不考虑对测试脚本所做的更改。真奇怪... – sasuke

回答

0

继@ Conrad.Dean的评论。似乎把测试放入一些pytest.py是一种有用的约定。下面说明的if __name__ == '__main__'作用的例子:

def myadd(first, second): 
    return first + second 

def test_add(): 
    assert myadd(1, 2) == 3 

if __name__ == '__main__': 
    print("Running test_add") 
    test_add() 
+0

不幸的是不起作用。 'print'被执行,但测试用例不是pytest运行的。 :( – sasuke

+0

除此之外,你不会失去Pytest的所有断言重写和其他testrunning善良? –