UiAutomator是用于自动化测试的,更明确的说,是可视化的自动化测试的,用来测试android应用的UI交互相关内容。
UiAutomator 2.0是UiAutomator的升级版,使用方式没有区别,会其中一个,就会另外一个。
UiAutomator 2.0是通过模仿用户的确切操作,根据能否完整完成整个预期操作流程,以及得到期望的结果,来判断是否完成整个测试流程。在使用时,首先有明确的交互,写好自动化测试用例后,可以确保后续代码开发维护中,自动化测试对应的交互不变。
UiAutomator 2.0的代码位置和使用:
代码我们放置于androidTest,通过写入APK或者生产jar包,然后用adb命令启动自动化测试。
在android工程里面src栏目下面有3大项目:main、test、androidTest 其中androidTest就是用来编写自动化测试用例的。
在此栏目下创建类,里面对于的测试方法用@test标注,方法名字也以test开头。将整个文件夹都run到手机里,通过adb命令的时候,里面的测试内容会先以类的名字,然后以方法的名字,字母排序依次运行。
如果需要写UiAutomator的测试内容,则首先要在libs里面添加UiAutomator的包,并且导入编译器,在写好一个又一个的test代码后,就可以通过adb命令运行了。
Adb命令的关键词是instrument,即adb shell am instrument,用来启动JUnit的Runner。
JUnit是指从Apache基金会下载的junit.jar里提供的一系列单元测试功能。这些功能运行本来在JDK之上,但在Android下已经没有了JDK,自然也无法运行JUnit。但是由于我们是利用JUnit编写单元测试。所以运行单元测试时,一定要用JDK来运行,利用java命令来启动JUnit的某个Runner。
android.test.InstrumentationTestRunner是用来启动测试的,其特征是不通过activity来启动应用,启动的是没有界面的应用,最终写法如下:
adb shell am instrument -w [packageName]/android.test.InstrumentationTestRunner
输入对于的packageName,通过instrument 启动InstrumentationTestRunner运行该packageName对应的测试内容。
以上是一个现成的测试怎么启动,以及将测试写在哪个地方。
测试是也在androidTest里面的任意类的以@test开头,且方法名为test开头的方法中。
那么应该怎么样来写这些测试方法呢。
最简单的UiAutomator测试用例分为4个部分,大多数的测试用例也是分为4个部分。
获取测试工具,找到交互目标,进行操作行为,判断操作结果。这么4步合起来完成一个交互行为的自动化测试。
1.获取测试工具:
这个是有套路的代码
UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
通过UiDevice获取其硬件系统,即手机本身。
之前提到过UiAutomator是模拟用户的行为来进行交互测试,就是将人工测试的内容自动化。那么一个人对交互的测试行为第一步,拿起手机,这个就是获取测试工具---手机。
UiDevice可以调用手机能给与的功能,寻找手机里的各种组件,模拟点击,滑动,拖拽等操作,对应实体按键,home键,back键等。
具体来说就是:
获取组件
findObject(BySelector)
用于点击和拖拽的:
click(int x,int y) 实现点击手机上对应的点
drag(int start X ,int start y ,int end X ,in tent Y,int steps) 从手机一个坐标拖拽到另一个指定坐标。
获取信息
getCurrentPackageName()获取当前活跃应用的包名。
getDisplayHeight()获取设备的显示高度,以像素为单位。经常用作,click和drag的坐标点计算
锁屏和唤醒
Sleep()锁屏,模拟电源键的一种情况。
WakeUp()唤醒。模拟电源键的另一种情况。
Isscreeon()检查屏幕是否唤醒。配合着上面两个方法使用,可以检查上面两个方法是否已经作用
实体按键
Pressback()
Presshome()
Pressmenu()
滑动
Swipe(int start X ,int start y ,int end X ,in tent Y,int steps) 从某一个位置滑动到另一个位置。
和drag的区别是,drag开始是长按后移动,Swipe点击后移动。