目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下:

 import os
 apk = {'j': 'com.***.test1',
        'h': 'com.***.test2'}
 print 'enter \'j\' to test test1'
 print 'enter \'h\' to test test2'
 #choose apk
 while True:

     test_apk = raw_input('which apk do you want to test?\n(\'h\' or \'j\'):')
     try:
         apk_name = apk[test_apk]
     except KeyError:
         print 'Please enter \'j\' or \'h\'! - -#'
     else:
         break
 #check the input value
 while True:
     event_num = raw_input('How many pseudo random events(-v) do you want?\nenter int num(>0):')
     if event_num.isdigit() and int(event_num) > 0:
         print 'OK, your events are ' + event_num
         break
     else:
         print 'Please enter a number and the number > 0'
 #check the input value
 while True:
     for_time = raw_input('How many times monkey test do you want?\ntimes(>1):')
     if for_time.isdigit() and int(for_time) > 1:
         print 'OK, you want to loop ' + for_time + 'times monkey test'
         break
     else:
         print 'Please enter a number and the number > 1'
 #the log path
 log_path = 'D:\\'
 #the log name
 log_name = 'monkeytestlog.txt'
 #monkey shell script
 monkey_shell = 'adb shell monkey -v -v -v -p '+ apk_name+ ' -v ' + event_num + ' >'+log_path

 def monkeytest():
     print 'now let\'s check your phone'
     phonedevice = os.popen('adb devices').read()
     if phonedevice.strip().endswith('device'):
         print 'OK, your phone get ready,let\'s start moneky test!'
         for i in range(1, int(for_time)+1):
             print 'The', i, 'monkey test starting...'
             os.system(monkey_shell+str(i)+log_name)
             print i, 'complete!'
         print 'OK, moneky test all complete! The log is in D:\\'
     else:
         print 'please check your phone has linked your computer well'

 #find 'adb' command at your os
 sysPath = os.environ.get('PATH')
 if not sysPath.find('platform-tools'):
     print '''please install the android-sdk and put the 'platform-tools' dir in your system PATH'''
 else:

 #kill the 'tadb.exe'
     tadb = os.popen('tasklist').read()
     if tadb.find('tadb.exe') != -1:
         print 'Find \'tadb.exe\', it must be killed!!!!!!'
         os.system('taskkill /im tadb.exe /F')
         print 'OK,the \'tadb.exe\' has been killed, let\'s go on'
         monkeytest()
     else:
         print 'not find \'tadb.exe\',great! go on!'
         monkeytest()

感觉还能继续优化,做个记录。

【初学python】使用python调用monkey测试的更多相关文章

  1. Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例

    由于最近在做一个C++面向Python的API封装项目,因此需要用到C扩展Python的相关知识.在此进行简要的总结. 此篇示例分为三部分.第一部分展示了如何用C在Windows中进行多线程编程:第二 ...

  2. 详细介绍windows下使用python pylot进行网站压力测试

    windows下使用python进行网站压力测试,有两个必不可少的程序需要安装,一个是python,另一个是pylot.python是一个安装软件,用来运行python程序,而pylot则是pytho ...

  3. Python Web 性能和压力测试 multi-mechanize

    http://www.aikaiyuan.com/5318.html 对Web服务做Performance & Load测试,最常见的工具有Apache Benchmark俗称ab和商用工具L ...

  4. python笔记之调用系统命令

    python笔记之调用系统命令 目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数, ...

  5. python可变参数调用函数的问题

    已使用python实现的一些想法,近期使用python这种出现的要求,它定义了一个函数,第一种是一般的参数,第二个参数是默认,并有可变参数.在第一项研究中python时间,不知道keyword可变参数 ...

  6. Python网络数据采集7-单元测试与Selenium自动化测试

    Python网络数据采集7-单元测试与Selenium自动化测试 单元测试 Python中使用内置库unittest可完成单元测试.只要继承unittest.TestCase类,就可以实现下面的功能. ...

  7. python发布及调用基于SOAP的webservice

    现如今面向服务(SOA)的架构设计已经成为主流,把公用的服务打包成一个个webservice供各方调用是一种非常常用的做法,而应用最广泛的则是基于SOAP协议和wsdl的webservice.本文讲解 ...

  8. Android软件测试Monkey测试工具

    前言: 最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyrunner.benchmark.其 ...

  9. Python学习--Python简介

    Python 简介 Python是一种解释型.编译性.面向对象.动态数据类型的高级程序设计语言.Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. P ...

随机推荐

  1. vim基本命令之剪切复制粘贴替换

    首先是剪切(删除): 剪切其实也就顺带删除了所选择的内容,所以既可以当剪切命令用,也可以当删除命令使用. 1 首先,可以在命令模式下输入v进入自由选取模式,选择需要剪切的文字后,按下d就可以进行剪切了 ...

  2. Hibernate5.2之一对一外键关联(五)

                                                     Hibernate5.2之一对一外键关联(五) 一.简介 上篇文章中笔者介绍了Hibernate关联关 ...

  3. CSS预编译器配置-------LESS Sass Stylus webstorm

    预编译器配置说明 开头语,发挥CSS预处器的作用是一种很有挑战性的事情.CSS预处器有不同的语言,就有不同的语法和功能. 语法 在使用CSS预处器之前最重要的是对语法的理解,幸运的是,这三种CSS预处 ...

  4. [Android]AndroidInject增加sqlite3数据库映射注解(ORM)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3623050.html AndroidInject项目是我写的一 ...

  5. Warning: Attempt to present on whose view is not in the window hierarchy!

    当我想从一个VC跳转到另一个VC的时候,一般会用 - (void)presentViewController:(UIViewController *)viewControllerToPresent a ...

  6. html:关于表单功能的学习

    比如我在某jsp页面中写了如下表单: <form action="/MavenWeb/TestFormPost" method="get">   & ...

  7. socket编程概述

    一.基本流程如下: 整个TCP过程非常类似于电话系统.TCP是有两个不同主机上的进程需要进行通信,电话系统是有两个人位于不同地区的人需要进行通信. socket:获得可用于进程通信的端点.由于Linu ...

  8. java枚举使用

    1.开发中如何使用枚举,一般在开发中使用消息提示.枚举可以继承,实现接口等.public enum Result { SUCCESS(1,"201 ok") { @Override ...

  9. My集合框架第五弹 最小堆

    二叉堆(以最小堆为例),其具有结构性质和堆序性质结构性质: 堆是一棵完全的二叉树,一颗高为h的完全二叉树有2^h到2^h-1个节点,高度为log N            而且该结构可以很容易的使用数 ...

  10. 关于FireFox下 CSS3 transition 与其他浏览器的差异

    最近一个项目,动画效果全靠CSS3来做,用得比较多的transition,发现了一点火狐与其他浏览器的小差异. 首先我们写CSS的时候,一般为属性值为0的属性,我们一般会这样写 #id{ posito ...