0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Android 程序员必须掌握的三种自动化测试方法

lhl545545 来源:电子发烧友网 2018-02-06 16:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

在日常的开发中,尤其是app开发,因为不像web端那样 出错以后可以热更新,所以app开发 一般对软件质量有更高的要求(你可以想一下 一个发出去的版本如果有重大缺陷 需要强制更新新客户端是多么蛋疼的事情)。所以我们app的开发者一定要学会自己测试自己的代码,自己测试自己的app,不要寄希望于测试来帮你找bug,绝大多数隐藏极深的bug 都是开发自己发现的。

那么如何测试自己的app,测试自己的模块呢?

1.Monkey

http://developer.android.com/intl/zh-cn/tools/help/monkey.html

这个工具是最简单的,我主要用他来压力测试,所谓压力测试就是 乱点。。。模拟各种各样奇怪的操作 看你的app能不能抗的住。

可以简单看一下 这个命令的用法。看一下help 介绍的参数说明。

Android 程序员必须掌握的三种自动化测试方法

举例来说:

1 android shell monkey -p 你想测试程序的包名 -v 500

比如 我现在想看看android 系统自带的日历应用 在压力下表现如何。

Android 程序员必须掌握的三种自动化测试方法

你看 这个地方模拟器自己就开始疯狂点击了。当然在实际使用中,我们都是会把次数调到 几十万次到几百万次,然后下班以后开始跑,第二天来看结果 看看在哪里出了问题~~。基本上

每日构建完毕以后都会跑一下。Monkey基本上 就是这样使用的。非常简单 但是作用也非常有限。不过可以极大帮助你 找出你app的一些隐藏极深的bug。

比如evernote,这个我平常使用的软件 我自己是没有碰到过crush的,但是你跑一下monkey,1个多小时 就崩溃了。。。。。所以monkey是提升软件质量的 好帮手。

2.MonkeyRunner

http://developer.android.com/intl/zh-cn/tools/help/monkeyrunner_concepts.html

这个相对于Monkey 来说 就是真正意义上的 自动化测试工具了。只需要编写脚本即可完成 我们平时所需要的 大部分 冒烟用例等等。

尤其是在4.x以下的机型里,由于无法使用uiautomator, MonkeyRunner几乎就是唯一的自动化测试编写办法。

下面我举个例子,比如我们app里最常用的登录功能,我们就可以编写一个脚本来完成。

复制代码

1 # coding=UTF-8

2 from com.android.monkeyrunner import MonkeyRunner as mr

3 from com.android.monkeyrunner import MonkeyDevice as md

4 from com.android.monkeyrunner import MonkeyImage as mi

5 from com.android.monkeyrunner.easy import EasyMonkeyDevice

6 from com.android.monkeyrunner.easy import By

7

8 #定义安装文件路径

9 installPackage = ‘C:UsersAdministratorViewPageTestappuildoutputsapkapp-debug.apk’

10

11 #要测试的程序的包名

12 apkPackageName =‘com.example.administrator.viewpagetest’

13

14 #要启动的第一个activity的名称

15 initActivityName=apkPackageName+“/com.example.administrator.viewpagetest.MainActivity”

16

17

18 device = mr.waitForConnection()

19

20

21 #安装apk包

22 device.installPackage(installPackage.decode(‘utf-8’))

23

24

25 #启动应用程序

26 device.startActivity(component=initActivityName)

27 #防止启动首页面 需要时间过长

28 mr.sleep(3)

29

30 easy_device = EasyMonkeyDevice(device)

31

32 mr.sleep(3)

33

34

35

36 easy_device.type(By.id(‘id/username_et’),‘zhangsan’)

37 # 这里的mr静止 主要用于演示demo上的gif效果

38 mr.sleep(2)

39 easy_device.type(By.id(‘id/password_et’),‘123456’)

40 mr.sleep(2)

41 easy_device.touch(By.id(‘id/submit_bt’),md.DOWN_AND_UP)

然后运行他 看看效果:

你看上面的脚本 完成了 自己安装apk 输入用户名和密码 并且点击登录按钮的过程。

有人问,你这个模拟登录的过程是模拟出来了,那我怎么知道 到底登录成功没有呢?

其实也很简单。主要有几个方法。

1.登录成功以后你这个页面肯定是要跳转到主界面的对吧,你就用脚本执行下shell命令 看看主页面 是否在栈的最上方?(前面我的activity 启动模式那篇博客里讲过这个命令的)

2.你可以在log 里面 打印出登录成功这个消息 然后用脚本捕捉到这个log 日志 就知道是否登录成功了。

3.甚至你还可以捕获界面上某个控件的文字值。

4.比较某个操作结束后的 截屏。保存为图像以后 和正确操作以后的图像进行对比。

这里我就不继续往下写这个脚本了。有兴趣的同学可以自己尝试 完成日常工作里的 那些冒烟用例。(意义重大,否则每次发版本 你的那些用例全部要用手点击手机完成一遍 那多麻烦!)

此外 我们还可以利用recorder来录制脚本,然后再反过来用python执行这个脚本 来执行我们的测试过程。这个方法 我就不做详细分析了,很简单。(但是要注意 这个方法 启动的 捕捉器 在多数情况下都非常卡顿,所以采用率不高。)

3.UiAutomator

http://developer.android.com/intl/zh-cn/tools/testing-support-library/index.html

这个工具我个人认为是所有android 程序员都必须要掌握的,有了这个强大的工具,我们就可以负责任的对自己的代码 说 木问题,ok!

此工具 能模拟几乎所有对android设备的操作。

而且代码也非常简单 全部都是java代码,并且android的api 他还几乎都能够使用。简直酷到没有朋友!比android studio 自带的ApplicationTestCase 强到不知道哪里去了。

在这之前 你需要对gradle脚本有少许了解。具体可参见我的blog http://www.cnblogs.com/punkisnotdead/p/5029125.html

这个工具的原理实际上和http://www.cnblogs.com/punkisnotdead/p/4885572.html 里面提到的辅助服务是差不多的。都是利用的那个service。

你只要会写UiAutomator testcase,就意味着你的代码 几乎是永远不会出错哒~~

好,下面给出一个基本的例子 来让你明白 为何这个工具这么吊。

首先 给出gradle里的改动:

apply plugin: ‘com.android.application’

2

3 android {

4 compileSdkVersion 23

5 buildToolsVersion “23.0.2”

6

7 defaultConfig {

8 //不要遗漏这句话

9 testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner”

10 applicationId “com.example.administrator.testcaseone”

11 minSdkVersion 18

12 targetSdkVersion 23

13 versionCode 1

14 versionName “1.0”

15 }

16 buildTypes {

17 release {

18 minifyEnabled false

19 proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’

20 }

21 }

22 }

23

24 dependencies {

25 compile fileTree(dir: ‘libs’, include: [‘*.jar’])

26 testCompile ‘junit:junit:4.12’

27 //这个地方要注意了 studio自带的里面版本号一般都比较高,如果出错的话 你要手动把这个版本号调低一点

28 compile ‘com.android.support:appcompat-v7:23.0.1’

29 compile ‘com.android.support:design:23.0.1’

30 //对这个androidTestCompile不理解的 可以参考我的博客里讲gradle的那篇

31 androidTestCompile ‘com.android.support.test:runner:0.4’

32 androidTestCompile ‘com.android.support.test:rules:0.4’

33 androidTestCompile ‘com.android.support.test.uiautomator:uiautomator-v18:2.1.2’

34 }

复制代码

然后变更一个conifg

Android 程序员必须掌握的三种自动化测试方法

然后我们就可以在studio里面直接run我们的testcase啦:

Android 程序员必须掌握的三种自动化测试方法

好,然后我们来假设一个场景,假设我们现在要做的功能是 有一个界面,界面上有2个输入框,你在这2个输入框里输入数字以后,点击计算按钮

另外一个textview 就会显示出来 2个数字相加的结果。 那我们的testcase就要来完成 用户模拟操作的这个过程 并且看看结果是否和我们预想中的相匹配!

(假设我们现在的android代码里这个计算的代码是有错误的)

1 textView.setText(Integer.parseInt(et1.getText().toString()) + Integer.parseInt(et2.getText().toString()) + 1 + “”);

你看 这里 我故意加了一个1.

然后写我们的testcase 注意testcase的位置

Android 程序员必须掌握的三种自动化测试方法

然后看一下这个testcase的代码:

package com.example.administrator.testcaseone;

2

3 import android.support.test.uiautomator.UiAutomatorInstrumentationTestRunner;

4 import android.support.test.uiautomator.UiAutomatorTestCase;

5 import android.support.test.uiautomator.UiDevice;

6 import android.support.test.uiautomator.UiObject;

7 import android.support.test.uiautomator.UiObjectNotFoundException;

8 import android.support.test.uiautomator.UiScrollable;

9 import android.support.test.uiautomator.UiSelector;

10

11 /**

12 * Created by Administrator on 2016/1/5.

13 */

14 public class FirstUiautomatorTest extends UiAutomatorTestCase {

15

16 public void testDemo() throws UiObjectNotFoundException {

17

18 UiDevice.getInstance(getInstrumentation());

19 //19-27 行 其实就是用这个框架提供的功能来直接启动你的app.

20 //这里其实主要就是要找到你的app那个textview 然后点击他 具体api自己去慢慢看吧

21 getUiDevice().pressHome();

22 UiScrollable appViews = new UiScrollable(new UiSelector()

23 .scrollable(true));

24 UiObject myApp = appViews.getChildByText(new UiSelector()

25 .className(“android.widget.TextView”), “TestCaseOne”);

26 //要等到新的窗口出来才继续往下走

27 myApp.clickAndWaitForNewWindow();

28 //29-32行 就很简单了,无非就是找到界面上的元素。

29 UiObject et1 = new UiObject(new UiSelector().resourceId(“com.example.administrator.testcaseone:id/et”));

30 UiObject et2 = new UiObject(new UiSelector().resourceId(“com.example.administrator.testcaseone:id/et2”));

31 UiObject bt1 = new UiObject(new UiSelector().resourceId(“com.example.administrator.testcaseone:id/bt1”));

32 UiObject tv1 = new UiObject(new UiSelector().resourceId(“com.example.administrator.testcaseone:id/tv1”));

33 //这里的sleep只是为了gif动画能显示的更清楚罢了,一般我们自己写的时候为了用例速度快一点 是不会加sleep的

34 //某些特殊场景除外

35 et1.setText(“12”);

36 sleep(3000);

37 et2.setText(“21”);

38 sleep(3000);

39 bt1.click();

40 //12和21相加 明显应该是33,所以判断下 我们的代码是否正确

41 assertEquals(33, Integer.parseInt(tv1.getText().toString()));

42

43 }

44 }

然后直接run我们的这个defaluttest,看看模拟器会发生什么?

自动都帮你模拟了用户的操作,这个testcase就跑完了,然后看下我们的studio:

Android 程序员必须掌握的三种自动化测试方法

显然的也报错了。并且这个工具能自动捕获ui错误哦~~什么anr 之类的 都不在话下。有了他,我们就能为自己写的代码负责了,每次发版本之前 跑跑我们写好的testcase

基本上就能保证我们app的绝大多数流程是ok的~~所以这个工具一定要掌握!至于他其他好多api 我就不过多介绍了,留给你们自己去探索吧!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 自动化测试
    +关注

    关注

    0

    文章

    257

    浏览量

    27690
  • Android
    +关注

    关注

    12

    文章

    3985

    浏览量

    133053
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CI/CT自动化测试解决方案

    北汇信息可以提供Jenkins、Gitlab Runner CI和自研平台等的CI/CT整体解决方案,通过CI/CT自动化测试执行、测试策略定制、测试任务
    的头像 发表于 11-12 16:01 1196次阅读
    CI/CT<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>解决方案

    测试小白3分钟上手,零代码自动化测试平台,15分钟搭建自动化测试方案

    还在为不懂代码、搭建测试方案耗时久而发愁?ATECLOUD 零代码自动化测试平台,专为自动化测试量身打造,小白3 分钟就能轻松上手,15 分
    的头像 发表于 09-22 17:52 611次阅读
    <b class='flag-5'>测试</b>小白3分钟上手,零代码<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>平台,15分钟搭建<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>方案

    同惠LCR测试仪如何实现高效批量自动化测量

    在电子元器件生产与品质检测中,同惠LCR测试仪凭借高精度与稳定性备受青睐。为提升批量测试效率,降低人力成本,通过软硬件协同优化可实现高效自动化测量,以下是具体方法:   一、硬件准备与
    的头像 发表于 09-17 16:26 304次阅读
    同惠LCR<b class='flag-5'>测试</b>仪如何实现高效批量<b class='flag-5'>自动化</b>测量

    电源模块的短路保护如何通过自动化测试软件完成测试

    在当今电力电子领域,电源模块的可靠性至关重要,短路保护作为其关键特性,需通过精确的自动化测试软件进行验证。本文将整理如何借助自动化测试软件ATECLOUD完成电源模块短路保护的
    的头像 发表于 09-03 19:10 563次阅读
    电源模块的短路保护如何通过<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>软件完成<b class='flag-5'>测试</b>

    如何用Renix实现网络测试自动化: 从配置分离到多厂商设备支持

    文章主要介绍如何使用Renix高层封装API编写自动化脚本的基础知识和技巧。只要您熟悉测试流程,不需要很强的代码能力就可以顺利编写自动化测试。 本教程将以实践为导向,引导您逐步
    的头像 发表于 08-27 15:21 469次阅读
    如何用Renix实现网络<b class='flag-5'>测试</b><b class='flag-5'>自动化</b>: 从配置分离到多厂商设备支持

    除了LabVIEW还有哪些自动化测试的软件?

    ,它们在各自擅长的领域中有着独特的优势特点。 labview Intouch,一工业自动化组态软件。由 Wonderware 公司开发。 InTouch HMI 软件用于可视和控制工业生产过程。它为工程师提供了一
    的头像 发表于 07-30 17:18 713次阅读
    除了LabVIEW还有哪些<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>的软件?

    自动化测试平台ATECLOUD推出AI算法功能

    作为纳米软件自主研发的自动化测试平台,ATECLOUD 始终致力于为用户提供高效优质的测试解决方案。面对5G、AI等前沿技术的迭代发展,平台深度融合新技术持续升级测试能力,最新推出的A
    的头像 发表于 07-22 16:10 477次阅读
    <b class='flag-5'>自动化</b><b class='flag-5'>测试</b>平台ATECLOUD推出AI算法功能

    TH2822系列LCR测试仪的自动化测试

    推出的TH2822系列LCR测试仪,凭借其高精度测量、多功能接口及智能设计,为自动化测试提供了完善的解决方案。本文将深入探讨TH2822系列在自动
    的头像 发表于 04-23 16:38 565次阅读
    TH2822系列LCR<b class='flag-5'>测试</b>仪的<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>

    矢量信号发生器在工业自动化测试中的应用场景

    随着工业自动化技术的飞速发展,对测试设备的要求也日益提高。矢量信号发生器作为一先进的测试设备,凭借其强大的信号调制能力和广泛的频率覆盖范围,在工业
    的头像 发表于 03-26 14:10 724次阅读

    自动化设备中滚珠螺杆的清洗方法有哪些?

    滚珠螺杆是一常见的精密传动元件,广泛应用于机床、自动化设备等领域。
    的头像 发表于 02-05 17:58 632次阅读
    <b class='flag-5'>自动化</b>设备中滚珠螺杆的清洗<b class='flag-5'>方法</b>有哪些?

    通用自动化测试软件 - TAE

    INTEWORK-TAE(Test Automation Executor) 是一款通用的测试用例自动化执行框架,用于汽车电子自动化测试,可支持仿真( MIL/SIL/HIL)、故障注
    的头像 发表于 01-02 13:42 1286次阅读
    通用<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>软件 - TAE

    串口屏自动化测试

    严谨而高效的自动化测试方案显得尤为重要。以下是对串口屏自动化测试策略的深度解析,旨在通过高质量的测试设计,严格控制产品设计质量,推动产业升级
    的头像 发表于 12-27 17:17 1744次阅读

    TMS320C6000程序员指南

    电子发烧友网站提供《TMS320C6000程序员指南.pdf》资料免费下载
    发表于 12-24 17:19 2次下载
    TMS320C6000<b class='flag-5'>程序员</b>指南

    TMS320C55x DSP CPU程序员参考补充

    电子发烧友网站提供《TMS320C55x DSP CPU程序员参考补充.pdf》资料免费下载
    发表于 12-21 11:36 3次下载
    TMS320C55x DSP CPU<b class='flag-5'>程序员</b>参考补充

    UCD3138A64/UCD3138128程序员手册

    电子发烧友网站提供《UCD3138A64/UCD3138128程序员手册.pdf》资料免费下载
    发表于 12-09 14:42 1次下载
    UCD3138A64/UCD3138128<b class='flag-5'>程序员</b>手册