首页 > 技术文章 > Appium介绍及第一个例子

djl-0628 2021-05-07 08:48 原文

Appium介绍

  1. appium是开源的移动端自动化测试框架
  2. appium可以测试原生的,混合的,以及移动端的项目
  3. appium可以测试ios,android应用
  4. appium是跨平台的,可以用在osx,windows以及linux桌面系统上

Appium基本原理

在andorid端,appium基于Webdriver协议,利用Bootstrp.jar,最后通过调用UiAutomator的命令,实现APP的自动化测试

UIAutomator测试框架是Android SDK自带的APP UI自动化测试Java库

另外由于UiAutomator对H5的支持有限,appium引入了chromedriver以及safadriver等来实现基于H5的自动化。

Appium在android端工作流

  1. client端也就是我们test script是我们的webdriver测试脚本
  2. 中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium Webdriver测试框架类似,Appium支持标准的webdriver JsonWireProtocol。在这里提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调用对应的框架响应操作。
  3. appium server会把请求转发给中间件Bootstrap.jar,它是用Java写的,安装在手机上。Bootstrap监听4723端口并接收appium命令,最终通过调用用UIautomator的命令来实现
  4. 最后Bootstrap将执行的结果返回给appium server
  5. appium server再将结果返回给appium client

第一个脚本示例

首先启动android模拟器

adb start server   #开启adb
adb dervices #查看你监听列表
adb shell "dumpsys activity |grep Focuse        #查看当前包名package和当前活动对象activity

启动Appium

点击左上角有'机器人'的按钮:选择你的android版本

点击右上角的‘三角’按钮启动Appium

通过Python编写自动化测试脚本

desired_caps是一个字典,用于在appium server与手机端建立会话关系时,手机端需要告诉服务端设备相关的一些参数,根据这些参数服务端可以做出相应的处理

#coding:utf-8
from appium import webdriver
#desired_caps是一个字典,负责启动服务端时的参数设置,启动session的时候是必须提供的
#Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情,比如:
#本次测试是启动浏览器还是启动移动设备?
#是启动android还是启动ios?
#启动android时,app的package是什么?
#启动android时,app的activity是什么?
desired_caps = {}
#你要测试的手机操作系统
desired_caps['platformName'] = 'Android'
#手机操作系统的版本
desired_caps['platformVersion'] = '4.2'
#使用的手机类型或模拟器类型
desired_caps['deviceName'] = 'Android'
#deviceName你的模拟器名字,就是在下载AVD的时候,你填写的,忘了的回头去找,或者在模拟器顶部会显示
#所运行的app包名
desired_caps['appPackage'] = 'com.android.calculator2'
#app运行的事件
desired_caps['appActivity'] = '.Calculator'
#启动打开app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
#根据元素定位,执行点击操作
driver.find_element_by_name("6").click()

driver.find_element_by_name("5").click()

driver.find_element_by_name("9").click()

driver.find_element_by_name("1").click()

driver.find_element_by_name("5").click()

driver.find_element_by_name("+").click()

driver.find_element_by_name("6").click()

driver.find_element_by_name("=").click()

driver.quit()

报错

会话已存在错误-----解决方案,关掉appium重启

画出来的这三个,是需要在脚本中正确填写的

执行效果

推荐阅读