锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于Java语言的Appium的使用讲义

时间:2023-02-20 10:00:00 1v69连接器

第一章 基于 Java 语言的 Appium 的使用
一、 Appium 简介
1 什么是 Appium
?
是一个移动端的自动化测试框架,可用于测试原生应用,移动网页应用和混合型应用,
而且是跨平台的。
?
本地应用是指使用 android ios sdk 编写应用;
?
移动网页应用是指类似于网页应用的网页应用 ios safari 应用或者 Chrome 应用或者类
浏览器览器;
?
介于混合应用 web-app native-app 之间的应用。
? Appium 是模拟人的操作进行功能自动化,通常用于功能测试和兼容性测试。
2 Appium 的设计
?
第一条采用底层驱动提供的自动化框架。
? IOS
?
苹果的 UIAutomation
? Android 4.2
?
谷歌的 UiAutomator
?
第二条使用底层驱动提供统一 API ,就是 WebDriver API
? WebDriver( 也称 Selenium WebDriver) 其实是一个 C/S 架构协议称为 JSON Wire
Protocol 。通过本协议,客户端可以发送任何语言 HTTP 请求给服
服务器。这意味着您可以自由选择您想要使用的测试框架和执行器,也可以使用任何
包含 HTTP 将客户端的库文件添加到您的代码中。换句话说, Appium WebDriver
不是技术测试框架,而是自动化库。
?
第三条:在 WebDriver 的基础上,扩展了一些适合移动端自动化协议的 API
3 Appium 的原理
核心是 web 服务器
它接受客户端的连接,接收客户端的命令,在手机设备上执行命令,然后通过
HTTP 的响应收集命令执行的结果。
Session
自动化的过程通常在 session 上下文中执行。
客户端初始化一个 session 会话,虽然不同的语言初始化的方式不同,但是他们
都要发送 POST/session 请求到服务器端,这些请求里面都会带有一个对象:
desiredCapabilities ,这个时候服务器端会启动自动化 session 然后返回一个 session
ID ,以后的命令都会用这个 seesion ID 去匹配。
Desired Capabilities
desired capabilities 对象其实是一个 key-value 的集合,里面包含了各种各样的信
息,发送到服务器端后,服务器解析这些信息就知道了客户端对哪种 session 兴趣,然后就会启动相应的 session
这里面的信息会影响着服务器端启动 session 的类型。比如你 platformName 的值
ios ,就是告诉服务器启动一个 ios session ,而不是 android seesion ,之后使
js 打开新窗口。
Appium Server
Appium 是一个用 Node.js 编写的 HTTP server ,它创建、并管理多个 WebDriver
sessions 来和不同平台交互,如 iOS Android 等。
Appium Clients
Appium 开始一个测试后,就会在被测设备(手机)上启动一个 server ,监听来
Appium server 的指令,每种平台(如 iOS Android )都有不同的运行和交
互方式,所以 Appium 会用某个桩程序“侵入”该平台,并接受指令,来完成测
试用例的运行。
客户端的概念不是我们传统意义上的客户端,这里客户端更好的理解是一个扩展
WebDriver 协议的库,你在用自己喜欢的语言写 case 的时候,将该语言扩展
WebDrvier 的库添加到你的环境中,你就可以理解这是个客户端。
4 Appium 的优势
Appium 在不同平台中使用了标准的自动化 APIs ,所以在跨平台时,不需要重新编译
或者修改自己的应用。
Appium 实现了真正的跨平台自动化测试。
Appium 支持 Selenium WebDriver 支持的所有语言,如 java Object-C
JavaScript
Php Python Ruby C# Perl 语言,更可以使用 Selenium WebDriver Api
Appium 支持任何一种测试框架。
二、 Appium 环境搭建
1 基础环境
安装 node.js
是一个 Javascript 运行环境( runtime environment )。
安装 .NET framework
软件名形如 NDP...
.net framework 是微软的开发程序的框架,用 .net 开发的程序就需要 .net 的环境来
支持才能运行。
安装 vc_redist
VisualC++ 的运行时库,包含了一些 VisualC++ 的库函数。
如果缺少,会导致 sdk 运行异常。
计算机中如果安装过,可以忽略此步。
安装 jdk 并配置环境变量
安装 android sdk
SDK software development kit )是一个 Android 开发环境。
需要 JDK
安装工具包和手机操作系统
安装工具包和测试所需要的操作系统
system image
armeabi
5 代、第 6 ARM 处理器,早期的手机用的比较多。
armeabi-v7a
7 ARM 处理器。
arm64-v8a
8 64 ARM 处理器。
x86
平板、模拟器用得比较多。
需要计算机是 Intel Cpu ,且支持 Intel-V
x86_64
64 位的平板。
设置 Android 环境变量
ANDROID_HOME e:\android\android-sdk
PATH ;%ANDROID_HOME%\platform-tools
adb.exe 所在目录
创建模拟器
使用 avd manager android virtual device )进行模拟硬件设备
选择合适的系统镜像
使用模拟器说明
虚拟机上运行模拟器可能导致运行缓慢
建议在真机系统行运行模拟器
打开 avd manager 创建模拟器
尽量选择低分辨率的“ Device
启动模拟器
上图中点击 Statrt ,即可启动
每次执行测试前,应确保模拟器处于运行状态
过程较慢,启动完成后,可查看、可关闭
安装 Appium
进行后续测试之前必须启动 Appium
appium 下载地址
https://github.com/appium/appium-desktop/releases/
2 Java+Appium 环境
在基础环境上继续安装。
eclipse 构建路径,导入如下包入库(注意版本需要匹配)
java-client-*.jar
下载地址
https://mvnrepository.com/artifact/io.appium/java-client
selenium-server-standalone-*.jar
testng-6.14.zip
TestNG 是一个开源自动化测试框架, TestNG 表示下一代。
用于设置测试前的准备代码,测试代码,测试完毕后的处理代码。
离线安装。
三、 使用 Java 语言编写测试脚本
1 创建测试类
测试类自行命名,只要符合标识符命名规则即可。
定义 AppiumDriver 对象
public class AppTest {
AppiumDriver driver;
} 2 @BeforeClass 注解
用于设定进入测试类后,在所有测试之前首先要执行的代码。
必须先创建 AppiumDriver 对象
@BeforeClass
public void setup() throws Exception {
// 创建 DesiredCapabilities 对象
// 指定测试平台
// 指定程序名称
// 指定启动页名称
}
创建 DesiredCapabilities 对象
DesiredCapabilities device=new DesiredCapabilities();
用于指定测试设备信息
指定测试设备平台
device.setCapability("deviceName" "Android Emulator");
使用的移动设备或模拟器的种类,如 iPhone Simulator iPad Simulator
Android Emulator Galaxy S4
device.setCapability("platformName" "Android");
指定使用哪个移动操作系统平台,如 iOS Android FirefoxOS
device.setCapability("platformVersion" "4.4.2");
指定移动操作系统版本
指定 app 程序包名,即被测程序名
device.setCapability("appPackage" "com.android.calculator2");
如何探测程序名
打开并进入软件
通过 \Android\android-sdk\tools\uiautomatorviewer.bat 去探测, package 后面的
文字即程序名。
cmd 窗口下出现 Unable to detect adb version 错误
检查 path 环境变量: PATH ;%ANDROID_HOME%\platform-tools
指定 app 启动页名称
device.setCapability("appActivity" ".Calculator");
启动页的名字,类似于窗口名。
打开 APP →执行 adb logcat>D:/log.txt → 胡乱的对 APP 做一些操作→
Ctrl+C 结束 adb 命令→打开 log.txt 文件,搜索: Displayed ,“ /” 左边的
是包名,右边是 Activity
启动 App
driver = new AndroidDriver(new URL("http://localhost:4723/wd/hub") device);
wd WebDriver 的缩写
hub 指主(中心)节点, selenium 分布式里的中心节点 3 运行测试
运行方式→ TestNG Test
注意启动 Appium
测试方法需要加 @Test 才能运行。
4 @AfterClass 注解
在所有测试之后再执行的代码。
退出 App
driver.quit()
@AfterClass
public void tearDown() {
driver.quit()
}
5 @Test( 属性 = ) 注解
指定要测试的方法,方法名只要符合标识符命名规则。
属性
description=" 测试描述 "
priority= 优先级,从 0 开始
timeout=?ms ,超时时间
dataProvider="Dataprovider 的名称或方法名 "
dataProviderClass= 产生测试数据的类
@Test
public void plus(){
}
6 识别与操作控件元素
driver.findElementById(resource-id 属性 )
driver.findElementByClassName(class 属性 ) driver.findElementBy?( 属性 ).sendKeys(" 数据 ")
driver.findElementBy?( 属性 ).clear()
driver.findElementBy?( 属性 ).click()
driver.findElementBy?( 属性 ).getText()
7 断言
7.1 Assert.assertTrue(boolean 型结果 )
写法类似于正则表达式,使用更方便。
Boolean rs=driver.findElementById(…).getText().contains( );
Assert.assertTrue(rs);
7.2 Assert.assertEquals( 实际结果,预期结果 )
用于测试期望结果的断言,即测试两个对象是否相等。
String actual= 实际结果 ;
String expected= 预期结果 ;
Assert.assertEquals(actual, expected);
String res=driver.findElementByClassName("android.widget.EditText").getText();
Assert.assertEquals(res "3");
8 模拟按键
driver.pressKeyCode(keycode)
必须使用 AmdroidDriver
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
9
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章