Android自动化单元测试(下)

简介:

承接上文

上一篇单元测试讲了如何在Android Studio中写测试用例,自动化测试并生成测试报告,这一篇主要讲一下扩展工具的使用。

jacoco代码覆盖率

  jacoco是一个检测代码覆盖率的插件工具,那什么是代码覆盖率呢?代码覆盖率简单来说就是单元测试用例所测试到的代码比重,被测试到即是被覆盖。覆盖率高自然是好事,但不能完全说明代码质量高没有bug,生成的覆盖率报告可能大部分情况下也就是应付差事,应付差事,付差事。。。
  呵呵
   在Android Studio中使用jacoco还是比较简单的,只需要更改Module目录下的gradle文件。首先就是导入jacoco插件并指定使用版本。

apply plugin: 'jacoco'
jacoco {
    version "填写版本号,如0.7.9"
}

   指定版本的代码在AS2.x时代可以写在android代码块中,不过到了3.0之后就不推荐了,可以写在外面和android、dependencies一个级别。另外需要在buildTypes下的debug(release应该也可以)中添加支持代码覆盖testCoverageEnable为true。然后就是自定义一个gradle task。

task jacocoTestReport(type:JacocoReport,dependsOn:"test"){  // 1
    group = "Reporting"
    description = "Generate Jacoco coverage reports after running tests."
    classDirectories = fileTree(  // 2
            dir : "$buildDir/intermediates/classes/debug",
            excludes : [
                    '**/R.class',
                    '**/R$*.class',
                    '**/BuildConfig.*',
                    '**/Manifest*.*'
            ]
    )
    def coverageSourceDirs = ['src/main/java']
    additionalSourceDirs = files(coverageSourceDirs)
    sourceDirectories = files(coverageSourceDirs)
    additionalClassDirs = files(coverageSourceDirs)
    executionData = files("$buildDir/jacoco/testDebugUnitTest.exec")  // 3
    reports{  // 4
        xml.enabled = false
        html.enabled = true
        csv.enabled = false
    }
}

  上面的代码有几个点需要注意:

  • 注释1中的type指定了类型,这里就是jacoco的报告,然后他是依据后面dependsOn的task去生成的;
  • 注释2是指定了生成的类文件的目录,其中exclude是排除以下的文件,如果有以下源码不需要进行识别是否覆盖,这里也就要求了命名的规范性;
  • 注释3是最重要的一个部分,这里指向了一个exec文件,jacoco原理上就是根据这个生成的文件去生成自己的报告,不过有一点要注意如果一开始dependsOn的是AndroidTest的任务,这个文件的路径就不一样了而且后缀也不一样,去尝试一下吧;
  • 注释4比较显而易见的就是报告生成的类型,最好还是html。

  依然是在AS的命令终端执行gradlew+task的命令模式,gradlew jacocoTestReport之后终端会自动执行自动化测试并生成测试报告和代码覆盖率报告。代码覆盖率报告生成的前提是所有的测试用例都通过测试。覆盖率报告的样子可以参考下图,红色代表了没有覆盖到:
这里写图片描述

jenkins持续集成

   jenkins是一种持续集成工具,可以监控持续重复的工作,如apk的打包生成等。它的环境搭建不是这里重点说的,网上的例子也很多。用过这个工具的应该也对它支持gradle构建Android apk有所了解,在自动化测试的部分用到它也是用到了它能够对Android项目自动打包,同时支持插件的扩展。
   为了能够支持单元测试,jenkins需要安装junit插件,如果想增加对代码覆盖率的支持,就需要安装本文介绍的jacoco的插件。由于这一部分并不是所有技术人员都会参与,所以主体内容就省略,直接跳转到如何配置构建的命令一步。
这里写图片描述
   上图中就是对一个jenkins任务的配置,这里的构建就是项目在构建时所需要做的一些工作,首先选择合适版本的gradle,然后就是添加gradle所需要执行的tasks。保存之后在该项目的控制面板中点击立即构建,会出现一个正在构建的任务,这个过程可能比较漫长。构建成功之后可以在对应的jenkins的工作目录下的该项目目录找到生成的报告。特别提醒一下,这次构建gradle会自动为我们生成lint报告,方便了代码review。

总结

   两篇文章其实也只是简单介绍了Android的自动化单元测试,介绍了移动端自动化测试的可行性。不过也有很多没有涉及或介绍不细之处,如其他的单元(UI)测试框架,对jenkins的使用等等。准备仓促,而且也不是专业测试开发人员,最后列出一下参考文章以拓展。

参考文章

Android单元测试框架Robolectric3.0介绍
Jenkins构建Android项目持续集成之简介篇(这是一个系列)

目录
相关文章
|
2月前
|
测试技术 UED Python
探索软件测试的边界:自动化与手动测试的协同
【8月更文挑战第59天】在追求效率和质量的软件生产中,自动化测试与手动测试的辩论从未停止。本文将通过实际案例,揭示二者如何相辅相成,共同构建更健壮的软件测试体系。我们将深入探讨自动化测试的优势、手动测试不可替代的角色以及它们如何在实际项目中协同工作,旨在为读者提供一种平衡的视角来看待软件测试的实践。
131 65
|
14天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
14天前
|
机器学习/深度学习 SQL 安全
如何确保自动化安全测试的全面性和准确性?
如何确保自动化安全测试的全面性和准确性?
|
21天前
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
1月前
|
测试技术
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。
92 2
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
|
1月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
211 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
本文介绍了Python的unittest框架的基础用法,包括测试初始化(setup)、清除(tearDown)函数的使用,以及assertEqual和assertGreaterEqual等断言方法,并展示了如何创建测试用例,强调了测试函数需以test_开头才能被运行。
64 1
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
|
24天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
42 2
|
25天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
32 2
|
19天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
下一篇
无影云桌面