美文网首页昔我室友屌似卿测试开发
Android应用测试开发——准备篇

Android应用测试开发——准备篇

作者: 张大川大川 | 来源:发表于2017-07-23 02:00 被阅读23次

    背景

    编写完代码之后,我们通常会测试自己的代码。然而大部分的我们尤其是对Android来说,都仅仅是跑过自己的代码然后看看功能看起来正常之后就算自测了。

    当我们做了大量的重复的简单的动作的时候,是不是应该想想怎么让机器实现这些操作呢?为什么我们不编写一些测试代码的代码——测试用例呢?很多的Android开发者都不会写或者很少写测试用例,自己现在工作的环境也没有让写单元测试,所以自己这一方面的技能也是缺失的。因此这里准备开一个坑。把Android应用测试这一块的技能彻底补上。

    测试类型

    在Android上的测试类型有两种,一种是本地单元测试,测试工程放在src/test目录下,基于JVM,另一种就是设备测试,用来Android设备来
    执行测试用例。


    test-types.png
    单元测试

    开发过程中,用来测试项目中各个单元模块的功能是否正常等。通常我们使用JUnit来进行单元测试。

    本地测试

    基于JVM,不用编译成apk,直接用来跑单元测试,适用于不需要Android的FragmeWork依赖的情形或者使用mock的Android Framenwork依赖。

    设备测试

    当模拟对象不能满足我们的测试用例时,我们可以将测试代码写到androidTest中,通过真实的设备或者模拟器来测试我们的代码。

    集成测试

    用来测试所有的单元集成的功能是否正常。我们可以使用Espresso来进行App组件的测试,使用UI Automator来进行跨app组件的测试。

    测试API

    JUnit

    @Before:
    使用此注解指定包含测试设置操作的代码块。测试类调用每个测试之前该代码块。你可以有多种@Before方法,但在测试类调用这些方法不能保证的顺序。

    @After:
    该注解指定包含测试拆除操作的代码块。测试类调用每个测试方法后,这个代码块。您可以定义多个@After在您的测试代码操作。使用此批注从内存中释放的任何资源。

    @Test:
    标记的测试方法。单个测试类可以包含多个测试方法。

    @Rule:
    规则,您可以灵活地添加或重新定义的可重复使用的方式,每个测试方法的行为。在Android的测试,与Android的测试支持库提供的测试规则类,如一个共同使用此注解ActivityTestRuleServiceTestRule

    @BeforeClass:
    标记一个静态的方法,这个方法只能被调用一次。适用于代价比较高初始化操作,例如数据库连接。

    @AfterClass:
    标记该静态方法只能在测试用例执行完成之后调用。适合用于释放分配的资源
    @Test(timeout=):
    指定测试超时时间。如果测试启动,但给定的超时期限内没有完成,它会自动失败。单位毫秒,例如:@Test(timeout=5000)。

    测试支持库

    1. AndroidJUnitRunner
      在Android上兼容JUnit4的测试运行类
    2. Espresso
      UI测试框架, 适合应用内部的功能UI测试。
    3. UI Automator
      UI测试框架,适合跨应用组件的测试。

    Monkey and monkeyrunner

    Android SDK提供的两个功能级的测试工具。

    1. Monkey
      压力测试,又称冒烟测试。可以通过Monkey工具,使用ADB连接设备,执行Monkey命令,来对App进行压力测试。用于检测App的稳定性很有用。可以多次使用相同的随机数种子运行该工具重复事件流。
    adb shell monkey -p <包名> --throttle<操作延迟> --s <随机种子> --pct-touch 50 --pct-motion 50 -v -v 1000 >c:\monkey.txt
    
    1. monkeyrunner
      该工具的API和运行的环境是由python编写的。我们可以写一个量大面广,功能强大,复杂的测试,然后用命令行工具来测试。

    总结

    有人说开发的时间已经够紧张了,为什么还要编写测试用例呢?虽然自己还没有亲自体验过编写的测试用例带来的好处(因为之前没写过),但听好多的大牛说编写测试用例并不会占用你开发的时间,反而可能缩短你开发的时间,而且你编写出来的代码质量会更高,而且重构的成本也会非常小。甚至都有一种开发模式叫做测试驱动开发(TDD)。总体来说还是利大于弊的。

    相关文章

      网友评论

        本文标题:Android应用测试开发——准备篇

        本文链接:https://www.haomeiwen.com/subject/arspkxtx.html