我正在尝试创建一个py.test插件来重现Pydev for Eclipse的行为,你可以在下图中看到:
基本上,我们的想法是在调用pytest_sessionstart()
期间打开一个空窗口,用pytest_runtest_makereport()
返回的对象填充它(测试和进度条的更新列表),以及使用pytest_unconfigure()
关闭它。
我尝试使用以下代码使用Tkinter实现此目的:
import Tkinter
def pytest_sessionstart(session):
print "Tests are starting"
Tkinter.Tk().mainloop()
print "The window was opened" # This step is never reached
运行测试时,它会打印第一个句子,打开窗口但不会返回到py.test,直到我们关闭窗口。
如果我删除了对mainloop()
的调用,则会打开窗口但会立即销毁
我还尝试通过以下方式在单独的线程中打开窗口:
t = threading.Thread(target=Tkinter.Tk().mainloop())
但没有成功。无论如何,线程选项看起来并不是很好,因为Tkinter必须在主线程中运行,这在py.test插件的情况下是不可能的。
那么,你们有没有想过如何解决这个问题?唯一的要求是保持py.test。
提前谢谢你:)
答案 0 :(得分:0)
Tkinter.Tk()。mainloop()是while True循环。您将不会摆脱困境。我认为有两种方法可以解决您的问题:
在Tkinter应用程序中使用pytest。您可以在this之类的tkinter代码中调用pytest。
在其他线程中使用pytest并将pytest的输出通过管道传递到Tkinter应用程序。