[技术博客] Android 自动化测试

安卓自动化测试工具与平台的搭建

类似于网页端自动化,安卓测试的自动化也主要是针对控件的自动化。其原理就是通过python(其他语言) 的脚本来代替我们手动完成的任务。所以我们需要的工具就是 python(测试脚本),Appium(安卓自动化测试工具),uiautomatorviewer.bat (定位安卓控件),虚拟机或者真机(运行安卓程序)。

我们按照自动化测试的过程来介绍工具的使用与安装。

uiautomatorviewer.bat

这是 SDK 自带的一个工具,主要作用就是定位安卓的控件的位置,因为 Appium 控制的就是这些控件,或者说是元素。获取元素位置的方法有很多,类似于网页端的 'class', 'xpath' , 'id' 等等。关于这个工具,GitHub 有大神分享了一版加强版的工具,传送门。加强版可以直接定位完全的 xpath 路径,相比通过 class 自己写要方便很多。

上面是一个查看元素的例子,通过右下方的路径可以十分简单的访问到元素。尤其是对于 React-Native 这种框架式,而不是基于原生安卓的,这样就方便了很多很多。

Appium 自动化测试工具

这个工具是目前广泛使用的安卓自动化测试的工具。但是官网好像已经停止更新了,目前好像在 GitHub 维护,传送门 。下载后直接安装,不过貌似只能安装在系统盘。关于 Appium 的具体使用,可以参考这篇博客,传送门 。这里就不过多的叙述具体的操作过程了。

启动之后是这样的,然后直接运行python脚本就可以看到虚拟机或者真机上 APP 自动的运行了。

自动化测试的代码

虚拟机或者真机的配置

这里准确的来说是,在python 脚本中对虚拟机或者真机的操作。对python 来说,首先安装支持 Appium 运行的包,appium,然后在测试的开始要配置机器,也就是让 Appium 找到机器在哪,链接机器与 Appium,这样就可以通过 Appium来控制 机器了。

self.desired_caps = {}
self.desired_caps['platformName'] = 'Android' # 平台
self.desired_caps['deviceName'] = '192.168.221.101:5555'
# self.desired_caps['platformVersion'] = '9.0' # 系统版本
# self.desired_caps['app'] = 'E:/autotestingPro/app/UCliulanqi_701.apk' # 指向.apk文件,如果设置appPackage和appActivity,那么这项会被忽略
# self.desired_caps['deviceName'] = 'Android Emulator'
self.desired_caps['appPackage'] = 'com.cnblogandroid' # APK包名
self.desired_caps['appActivity'] = '.MainActivity' # 被测程序启动时的Activity
self.desired_caps['unicodeKeyboard'] = 'true' # 是否支持unicode的键盘。如果需要输入中文,要设置为“true”
self.desired_caps['resetKeyboard'] = 'true' # 是否在测试结束后将键盘重轩为系统默认的输入法。
self.desired_caps['noReset'] = True # true:不重新安装APP,false:重新安装app
self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", self.desired_caps)
# 构建虚拟机,用于测试

这样配置之后就可以直接开始写测试代码,控制虚拟机或者真机了。但是我们为了方便,写很多个不同的测试,由于有时候测试无法连在一起,所以我们使用 unittest 框架来写测试代码。该方法的好处是,可以写多个相关或者不相关的测试实例,然后将他们组合起来,具体就是:

if __name__ == '__main__':
suite = unittest.TestSuite() # 一个测试实例
tests = [Test_Blog_HomeWork("test_blog"), test_borad("test_borad")] # 可以加入其它测试
suite.addTests(tests)

对于自动化测试,我们通常用于重复的操作,或者覆盖性的测试。那么如何判断测试的完整性呢,及代码中有没有出现未运行到的测试呢? unittest 提供了一个 UnittestTextReport 的方法。可以看到测试的情况,为了美观,unittest 还提供了 HTMLTestRunner 通过html的方式显示测试结果。

[技术博客] Android 自动化测试的更多相关文章

  1. [技术博客]Android 开发 Bug Log

    [技术博客] Android 开发 Bug Log 大大小小的bug,聪明的愚蠢的都有, 持续记录中...... java.lang.IllegalArgumentException: The sty ...

  2. 【新版】Android技术博客精华汇总

    [新版]Android技术博客精华汇总(原文链接内持续更新) http://www.apkbus.com/thread-313856-1-1.html Kotlin Kotlin学习资料汇总 http ...

  3. 转: BAT等研发团队的技术博客

    BAT 技术团队博客   1. 美团技术团队博客:  地址: http://tech.meituan.com/ 2. 腾讯社交用户体验设计(ISUX) 地址:http://isux.tencent.c ...

  4. IT技术博客收藏

    1. coolshell.cn 特点: 每篇都是精品 2. 云风 特点: 3. 阮一峰的博客 特点:高精深 3. offbye涛声依旧-全端技术博客 特点: android的开发技术比较多,非常值得一 ...

  5. [转]有哪些值得关注的技术博客(Java篇)

    有哪些值得关注的技术博客(Java篇)   大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1. ...

  6. 最值得收藏的java技术博客(Java篇)

    第一个:java_my_life 作者介绍:找不到原作者信息.大概做了翻阅全部是2012年的博客. 博客主要内容:主要内容是关于Java设计模式的一些讲解和学习笔记,在相信对学习设计模式的同学帮助很大 ...

  7. [福大软工] Z班——个人技术博客评分

    个人技术博客 作业地址 https://edu.cnblogs.com/campus/fzu/SoftwareEngineering2015/homework/1070 作业要求 个人技术博客单次作业 ...

  8. 个人技术博客(α)------javaweb的学习路程

    该博文大致内容是学习的一个过程,心得,并不是以技术博客为主,在此说明. 关于javaweb的学习开始的时间大概是从大二下(2017年6.7月份)的暑假开始的,在学长的介绍下加入了实验室进行学习,由于是 ...

  9. 个人技术博客二之apk反编译与加密

    根据原文郭霖大神的博客Android安全攻防战,反编译与混淆技术完全解析 本人亲测反编译真的没有什么卵用,个人纯属好奇就去搜了一下,偷窃有罪,抄袭可耻. 1.手机上的apk都是打包好的,直接安装使用. ...

随机推荐

  1. CentOS7下载配置PostgreSQL的pgAgent运行代理作业

    1.安装PostgreSQL 参考官方文档https://www.postgresql.org/download/linux/redhat/,运行如下命令 yum install https://do ...

  2. ObjC: 源文件的组织

    转自:http://marshal.easymorse.com/tech/objc-%e6%ba%90%e6%96%87%e4%bb%b6%e7%9a%84%e7%bb%84%e7%bb%87 最简单 ...

  3. AI涉及到数学的一些面试题汇总

    [LeetCode] Maximum Product Subarray的4种解法 leetcode每日解题思路 221 Maximal Square LeetCode:Subsets I II (2) ...

  4. Map去重,去重value相同的元素,保留key最小的那个值

    Map<Integer,String>,Integer代表时间撮,String代表文本信息去重函数:就是删除Map中value相同的元素,只保留key最小的那个元素 public stat ...

  5. PostgreSQL 基本数据类型及常用SQL 函数操作

    数据类型 名字 别名 描述 bigint int8 有符号的8字节整数 bigserial serial8 自动增长的8字节整数 bit [ (n) ]   定长位串 bit varying [ (n ...

  6. Linux系统密码复杂度安全配置

    密码有效期控制 在文件/etc/login.defs中进行设置,如下参数 PASS_MAX_DAYS 180 #密码最长过期天数 PASS_MIN_DAYS 30 #密码最小过期天数 PASS_MIN ...

  7. postgresql源代码结构

    转载学习: 德哥培训! 源码下载: https://www.postgresql.org/ftp/source/ 1.postgressql源码目录结构 2.src目录结构

  8. 浅谈Python设计模式 - 外观模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 外观模式 外观模式的核心在于将复杂的内部实现包装起来,只向外界提供简单的调用接口 ...

  9. HTTP状态码面试必知

    typora-root-url: ./HTTPCODE HTTP状态码必知必会 这里主要介绍运维过程中经常遇到的状态码.并通过业界流行的Nginx进行模拟实现,让大家能有一种所见即所得的感觉.希望大家 ...

  10. 【转】JAVA接口自动化测试之一个测试方法对应多条测试数据的实现方式

    一.痛点:一条测试数据对应一个测试方法 前面的章节中我们已经写代码实现了登录接口的处理调用,但是一个接口往往是需要多条测试用例才能完整的覆盖到每一种情况. 针对于单接口多条测试用例需要执行的情况,该如 ...