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

[技术博客] 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的方式显示测试结果。

posted @ 2019-06-05 10:31  PureMan6  阅读(302)  评论(0编辑  收藏  举报