一种适合中小团队的的Android自动化压力测试方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cicilover/article/details/87802852

在中小团队的业务发展初期,用户量规模有限,测试手动测试的覆盖程度也有限。在业务发展前期而言,将自动化测试和开发分离,是一种有效的提高质量的方法。例如可以每天晚上10点后自动执行压力测试,每次跑10小时,次日早上得到测试报告,如果有问题,自动将邮件发送至相关开发。这样可以及早发现隐蔽的问题,避免用户量多了以后,线上爆更多的问题。

LeakCanary是很多团队都在使用的内存泄漏检测工具,因此最简单的方案就是通过LeakCanary在自动化测试过程中,检测内存泄漏。

但因为LeakCanary在发现泄漏时,会弹窗提示,而monkey测试,可能会存在误操作所以可以在初始化时,屏蔽弹窗。

LeakCanary.install(application);
LeakCanaryInternals.setEnabled(application, DisplayLeakActivity.class, false);

简单流程如下:

1.设备开机,解锁

2.启动相应APP

3.切换到全屏模式,避免状态栏和虚拟键干扰

4.启动adb monkey命令

相关脚本如下:

扫描二维码关注公众号,回复: 6239697 查看本文章

1.开机解锁:

#!/usr/bin/env python 
#coding:utf8
import os
import sys
import subprocess

#https://blog.csdn.net/q_539860309/article/details/82856159
#get the result printed in cmd line
def RunShellWithReturnCode(command,print_output=True,universal_newlines=True):
    p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=universal_newlines)
    if print_output:
        output_array = []
        while True:
            line = p.stdout.readline()
            if not line:
                break
            print line.strip("/n")
            output_array.append(line)
        output ="".join(output_array)
    else:
        output = p.stdout.read()
    p.wait()
    errout = p.stderr.read()
    if print_output and errout:
        print >> sys.stderr, errout
    p.stdout.close()
    p.stderr.close()
    return output, p.returncode


stdout, stderr = RunShellWithReturnCode('adb shell dumpsys window policy')

#check if the phone screen is on light,if not,open and enter password
if 'mShowingLockscreen=true' in stdout:
    if 'mScreenOnEarly=false' in stdout:
        os.system('adb shell input keyevent 26')
		
    os.system('adb shell input swipe 300 300 1000 300')
# enter password
    os.system('adb shell input tap 535 1749')
    os.system('adb shell input tap 535 1749')
    os.system('adb shell input tap 535 1749')
    os.system('adb shell input tap 535 1749')

2.启动APP:

os.system('adb shell am start -n packageName/ActivityName')

3.切换全屏模式:

os.system('adb shell settings put global policy_control immersive.full=*')

4.执行adb命令:(每500ms点击一次,共点击100000次)

os.system('adb shell monkey -p packageName -v 100000 --throttle 500 --pct-syskeys 0')

总结:

本文提供了最简单自动化测试的思路和实现,通过LeakCanary,Monkey来实现压力测试。如果想做的更好,可以将测试过程中出现的ANR和Crash信息保存到本地;另外还可以在本地提供日志文件的分析功能。

最后建议在jenkins中配置单独的monkey工程,这样可以将自动化测试和开发完全分开,提高开发效率。

猜你喜欢

转载自blog.csdn.net/cicilover/article/details/87802852