[技术博客] 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. python后端链接数据库-----MySQLdb

    连接数据库之前请先确认好以下事宜: 1.已经建议好相应的数据库 2.在数据库中已经建立了相应的表 3.已经安装了MySQldb模块 示例: import MySQLdb # 打开数据库连接 db = ...

  2. JavaScript 之 RegExp 对象

    RegExp 正则表达式对象 一.正则表达式 正则表达式:定义字符串的组成规则. 1.单个字符:[ ] 如:[a].[ab].[a-zA-Z0-9] 特殊符号代表特殊含义的单个字符: \d:单个数字字 ...

  3. 史上最全的整合第三方登录的工具JustAuth

    JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! 参考图例 授权gitee 授权github 授权weibo 授权钉 ...

  4. Linux基础:时间同步工具Chrony

    在Linux下,默认情况下,系统时间和硬件时间,并不会自动同步.在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰.硬件时间的运行,是靠Bios电池来维持,而系统时间,是用CPU t ...

  5. java实现快速排序,归并排序

    //1.快速排序 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc ...

  6. Pytorch Sampler详解

    关于为什么要用Sampler可以阅读一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系. 本文我们会从源代码的角度了解Sampler. Sampler 首先需要 ...

  7. Linux的sz和rz命令

    工作中需要在Linux和Windows之间传输文件时,一般使用winscp或者ftp工具来完成,最近才知道有sz和rz这两个命令,方便好用. sz  下载 从Linux下载文件到本机 , 在Linux ...

  8. 在github上优雅的搭建个人博客

    前言 啊啊啊---,经过差不多两天的持续摸索优化,个人博客算是初步完成了,现在自己看的效果还是非常不错的.这篇文章就是讲我怎么搭建一个这样的博客的.早在17年的时候就用hexo 结合github搭建过 ...

  9. eclipse解决中文字体太小问题(转载)

    最近新装了Win7,打开eclipse3.7中文字体很小,简直难以辨认.在网上搜索发现这是由于Eclipse 3.7 用的字体是 Consolas,显示中文的时候默认太小了.   解决方式有两种:一. ...

  10. day004-python运算符与基本数据类型

    一.运算符1.算术运算符:主要用于两个对象算数计算(加减乘除等运算)运算符: +:两个对象相加 -:得到负数或是一个数减去另一个数 *:两个数相乘或是返回一个被重复若干次的字符串 /:x除以y %:返 ...