+ 首页>>技能>>内容

技能Monkey新书试读,第八章性能和兼容性测试386次围观

《大话测试——移动互联网应用测试》本书的宗旨在于务实,讲任何实际看到过,经过的项目、技术和大实话,从各个角度和各位务实的测试朋友做交流,其中有四章是纯技术章节,所以并非一本纯技术书籍,感谢大家支持。

第一章的分享链接:http://testerhome.com/topics/395
第二章的分享链接:http://testerhome.com/topics/417

以下是简略内容,书中会更详细的描述细节:
采取方案:Android Emulator+Python+Shell使用Shell脚本启动不同分辨率的emulator,使用instrumentation框架进行界面操作,使用shell脚本关闭emulator,最后使用python的pil模块进行图片对比测试。最终结果会出现一个对比数字,如果数字是0,那么说明两张图片100%像素比对正确。数字越大说明差别也越大。

为什么不使用Appium?
回答:因为Appium使用的是Android的4.0以上才支持的uiautomator,适用性目前不强。可以考虑将来使用

主流程使用python控制,调用mr,instrumentation,shell等,同时控制模拟器的启动关闭

#!/bin/bash
portNumber=5578
emulatorPID=`ps -ef | grep "emulator" | grep "port $portNumber" | awk '{print $2;}'`
if [ -n "$emulatorPID" ]; then
 echo "close emulator window"
 kill -9 $emulatorPID
fi

emulatorName="android2.3"

echo "start avd"
emulator -avd $emulatorName -port $portNumber&

echo "check emulator ready..."
emulatorSerialNumber="emulator-$portNumber"
adb kill-server
ready=`adb devices | grep "$emulatorSerialNumber"`
sleep 5
if [ -z "$ready" ]; then
 echo "emulator can NOT launch."
 exit 3
else
 ready=`adb devices | grep "$emulatorSerialNumber.*offline"`
 if [ -n "$ready" ]; then
 echo "wait-for-device"
 adb kill-server
 sleep 5
 fi
fi

如果有相关锁屏或者其他相关的操作,可用MR来做执行,进入app之后的操作使用instrumentation来编写自动化,并使用am instrument驱动,如:

def AppLogin():
    os.system("adb shell am instrument -w -e class com.xxx.test.testClass com.xxx.test/android.test.InstrumentationTestRunner")

然后以MonkeyRunner来启动app各个界面并且截图保存:

# -*- coding: utf-8 -*-

import os
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice
from com.android.monkeyrunner.easy import EasyMonkeyDevice
from com.android.monkeyrunner.easy import By
print 'xxx'


device = MonkeyRunner.waitForConnection()  
easy_device = EasyMonkeyDevice(device)

def screenshot(Activity):
 package = 'com.xxx.xxx'
 activity = 'com.xxx.%s'%Activity
 print activity
 runComponent = package + '/' + activity
 device.startActivity(component=runComponent)
 MonkeyRunner.sleep(5)
 result = device.takeSnapshot()
 result.writeToFile('/Users/monkey/Pictures/screenshot/%s.png'%Activity,'png')


screenshot('xxx.xxx.Activity1')
screenshot('xxx.xxx.Activity2')

python的图片对比代码如下,需要事先安装PIL库:

#sudo pip install PIL
def pil_image_similarity(filepath1, filepath2):
    from PIL import Image
    import math
    import operator

    image1 = Image.open(filepath1)
    image2 = Image.open(filepath2)

#    image1 = get_thumbnail(img1)
#    image2 = get_thumbnail(img2)

    h1 = image1.histogram()
    h2 = image2.histogram()

    rms = math.sqrt(reduce(operator.add,  list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) )
    return rms

via TesterHome

+ 猜你喜欢...

===== 关于 DiggerPlus =====
DiggerPlus是国内新锐测试人垂直内容博客,专注于挖掘测试工具,普及测试技术,专注于测试人能力提升,博客上线后就受到广大测试人的热烈追捧;此外,DiggerPlus深度整合评测资源,揭秘科技数据和真相,让读者更懂科技,更好地把玩科技。 我们始终保持"独立,客观,严谨,优秀"的优良作风,努力为读者带来源源不断的优质内容。想访问更多酷毙的测试人网站?赶紧来DiggerPlus测试人网址导航看看吧!

===== DiggerPlus Team =====
DiggerPlus Team是DiggerPlus官方发起的团队,这是一群热爱科技,热爱测试,喜欢深度挖掘的热血测试人,他们是评测师,测试专家。 我们欢迎优秀的测试人加入DiggerPlus Team。 加入DiggerPlus,可以成为我们的认证Dper,认证Dper拥有DiggerPlus独一无二的专栏并得到个人展示。

===== DiggerPlus 官方读者群 =====
DiggerPlus官方读者群(一)

+ 关于本文作者

Python/C/C++/Javascript程序员,持续学习者,目前专注于前端开发。

的专栏 | 专栏作者 | 访问小A的主页

+ 发表评论

Copyright © 2014 DiggerPlus. 90 queries in 1.004 seconds.
使用合作网站账号快速登录,更多精彩等着您: 开源中国