51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2699|回复: 3
打印 上一主题 下一主题

[转贴] 使用 MonkeyRunner 做批量过渠道包的小工具

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-6-29 14:49:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上周公司有同事抱怨说过渠道包太累,一下60多个包。由于某些安全机制,要检测每个包里面的一个视频播放功能是否可用,所有得一个个过下来,很累。
刚好看到@zouaiyong 同学用MonkeyRunner写的代码,就借鉴改造了一下,随便折腾了一份批量测渠道包的代码。
这里我就放出 循环安装、打开应用、截图对比、卸载的代码。打开应用之后播放视频的操作就去掉了,毕竟都是一堆坐标。仅供大家参考参考。
扔多少个APK进去,就自动跑多少个,跑完出log,对比失败时自动停止。
不说了,看代码呗。
  1. #!/usr/bin/env monkeyrunner
  2. # -*- coding: utf-8 -*-

  3. import time
  4. import sys
  5. import os
  6. from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

  7. #设置应用包名和入口Activity名
  8. pakageName = 'com.Your.www'
  9. componentName = 'com.Your.www/.MainActivity'

  10. #APP启动时等待时间(秒)
  11. startTime = 5

  12. #获取年月日时分秒
  13. now = time.strftime("%Y-%m-%d-%H-%M-%S")

  14. #python中获取当前运行的文件的名字
  15. name=sys.argv[0].split("\\")
  16. filename=name[len(name)-1]

  17. #MonkeyRunner下获取运行的文件所在的路径
  18. rootpath  = os.path.split(os.path.realpath(sys.argv[0]))[0]

  19. #指定位置
  20. dir = rootpath + "/apk/"
  21. screenPath = rootpath + "/screenShot/"
  22. logpath = rootpath + "/log/"

  23. #获取待测APK个数
  24. countPak = len(os.listdir(dir))

  25. #新建一个Log文件
  26. if not os.path.isdir(logpath):
  27.     os.mkdir(logpath)
  28. log = open( logpath + filename[0:-3] + "-log" +now + ".txt" , 'w')

  29. #开始连接设备
  30. print("Connecting...")
  31. device = MonkeyRunner.waitForConnection()
  32. log.write("连接设备...\n")

  33. #卸载应用
  34. print('Removing...')
  35. device.removePackage(pakageName)
  36. print ('Remove Successful!')
  37. MonkeyRunner.sleep(2)
  38. log.write("初始化应用环境...\n")
  39. countOK = 0

  40. #从dir路径下循环取出apk文件进行操作
  41. for i in os.listdir(dir):
  42.     print('Installing...<%s>'%i)
  43.     log.write("==========安装应用==========\n")
  44.     path = dir + '//' + i
  45.     #安装应用
  46.     device.installPackage(path)
  47.     print('Install Successful!')

  48.     #打开应用
  49.     device.startActivity(component=componentName)
  50.     MonkeyRunner.sleep(startTime)
  51.     log.write("启动App...\n")

  52.     #截图
  53.     result=device.takeSnapshot()
  54.     print("Take ScreenShot...")

  55.     #保存截图
  56.     result.writeToFile(screenPath + i + '.png','png')

  57.     #进行图片比较
  58.     resultTrue=MonkeyRunner.loadImageFromFile(screenPath + r'basePic.png')
  59.     print "Pic Comparing..."
  60.     log.write("对比图片中...\n")
  61.     if(result.sameAs(resultTrue,0.9)):
  62.         print("%s is OK!"%i)
  63.         log.write("比较通过!--%s--包可用!\n"%i)
  64.         #卸载应用
  65.         print('Removing...')
  66.         log.write("初始化应用环境,移除中...\n")
  67.         device.removePackage(pakageName)
  68.         print ('Remove Successful!')
  69.         log.write("==========移除完毕==========\n")
  70.         countOK += 1
  71.         MonkeyRunner.sleep(2)
  72.     else:
  73.         print("False!Please check %s!"%i)
  74.         log.write("比较失败!请检查安装包--%s--是否可用!\n"%i)
  75.         break

  76. log.write("共测试 %s 个包,%d 个通过。"%(countPak,countOK))
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2017-6-29 14:51:39 | 只看该作者
之前写了基于robotium的遍历 半成品。。。 思想就是树结构 叶子 节点,不过我觉得效率好低 后来就没再搞。不过前几天刚搞了个android的兼容性遍历,原理就是将intent序列化,保存成2进制文件,使用的时候读到内存中就好,直接跳进相应activity,截图保存。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2017-6-29 14:55:41 | 只看该作者
最近在看monkeyrunner,刚好学习一下,感谢。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2017-6-29 14:57:18 | 只看该作者
悠悠小仙仙 发表于 2017-6-29 14:55
最近在看monkeyrunner,刚好学习一下,感谢。

有帮助就好!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-21 05:34 , Processed in 0.065718 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表