我想将Travis-CI用于我在Tkinter中编写的程序,但是我无法通过构建。
示例程序 TravisTest.py :
import tkinter as tk
from tkinter import ttk
class MainApplication(tk.Frame):
def __init__(self, parent, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.parent = parent
root.title('TEST')
self.Hi = tk.Label(self, text="Hi!")
self.Hi.pack()
if __name__ == "__main__":
root=tk.Tk()
MainApplication(root).pack(side="top", fill="both", expand=True)
root.mainloop()
.travis.yml :
language: python
python:
- "3.5"
- "3.6"
dist: xenial
services:
- xvfb
script: python TravisTest.py
该程序似乎可以正常启动,但是由于它不会自行退出,因此该构建只需等待10分钟,然后即可超时。
$ python TravisTest.py
最近10个月未收到任何输出, 这可能表示构建停滞或 建立自己。
检查有关如何调整构建的详细信息 配置在: https://docs.travis-ci.com/user/common-build-problems/#Build-times-out-because-no-output-was-received
构建已终止
我是否需要在代码中添加一些Travis-CI特定的测试用例,以自行退出?还是应该不使用Travis-CI这样的东西?
答案 0 :(得分:2)
root.mainloop()运行事件循环,直到某些事件停止为止。删除它,将其替换为root.update()
并可能替换为root.update_idletasks()
以确保完成所有gui操作,或者通过添加类似root.after(10, root.quit)
python测试套件具有针对tkinter,IDLE和turtle的gui测试。使用xvfb,它们可以在Windows(Appveyor),Linux(Travis)和Mac(MS Azure,也可以在Windows和Linux上运行测试)上运行。该脚本与python -m test
等效,该脚本运行所有test.test_xyz模块。 Stdlib模块不以“ main”身份运行。
test_idle中的IDLE测试不运行mainloop()。当前,除其他外,可以通过不运行包含主要mainloop()调用的idlelib.pyshell.main()来避免这种情况。 (应该对pyshell.main进行重构,以除去大多数其他内容,以分离可在不调用mainloop()的情况下进行测试的功能。)创建窗口小部件的IDLE测试使用invoke,generate_event,update,对于干净出口,则使用update_idletasks。实际测试在idlelib.idle_test.test_ *中。关于测试其中包含的tkinter应用程序,有很多来之不易的知识。要测试代码的非GUI部分,请使用模拟小部件帮助。