一、appium简介
1、appium是开源的支持移动测试的自动化测试框架,官网是appium.io
2、appium支持的平台:Android、iOS、某些windows应用
3、测试时支持的移动APP的类型
原生(native):实现技术(Android:java,iOS:objective-c)
web(html5)
混合(hybrid):既包含原生,也包含web
4、特点
开源
不限制客户端测试脚本的编程语言,支持Python、java、javascript、c/c++、ruby
主要采用c/s架构:服务器(appium server实现技术node.js),客户端(这里使用java版本,在eclipse中进行开发和运行)
5、工作原理
在eclipse中编写测试脚本并运行
发送给appium服务器端进行处理
由服务器控制被测试的移动端进行自动化操作
appium客户端与服务器的通信的协议JSON wired protocol
二、测试环境
1、appium服务器:appium desktop
2、appium客户端
eclipse:引入appium java-client包(java-client、selenium、commos-Apache开源项目,用于java原有类库的扩展)
Android SDK:安卓开发工具包(platform-tools)、adb、配置环境变量ANDROID-HOME(android sdk的路径)
JDK:配置环境变量JAVA-HOME(jdk的路径)
3、被测试的移动设备:模拟器或者真机
三、java语言知识点
创建项目、创建包、创建类、成员属性、成员方法、创建类的对象、静态属性、静态方法、封装、重载、引入包和类、异常处理、泛型
四、创建测试脚本
1、流程
创建java项目
创建包
创建java类
引入appium包
在java类中编写脚本(创建会话、测试操作、结束会话)
2、获取包名和界面(activity)名称
直接adb shell dumpsys activity|find "Focused"
先进入adb shell 再执行dumpsys activity|grep "Focused"
四、常用API
1、session
(1)截图
getScreenshotAs();
(2)横竖屏
getOrientation();
driver.rotate(ScreenOrientation.LANDSCAPE);
driver.rotate(ScreenOrientation.PORTRAIT);
(3)元素定位等待超时(隐式等待)
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
2、Devices
(1)不同app之间的切换
driver.startActivity(new Activity("包名","类名"));
(2)物理按键
driver.pressKey(new KeyEvent(AndroidKey.VOLUME_UP));
driver.pressKey(new KeyEvent(AndroidKey.VOLUME_MUTE));
driver.pressKey(new KeyEvent(AndroidKey.VOLUME_DOWN));
driver.pressKey(new KeyEvent(AndroidKey.BACK));
driver.pressKey(new KeyEvent(AndroidKey.HOME));
driver.pressKey(new KeyEvent(AndroidKey.POWER));
(3)打开通知栏
driver.openNotifications();
(4)获取手机当前时间
System.out.println(driver.getDeviceTime());
3、element
(1)工具
Android sdk下的uiautomator viewer
appium服务器自带的inspector工具
(2)方法
driver.findElement、driver.findElements
by id
by class name
by accessibility id
by xpath
(3)元素操作
点击 .click()
输入文本 .sendKey(“内容”)
清除文本 .clear()
(4)获取元素属性
获取元素的文本 .getText()
4、interaction
touch
(1)创建AndroidTouchAction对象
AndroidTouchAction ta1 = new AndroidTouchAction(driver);
(2)点击坐标点
ta1.tap(PointOption.point(110, 228));
(3)执行操作
ta1.perform();
(4)长按
ta1.longPress(PointOption.point(90, 320));
(5)滑动
ta1.moveTo(PointOption.point(450, 320));
ta1.moveTo(PointOption.point(90, 680));
ta1.moveTo(PointOption.point(450, 680));
(6)释放
ta1.release();
五、测试框架
自动化测试过程
需求分析
设计测试用例
将测试用例转化成自动化测试脚本
参数化(准备测试数据)
检查点(断言)
执行测试
生成测试报告