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();

posted @ 2011-02-24 14:38  whuiscool  阅读(1716)  评论(0)    收藏  举报