[技术博客] 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. Spring Cloud Sleuth 整合

    引入Maven依赖 org.springframework.cloud spring-cloud-starter-sleuth 日志发生的变化 当应用ClassPath下存在org.springfre ...

  2. Android Scroller简单用法实例

    Android里Scroller类是为了实现View平滑滚动的一个Helper 类.通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(cont ...

  3. select用法 多并发处理

    select默认最大检查套接口数量是1024,有定义 #define __NFDBITS (8 * sizeof(unsigned long)) #define __FD_SETSIZE 1024 # ...

  4. python bs4 BeautifulSoup

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.bs4 模块的 BeautifulSoup 配合requests库可以写简单的爬虫. 安装 命令:pip in ...

  5. MySQL 5.7数据库参数优化

    连接相关参数 max_connections:允许客户端并发连接的最大数量,默认值是151,一般将该参数设置为500-2000max_connect_errors:如果客户端尝试连接的错误数量超过这个 ...

  6. Docker 0x03:Install Docker

    目录 Install Docker Centos yum 安装 运行docker-daemon并开机自启动 运行hello-world应用docker容器中 Ubn Install Docker do ...

  7. 【异常】org.eclipse.jgit.api.errors.TransportException: git@xxx.xxx.xxx/base-config-center.git: channel is not opened.

    一.异常原因 连不上git仓库,可能原因有: 1.)git仓库不存在 2)连接git仓库超时 二.对应的解决办法 1) 创建对应仓库 2) 2.1 换个服务性能更好的部署gitlab 2.2 可以研究 ...

  8. restframework详细

    1.写视图的方法 1.1第一种:原始APIView url(r'^login/$',account.LoginView.as_view()), from rest_framework.views im ...

  9. K-th Path CodeForces - 1196F

    题目链接:https://vjudge.net/problem/CodeForces-1196F 题意:从图中找出第K短的最短路,最短路:从一个点到另一个的最短距离. 思路:题目说了,每两个点之间的边 ...

  10. Unity历史版本的文档

    前言 在我们的开发过程中,如果要查找Unity文档,通常会有以下两种方式: 1. 打开Unity的官网,查找文档 2. 查找本地安装的Unity文档 但是Unity官网上的文档,总是当前最新版本的文档 ...