说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!
接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/104328480
三、使用 Java 语言编写测试脚本
8.模拟按键
-
driver.pressKeyCode(keycode)
✔ 必须使用 AndroidDriver
✔ 基本
★ KEYCODE_0 按键’0’ 7
★ KEYCODE_1 按键’1’ 8
★ KEYCODE_2 按键’2’ 9
★ KEYCODE_3 按键’3’ 10
★ KEYCODE_4 按键’4’ 11
★ KEYCODE_5 按键’5’ 12
★ KEYCODE_6 按键’6’ 13
★ KEYCODE_7 按键’7’ 14
★ KEYCODE_8 按键’8’ 15
★ KEYCODE_9 按键’9’ 16
★ KEYCODE_A 按键’A’ 29
★ KEYCODE_B 按键’B’ 30
★ KEYCODE_C 按键’C’ 31
★ KEYCODE_D 按键’D’ 32
★ KEYCODE_E 按键’E’ 33
★ KEYCODE_F 按键’F’ 34
★ KEYCODE_G 按键’G’ 35
★ KEYCODE_H 按键’H’ 36
★ KEYCODE_I 按键’I’ 37
★ KEYCODE_J 按键’J’ 38
★ KEYCODE_K 按键’K’ 39
★ KEYCODE_L 按键’L’ 40
★ KEYCODE_M 按键’M’ 41
★ KEYCODE_N 按键’N’ 42
★ KEYCODE_O 按键’O’ 43
★ KEYCODE_P 按键’P’ 44
★ KEYCODE_Q 按键’Q’ 45
★ KEYCODE_R 按键’R’ 46
★ KEYCODE_S 按键’S’ 47
★ KEYCODE_T 按键’T’ 48
★ KEYCODE_U 按键’U’ 49
★ KEYCODE_V 按键’V’ 50
★ KEYCODE_W 按键’W’ 51
★ KEYCODE_X 按键’X’ 52
★ KEYCODE_Y 按键’Y’ 53
★ KEYCODE_Z 按键’Z’ 54
✔ 功能键
★ KEYCODE_CALL 拨号键 5
★ KEYCODE_ENDCALL 挂机键 6
★ KEYCODE_HOME 按键 Home 3
★ KEYCODE_MENU 菜单键 82
★ KEYCODE_BACK 返回键 4
★ KEYCODE_SEARCH 搜索键 84
★ KEYCODE_CAMERA 拍照键 27
★ KEYCODE_FOCUS 拍照对焦键 80
★ KEYCODE_POWER 电源键 26
★ KEYCODE_NOTIFICATION 通知键 83
★ KEYCODE_MUTE 话筒静音键 91
★ KEYCODE_VOLUME_MUTE 扬声器静音键 164
★ KEYCODE_VOLUME_UP 音量增加键 24
★ KEYCODE_VOLUME_DOWN 音量减小键 25
✔ 控制键
★ KEYCODE_ENTER 回车键 66
★ KEYCODE_ESCAPE ESC 键 111
★ KEYCODE_DPAD_CENTER 导航键 确定键 23
★ KEYCODE_DPAD_UP 导航键 向上 19
★ KEYCODE_DPAD_DOWN 导航键 向下 20
★ KEYCODE_DPAD_LEFT 导航键 向左 21
★ KEYCODE_DPAD_RIGHT 导航键 向右 22
★ KEYCODE_MOVE_HOME 光标移动到开始键 122
★ KEYCODE_MOVE_END 光标移动到末尾键 123
★ KEYCODE_PAGE_UP 向上翻页键 92
★ KEYCODE_PAGE_DOWN 向下翻页键 93
★ KEYCODE_DEL 退格键 67
★ KEYCODE_FORWARD_DEL 删除键 112
★ KEYCODE_INSERT 插入键 124
★ KEYCODE_TAB Tab 键 61
★ KEYCODE_NUM_LOCK 小键盘锁 143
★ KEYCODE_CAPS_LOCK 大写锁定键 115
★ KEYCODE_BREAK Break/Pause 键 121
★ KEYCODE_SCROLL_LOCK 滚动锁定键 116
★ KEYCODE_ZOOM_IN 放大键 168
★ KEYCODE_ZOOM_OUT 缩小键 169
✔ 组合键
★ KEYCODE_ALT_LEFT Alt+Left
★ KEYCODE_ALT_RIGHT Alt+Right
★ KEYCODE_CTRL_LEFT Control+Left
★ KEYCODE_CTRL_RIGHT Control+Right
★ KEYCODE_SHIFT_LEFT Shift+Left
★ KEYCODE_SHIFT_RIGHT Shift+Right -
那么在脚本中,进行定位=按键元素并进行点击操作,可以换成使用pressKeyCode方法输入66则表示回车也可以进行计算器运行操作,需要注意的是要将声明的driver变量换成AndroidDriver对象才可以使用该方法
-
运行脚本,测试通过,没有问题
9.参数化
9.1 使用数组返回参数
9.2 使用参数
- 在脚本测试方法中调用getData获取二维数组数据,然后接收数据参数,对运算符进行判断赋值,替换脚本中的参数即可
- 运行脚本,测试全部通过
9.3 使用文件中的数据参数化
- 准备被测数据
- 编写代码,读取E盘下的calc.txt文本中的数据,并存到二维数组中进行返回给测试方法
- 运行脚本,用例执行成功,测试通过
9.4 定义获得参数的单独类和方法
- 新建一个类,将getData获取参数方法拷贝到这个新建的类中
- 然后需要在测试方法@Test注解中,声明dataProviderClass属性的值为新建的类
- 再次执行测试,也是没有问题的
10.生成测试报告
说明:在《功能自动化测试之TestNg测试框架(二)》该篇文章中详细说明TestNG两种测试报告(高端的和普通的),这里博主使用普通的
-
测试报告默认存储位置
✔ Java 项目名\test-output -
可以自己编写并优化 TestReport.java
-
测试类中添加监听器@Listeners({TestReport.class})即可
-
将测试报告文件TestReport.java拷贝到test包下
-
查看TestNG框架生成的test-output目录下的测试报告
-
回到测试类,添加指定生成测试报告文件注解
- 运行脚本
-
在test-output目录下打开生成的日期格式的html测试报告文件
四、adb 命令的使用
1.查看 adb 版本
- adb version
✔ android debug bridge 即 android 调试桥。
2.显示所有的设备
- adb devices
3.安装和卸载 App
- adb install .apk 文件名
✔ cmd 下输入
✔ apk 文件名即程序包名,程序名中不要使用汉字。
- 卸载 App
✔ adb uninstall 完整包名
★ 包名不是 apk 文件名
4.查看手机操作系统的版本号
5.显示设备中的包以及包的启动项
-
显示设备中所有的包
✔ adb shell pm list packages
-
查找某个包
✔ adb shell pm list packages | findstr 查找关键字
-
查找启动项
✔ adb shell dumpsys activity | findstr “关键字”
★ TaskRecord 后面的内容即为查询到的记录
✔ adb shell dumpsys window w | findstr \/ | findstr name=
★ 需要开启 app
★ 写法最优 -
在上一篇博客中,博主通过最反锁的方式获取计算器的启动项名,执行adb logcat>D:/log.txt,获取app日志,从日志查找关键字Displayed来获取启动项名,这样太麻烦了,现在使用第一种adb命令直接获取启动项名.Calculator
-
第二种方式查找出来的更优质,不会像以上那么多数据,但是需要在Android模拟器中打开计算器,命令中的/其实是多加了一个\进行反转义的
6.在指定设备中运行命令
- adb -s 设备名 shell 命令,因为目前连接的设备只有这个Android虚拟机,所以指不指定都无所谓的
7.adb 服务器的开关
- adb start-server
- adb kill-server
五、升级 Appium
说明:博主将在虚拟机中演示安装,在真机中进行操作演示,之前在《移动端自动化实战》中使用的都是高版本的
1.安装 nodejs、NDP、vc_redist、jdk
- NDP 至少 4.7 版。
- nodejs、vc_redist、jdk之前已经安装过了,就不安装了
2.安装 Android Studio
- android sdutio 是谷歌推出的一个 Android 集成开发工具。
- 现已将 SDK(software development kit)集成到 AS 中。
- 设置 Android 环境变量
✔ ANDROID_HOME:e:\android\android-sdk
★ 最好大写,否则可能不被 Appium 识别
✔ PATH:;%ANDROID_HOME%\platform-tools
★ adb.exe 所在目录
- 打开Android Studio后,进行自义定设置
- 选择主题
- 因为之前安装过Android SDK,所有直接下一步,如果不是升级SDK那么就进行下载安装并指定sdk目录
- 安装完成Android Studio也就是升级Android SDK后,打开Android Studio在主页上面点击Configure,可以看到AVD和SDK Manager
- 打开AVD Manager就能看到之前老版本中添加的虚拟机
- 打开SDK Manager就能看到之前老版本下载的Android操作系统
- 那么在AVD Manager中创建虚拟设备,跟之前老版本不一样了
- 点击下一步,因为在老版本只下载了Android 4.4操作系统以及armeabi-v7a的cpu,所以只能看到这一个
- 点击下一步,其他不变,切换到高级选项,设置内存为512,完成即可
- 创建完成如下,这都是使用的是Android自带的模拟器创建的虚拟设备
3.安装 Appium
- 默认安装到 C 盘,不可修改安装路径
- 打开appium后,可以看到界面跟之前老版本的明显区别,在菜单中可以选择切换语言
- 启动appium服务器
六、模拟器
说明:接下来的操作博主在本机电脑中进行演示
1.AVD 模拟器
- Android 自带模拟器。
1.1 安装测试所需要的操作系统
- Intel CPU
✔ 下载 Intel 的系统镜像,运行速度可比 ARM 快 10 倍。
- 下载 HAXM
✔ Intel x86 Emulator Accelerator,对运行加速
- HAXM博主之前已经安装过了,所以这里安装列表显示SDK以及intel 64位镜像文件,两个都需要同意
- 等待下载
- 安装完成,最好重启下计算机
1.2 创建模拟器
-
打开AVD Manager创建虚拟设备(手机虚拟机)
-
选择分辨率比较低的Nexus4
-
看到以下Recommended为推荐安装
-
切换到x86 Images为全面下载好的操作系统
-
以上可能出错提示/dev/kvm is not found
-
解决方法:安装低版本 HAXM
-
高级选项中设置内存大小为512M
-
启动该虚拟设备
-
瞬间开机,比在前面虚拟机中对比速度不是一个档次
1.3 编写测试脚本
1.3.1 查看设备信息
- 查看设备信息
✔ 查看设备名
✔ 查看系统版本
✔ 查看 App 名称和 App 启动项名称
1.3.2 使用uiautomatorviewer发现元素
- 使用 uiautomatorviewer 发现元素
✔ \Android\sdk\tools\bin\uiautomatorviewer.bat
1.3.3 使用appium发现元素
- 使用 appium 发现元素
✔ 打开 App
✔ 设置能力
添加监听设备的信息
- 点击start session开始会话,成功获取计算器元素
1.3.4 编写测试脚本
- 新建testNG类,编写如下代码
- 运行脚本,查看控制台打印结果
1.3.5 添加断言
2.夜神模拟器
2.1 硬件要求
- 建议 CPU 至少 2 核。
2.2 模拟器设置
- 开机后进行
- 模拟器分辨率设置
✔ 系统设置(齿轮图标)→高级设置→分辨率设置
★ 择“手机版”
★ 修改分辨率大小
- 查看系统信息
★ 更多操作(“三”状图标)→系统信息
2.3 创建模拟器
- 多开模拟器
✔ 创建模拟器后会自动下载并安装操作系统
- 下载完成后,不到100M,比Android自带的模拟器AVD Manager 小多了,AVD Manager动不动操作系统就是1个多G
- 同理设置手机版屏幕,然后将之前测试的计算器程序拖动到夜神模拟器中进行安装
2.4 原生 App、Web APP、混合型 App
-
NativeApp
✔ 即原生 App,基于本地操作系统运行。
✔ 原生 APP 访问和兼容的能力比较好,可以支持在线或者离线消息推送或是进行本地资源访问、摄像、拨号、蓝牙、功能的调取。
✔ 原生 APP 开发有许多的优势,如原生 APP 是针对不同的平台为用户提供不同的体验、可以节约宽带成本、访问本地资源、打开的速度更快并为用户提供最佳的用户体验和优质的用户界面等。
✔ 每一种移动操作系统都需要独立的 NativeApp 开发项目,iphone 版本、Ipad版本、安卓版本。每种平台都需要独立的开发语言,比如 Java(Android), Objective-C(iOS)等。
✔ 需要通过应用商店将原生 app 下载到手机上或移动终端上。以独立的应用程序运行,用户必须手动去下载并安装这些原生 App。用户可以自由地选择是否更新软件版本,所以会出现不同用户同时使用不同版本的情况。同时也会导致维护成本比较高。使用旧版本的用户无法体验新版本的完整功能。 -
Web App
✔ 基于手机浏览器运行。
✔ 类似于电脑上的网页。
✔ 可以通过 HTML、 CSS 或者 JavaScript 来进行 Web APP 的开发,是一种框架型APP 开发模式(HTML5 APP 框架开发模式),具有跨平台的优势,该模式通常由“HTML5 云网站+APP 应用客户端”两部分构成,APP 应用客户端只需安装应用的框架部份,而应用的数据则是每次打开 APP 的时候,去云端取数据呈现给手机用户。
✔ Web APP 更多是更多用于页面展示,侧重于简单的交互,只能使用有限的移动硬件设备功能。
✔ Web App 通过移动设备上的浏览器访问,软件更新只需要更新服务器就够了,用户层面不需要做任何操作。不需要安装客户端,可以节省手机终端的内存空间。
✔ Web App 的所有的用户都是用同样的版本,所有用户获得的功能都是相同的。版本更新比较方便,直接在服务器侧更新数据即可。一个功能做好了就能上线,一天更新几十次都毫无压力。如果客户端只是个浏览器,那一切都会变得很简单。 -
Hybrid App
✔ 现在比较流行是将原生 App 和 Web App 进行融合。
★ 应用大的框架是原生的,其他详细的内容就通过网页封装,这样做的好处就是在方便更新的同时,也能保证核心功能的交互体验。
✔ 主要以 JS+Native 两者相互调用为主,从开发层面实现“一次开发,多处运行”的机制,成为真正适合跨平台的开发。
✔ 目前已经有众多 Hybrid App 开发成功应用,比如百度、网易等知名移动应用,都是采用 Hybrid App 开发模式。