当前位置: 首页 > news >正文

Day35 移动端测试(下)

系列文章目录

Day01 软件测试基础总结

Day02 测试用例知识点总结(上)

Day03 测试用例知识点总结(下)

Day04 禅道-从安装到卸载

Day05 MySql的基础使用

Day06 MySql知识点总结

Day07 MySql知识点再总结与多表查询

Day08 redis的基础知识

Day08 VMware的安装、Linux系统安装和Linux基础命令

Day09 Linux常用命令总结

Day10 Linux环境部署和项目构建

Day11 shell脚本基础知识

Day12 接口和协议

Day13 Postman的使用

Day13 Windows环境下的JDK安装与Tomcat的启动

Day14 jenkins部署

Day15 jenkins的简单使用

Day16 charles的基本使用

Day17 考试

Day18 考试

Day19 Fiddler的简单使用

Day20 Python基础

Day21 python 语句基础

Day22 Python数据类型(上)

Day23 Python数据类型(下)

Day24 Python函数

Day25 Python的文件操作和异常处理

Day26 Python面向对象

Day27 Python的部分算法

Day28 单元测试 unittest

Day29 单元测试 pytest

Day30 接口测试requests

Day31 Web端自动化基础

Day32 Web自动化进阶

Day33 PO模型

Day34 移动端测试(上)

Day35 移动端测试(下)


目录

系列文章目录

前言

一、Monkey测试

1.Monkey程序

 2.Monkey命令

 3.实例

4.Monkey测试的异常分析

二、兼容性测试

1.机型配置问题

2.兼容性测试如何展开

3.云测平台

三、真机测试

总结


前言


一、Monkey测试

        顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲。
        通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。

1.Monkey程序

  1. Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;

  2. Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;
  3. Monkey 命令启动方式:

                1)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试

                2)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试

                3)在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

 2.Monkey命令

adb shell monkey 100   随机执行monkey测试100次

参数描述
-p 包名此参数用于指定一个或者多个app
-v此参数用于控制日志的详细程度,最高-v -v -v
>路径+文件名.log此参数用于指定伪随机数生成的seed值,seed相同,则两次monkey测试所产生的事件也相同
-throttle 毫秒 此参数指定操作的时延,不设置monkey将会尽可能快的执行,不符合用户的操作
--pct-touch n

n为数字,此参数为调整触摸事件的百分比

--pct-motion nn为数字,此参数为调整手势事件的百分比
--ignore-crashes通常应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。正常操作,不忽略异常
--ignore-timeouts通常应用程序发生任何超时错误(如“Application Not responding”对话框)Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计

Event percentages:
0:--pct-touch//touch
events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件)
1:--pct-motion//motion
events percentage手势事件百分比(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯
2:--pct-pinchzoom//pinch
zoom events percentage二指缩放百分比,即智能机上的放大缩小手势操作
3:--pct-trackball//trackball 即单纯的Move(ACTION_MOVE)
events percentage轨迹球事件百分比(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样)
4:--pct-rotation//screen
rotation events percentage屏幕旋转百分比,横屏竖屏
5:--pct-nav//nav 基本导航事件。即来自于方向输入设备的上下左右操作。
events percentage”基本”导航事件百分比(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有
6:--pct-majornav//major 即Navigation Bar的确认,菜单,返回键等
nav events percentage”主要”导航事件百分比(这些导航事件通常会引发UI的事件,例如5-way pad的中间键、回退键、菜单键)
7:--pct-syskeys//system(key)
operations percentage”系统”按钮事件百分比(这些按钮一般专供系统使用,如Home, Back, StartCall, End Call,音量控制)
8:--pct-appswitch//app
switch events percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个
startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
9:--pct-flip//keyboard
flip percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
10:--pct-anyevent//anyevents 该事件可能包含其他上述事件。
percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。

 3.实例

adb shell monkey -p 包名 -s 种子 --throttle 毫秒 --ignore-crashes --ignore-timeouts -v -v -v --pct-touch 30 --pct-motion 20 执行次数 >路径与文件名 

adb shell monkey -p com.tencent.tmgp.supercell.clashofclans -s 123456 --throttle 2000 --ignore-crashes --ignore-timeouts -v -v -v --pct-touch 30 --pct-motion 20 50>F:/log/0902.log


:Monkey: seed=123456 count=50
:AllowPackage: com.tencent.tmgp.supercell.clashofclans
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER
//   - NOT USING main activity com.android.calendar.AllInOneActivity (from package com.android.calendar)
//   - NOT USING main activity com.android.camera.CameraLauncher (from package com.android.camera2)
//   - NOT USING main activity com.google.android.apps.chrome.Main (from package com.android.chrome)
//   - NOT USING main activity com.android.contacts.activities.PeopleActivity (from package com.android.contacts)
//   - NOT USING main activity com.android.deskclock.DeskClock (from package com.android.deskclock)
//   - NOT USING main activity com.android.dialer.DialtactsActivity (from package com.android.dialer)
//   - NOT USING main activity com.android.gallery3d.app.GalleryActivity (from package com.android.gallery3d)
//   - NOT USING main activity com.android.vending.AssetBrowserActivity (from package com.android.vending)
//   - NOT USING main activity com.bluestacks.launcher.activity.HomeActivity (from package com.bluestacks.launcher)
//   - NOT USING main activity com.google.android.gms.games.ui.destination.main.MainActivity (from package com.google.android.play.games)
//   - NOT USING main activity com.android.calculator2.Calculator (from package com.android.calculator2)
//   - NOT USING main activity com.android.documentsui.LauncherActivity (from package com.android.documentsui)
//   - NOT USING main activity com.bluestacks.bsxlauncher.MainActivity (from package com.bluestacks.bsxlauncher)
//   - NOT USING main activity com.bluestacks.filemanager.MainActivity (from package com.bluestacks.filemanager)
//   - NOT USING main activity com.bluestacks.gamecenter.AppCenterActivity (from package com.bluestacks.gamecenter)
//   - NOT USING main activity com.bluestacks.nowgg.NowggActivity (from package com.bluestacks.nowgg)
//   - NOT USING main activity com.bluestacks.piggy.PiggyActivity (from package com.bluestacks.piggy)
//   - NOT USING main activity com.bluestacks.settings.SettingsActivity (from package com.bluestacks.settings)
//   + Using main activity com.supercell.titan.tencent.GameAppTencent (from package com.tencent.tmgp.supercell.clashofclans)
//   - NOT USING main activity com.Stub.App (from package fengchedongman.apps.com)
// Selecting main activities from category android.intent.category.MONKEY
//   - NOT USING main activity com.android.settings.Settings$RunningServicesActivity (from package com.android.settings)
//   - NOT USING main activity com.android.settings.Settings$StorageUseActivity (from package com.android.settings)
// Seeded: 123456
// Event percentages:
//   0: 30.0%
//   1: 20.0%
//   2: 1.3333334%
//   3: 10.0%
//   4: -0.0%
//   5: -0.0%
//   6: 16.666668%
//   7: 10.0%
//   8: 1.3333334%
//   9: 1.3333334%
//   10: 0.6666667%
//   11: 8.666667%
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.tencent.tmgp.supercell.clashofclans/com.supercell.titan.tencent.GameAppTencent;end
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tencent.tmgp.supercell.clashofclans/com.supercell.titan.tencent.GameAppTencent } in package com.tencent.tmgp.supercell.clashofclans
Sleeping for 2000 milliseconds
:Sending Key (ACTION_DOWN): 3    // KEYCODE_HOME
:Sending Key (ACTION_UP): 3    // KEYCODE_HOME
    // Rejecting start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] cmp=com.bluestacks.launcher/.activity.HomeActivity } in package com.bluestacks.launcher
Sleeping for 2000 milliseconds
:Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
:Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
Sleeping for 2000 milliseconds
:Sending Touch (ACTION_DOWN): 0:(607.0,687.0)
:Sending Touch (ACTION_UP): 0:(604.4823,684.6509)
Sleeping for 2000 milliseconds

1. -p后面接着的对应的包名,对具体某个app测试
2. -s后面是对应的种子数,就是操作步骤,一般设置相同的种子是为了复现bug
3. --ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到carash
或者timeout的情况时忽略掉,一般不设置时,出现carash或者timeout时,Monkey测试会终止。这里是防
止Monkey测试终止。
4. -v 指的是Monkey测试时打印log级别。
5. 100000 这里是指点击的次数,根据她们测试的经验,对于单个应用程序这个次数设置在
100000次就可以了;如果是真机,一般设置在500000次。
6. --throttle-时间 ,设置事务之间的延迟等待时间,单位是毫秒
7.>路径,设置日志存储路径

4.Monkey测试的异常分析

般我们可以一次发送5万次随机事件的请求,每个请求之间的间隔为150毫秒,测试大约会进行40min,完成以后就可以查看日志。
日志中可能的错误:
1.程序崩溃,crash (ctrl+f搜索)
2.程序无响应,ApplicationNo Response(ctrl+f搜索‘ANR ’,加空格是为了屏蔽掉一些无效信息)
3.其他问题:在日志中搜索”Exception”。
Monkey 执行中断, 在log最后也能看到当前执行

二、兼容性测试

        Android App兼容性测试,是一个比较重要的App评价内容,说到测试阶段,兼容性测试主要是对App在各类机型上的兼容、适配等情况进行测试。搞清楚这一阶段的测试重点后,因此,Android App在进行兼容性测试前,一定要做好其前序测试内容,否则兼容性测试效果将会较差。

1.机型配置问题

        Android兼容测试一定要做到宽范围覆盖,如果做不到这个,那么就违背了兼容性测试的目标——测试App在各类机型、系统上的运行是否兼容、适配。
        因此,兼容性测试必须要在各个机型、系统上对App进行运行、测试,查看相关UI是否适配、功能是否正常。所以,必须要为兼容性测试配备尽可能多的机型。这是不是意味着,你的公司要去购置各类机型设备?当然不是。对于一般的公司或者开发者,这将会是一大笔开销,为了节约资金而造成进行覆盖率较低的话,则失去了兼容性测试的意义。另外,这也是没必要的,因为往往你就一个或两三个App,为了这少量App测试,而去购置如此大量的设备,无疑是一种资源浪费。除此,还有一个原因,这个原因将在兼容性测试如何展开的部分去说。除此,机型量的多少也是一个权衡的过程,目前,通用的兼容性测试一般覆盖Top100-300的机型,对于小众机型或者老旧机型,用户量非常小,在一定程度上,是否需要覆盖则需要权衡,总的来说,Top排名的手机基本足够。

2.兼容性测试如何展开

        这是一个经验性的过程,可以去借鉴大型互联网公司的成熟App的测试方法。目前,无论是国际知名App,还是国内知名App,谷歌、Facebook,BAT等,他们都有大量的App对外推出,对于App兼容性要求非常高,因此,他们的做法是非常值得借鉴的。这些公司的兼容性测试,都有一个相同的解决方案,那就是自动化测试框架与平台的实现。通过浏览上述公司在各种大会公布的内容,或者通过论坛知识分享,都能看到,他们不仅有自己的测试实验室,拥有大量的手机,除此,还有一整套的自动化测试平台,来完成兼容性测试。

3.云测平台

目前对移动App的测试主要指的是下面几部分:
兼容性测试——App对不同手机、操作系统版本的兼容性测试,包括安装、启动、卸载等。
功能测试——遍历应用的每一个角落,查看应用的功能、逻辑是否正常,完整。
性能测试——应用的性能怎样,如启动时间、反应时间、CPU占用率,内存占用率等。
稳定性测试——在一定时间内对App进行持续地测试,测试App运行的稳定性。
网络场景测试——测试不同网络环境中App的运行状况,如2G&3G,弱网络等。

以下是国内几家主要的云测试平台:
Testin:Testin云测|全球领先的App及手游测试平台
Testin是国内较早涉足云测试领域的公司之一。Testin在云端部署了300多款1000多部测试终端,终端种类及数量都比较全面。支持Android与iOS系统。但目前仅少部分服务为免费,绝大多数服务为收费项目,故而使用成本较高,具体收费情况请查看官网的介绍。

腾讯优测:优测网-让测试更简单腾讯优测是腾讯旗下的云测试服务平台,拥有超过1000款测试终端,机型数量庞大。但仅支持Android,暂不支持iOS系统。提供兼容性测试服务,不提供性能测试、功能测试及稳定性测试服务。另外,腾讯优测还提供“云手机”服务,开发者可以远程控制测试终端,实时查看App安装、运行效果。优测目前的功能为收费(新注册的用户可获得官方赠送的礼包),每天限制提交2次测试。
移动测试学习端口:https://wetest.qq.com/guide/learn-source

贯众云测试:贯众云测试
贯众云测试是中国移动旗下的云测试服务平台,目前拥有超过100款市面主流终端,支持Android及iOS系统。提供兼容性测试、功能测试、性能测试,稳定性测试(12小时)及网络场景测试服务(2G&3G&4G)。支持Appium脚本。缺点是终端数量较少,优点是功能较为全面,且基本功能都是免费,使用成本还是蛮低的。

百度MTC:百度移动云测试中心
百度MTC是百度开放平台旗下的移动云测试中心。提供超过500款热门机型,目前只支持Android系统,暂不支持iOS系统。提供的测试服务种类有兼容性测试、性能测试、功能测试。并且提供了脚本录制工具,类似Testin。但脚本录制工具更新速度较慢。百度MTC的服务目前为收费服务,具体收费情况请查看官网的介绍。

阿里MQC:MQC 阿里移动质量中心
阿里MQC是阿里巴巴旗下的移动测试平台。提供上百款测试终端,支持Android及iOS系统。提供兼容性测试、功能测试、性能测试以及稳定性测试(1小时)。测试脚本需使Robotium或Appium测试框架编写,难度较高。MQC也提供了远程的真机调试,功能和腾讯优测类似,看来腾讯和阿里还真是一对儿冤家啊。

三、真机测试

通过USB连接,打开手机的开发者模式,打开USB调试


 

总结

相关文章:

  • 【数据库SQL实战】获取所有部门当前manager的当前薪水情况
  • 通过json-server生成接口并实现一个CRUD项目
  • Java 转型问题(向上转型和向下转型)
  • c语言数据结构 二叉树(二)
  • 基于QT实现的SSL协议的安全报文发送接收设计
  • 虚拟列表的原理
  • 【Ubuntu小工具安装】
  • Vue封神之路(2.) Vue简介
  • 分布式锁全家桶
  • 数据库优化(8月27号)
  • 【BurpSuite】插件开发学习之J2EEScan(下)-主动扫描(11-20)
  • json/xml/schema
  • 进程管理学习
  • XMLHttpRequest对象,简单ajax get请求的例子
  • 在 Windows 10 | Docker Desktop | Kubernetes 环境 使用 hostPath / local 为 POD 配置本机目录
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Computed property XXX was assigned to but it has no setter
  • Effective Java 笔记(一)
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Facebook AccountKit 接入的坑点
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JAVA 学习IO流
  • js学习笔记
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • node入门
  • npx命令介绍
  • oschina
  • React16时代,该用什么姿势写 React ?
  • React的组件模式
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 基于webpack 的 vue 多页架构
  • 技术胖1-4季视频复习— (看视频笔记)
  • 如何在GitHub上创建个人博客
  • 少走弯路,给Java 1~5 年程序员的建议
  • 我这样减少了26.5M Java内存!
  • 小程序开发之路(一)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 积累各种好的链接
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​批处理文件中的errorlevel用法
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (pojstep1.1.2)2654(直叙式模拟)
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (三)终结任务
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • . Flume面试题
  • .NET Core 版本不支持的问题