Python编写图形界面Android CTS测试应用
最近在研究Android CTS测试,突发奇想把单调的命令行界面写成可视化应用。后经人指点,使用Python语言编写。

主要目的是看看是否可实现可视化界面的应用,所以写的比较简单。基于Android2.2 CTS r1版测试源码,应用启动后可以看到共有8个Test Plan选择,选择任意一个,点击Launch即可开始运行此Test Plan。
如果以后有时间,可以继续充实这个应用,界面和功能还有很大的加强空间。
附上代码:
View Code
#!/usr/bin/env python
import os
import pygtk
#pygtk.require('2.0')
import gtk
import sys
import shlex
import subprocess
from subprocess import Popen, PIPE
class GctsApp:
def on_launch(self, widget):
page = self.note.get_current_page()
if page == 7:
cts_stdin.write("start --plan Java\n")
elif page == 6:
cts_stdin.write("start --plan AppSecurity\n")
elif page == 5:
cts_stdin.write("start --plan Signature\n")
elif page == 4:
cts_stdin.write("start --plan Performance\n")
elif page == 3:
cts_stdin.write("start --plan CTS\n")
elif page == 2:
cts_stdin.write("start --plan RefApp\n")
elif page == 1:
cts_stdin.write("start --plan VM\n")
elif page == 0:
cts_stdin.write("start --plan Android\n")
def delete(self, widget, event=None):
gtk.main_quit()
return False
def __init__(self):
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("delete_event", self.delete)
window.set_border_width(20)
window.set_title("Graphic CTS-Testing Demo")
table = gtk.Table(3,6,False)
window.add(table)
# Create a new notebook, place the position of the tabs
notebook = gtk.Notebook()
self.note = notebook
notebook.set_tab_pos(gtk.POS_LEFT)
table.attach(notebook, 0,6,0,1)
notebook.show()
self.show_tabs = True
self.show_border = True
# Now finally let's prepend pages to the notebook
for i in range(8):
bufferf = "Launch Test Plan %d" % (i+1)
bufferl = "Plan %d" % (i+1)
frame = gtk.Frame(bufferf)
frame.set_border_width(5)
frame.set_size_request(100, 75)
frame.show()
TP = {"Plan 1":"Test Plan - Java","Plan 2":"Test Plan - AppSecurity","Plan 3":"Test Plan - Signature","Plan 4":"Test Plan - Performance","Plan 5":"Test Plan - CTS","Plan 6":"Test Plan - RefApp","Plan 7":"Test Plan - VM","Plan 8":"Test Plan - Android"}
label = gtk.Label(TP[bufferl])
frame.add(label)
label.show()
label = gtk.Label(bufferl)
notebook.prepend_page(frame, label)
# Set what page to start at (page 7)
notebook.set_current_page(7)
#create a tooltips object
self.tooltips = gtk.Tooltips()
# Create a bunch of buttons
button = gtk.Button("Quit")
button.connect("clicked", self.delete)
table.attach(button, 0,1,1,2)
self.tooltips.set_tip(button, "Hello")
button.show()
button = gtk.Button("Next Plan")
button.connect("clicked", lambda w: notebook.next_page())
table.attach(button, 1,2,1,2)
button.show()
button = gtk.Button("Prev Plan")
button.connect("clicked", lambda w: notebook.prev_page())
table.attach(button, 2,3,1,2)
button.show()
button = gtk.Button("Launch")
button.connect("clicked", self.on_launch)
table.attach(button, 3,4,1,2)
button.show()
table.show()
window.show()
#parsed from cts($T/out/host/$HOST_ARCH/bin/cts) shell script pulished by Google
args = shlex.split("""
java -Xmx512M -cp framework/cts.jar:framework/ddmlib.jar:framework/junit.jar:framework/hosttestlib.jar -DHOST_CONFIG=cts/android-cts/repository/host_config.xml com.android.cts.TestHost
""")
p = subprocess.Popen(args, stdin=PIPE, cwd="/home/whu/Android/froyo/out/host/linux-x86/", )
(cts_stdout, cts_stdin) = (p.stdout, p.stdin)
def main():
gtk.main()
return 0
if __name__ == "__main__":
GctsApp()
main()
# ready to teminate, release resources we hold
cts_stdin.write("exit\n");
cts_stdin.close();
p.kill();
p.terminate();

浙公网安备 33010602011771号