0e4373261511471bb205b2a6a1bcec9a

Appium是什么

Appium是一款用于测试MobileApp的开源自动化测试框架。它是通过使用WebDriver[Facebook开源]协议来测试iOS,Android,WindowsApp的。WebDriver与Selenium有着千丝万缕的联系,很多方法的使用都很相似。

Appium支持多种语言。

>>Ruby

>>Python

>>Java

>>JavaScript

>>PHP

>>C#

>>Objective-C

根据先后顺序,官方的支持力度也不同。Ruby官方支持的最好(Appiumconsole就是使用Ruby开发的)。

Appium iOS测试环境搭建方法

Appium分为UI版本与命令行版本两种。不同在于UI版本的自带有图形界面,用户体验相对于命令行版本好。

常见依赖库的搭建

1.安装libimobiledevice

9b2e8e02d5904b46891d1d971a9db20b

2.安装 appium-doctor

代码1:npm install appium-doctor -g

appium-doctor --ios // appium-doctor 安装完成后执行,查看 iOS 相关配置是否成功。如果存在红叉情况,安装对应的工具就可以了。

代码2:![appium_doctor_test.png](https://upload-images.jianshu.io/upload_images/2159939-f8cbccea99fc3bda.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

3.下载 WebDriverAgent

>>进入下载后的 WebDriverAgent 文件夹

>>执行 ./Scripts/bootstrap.sh

>>直接用Xcode打开 WebDriverAgent.xcodepro 文件

>>配置WebDriverAgentLib和WebDriverAgentRunner的证书

0043c147504f4c9fae6eca2c32312178
1ff7d0626bef426a9b8059b4a5439b44
85301ab841344b88aa86020cc898fd8e

>>连接并选择自己的iOS设备,然后按Cmd+U,或是点击Product->Test

>>运行成功时,在Xcode控制台应该可以打印出一个Ip地址和端口号

命令行版本的搭建

1.安装 Appium

fc6440a07c1148e69986036a62783341

2.替换 WebDriverAgent

使用上面修改过的 WebDriverAgent 替换/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver 此处的WebDriverAgent

UI 版本的搭建

1.下载Appium Desktop

2.替换 WebDriverAgent

使用上面修改过的 WebDriverAgent 替换/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/ 此处的WebDriverAgent

开发环境搭建

1.安装 Appium Python 环境搭建

e097e7e849634529a64c25fda1feb373

安装 Appium 的时候遇到的错误

  1. 未能载入软件包“WebDriverAgentRunner”,因为它已损坏或丢失必要的资源。 请尝试
a3bc59c948a046d0a3bf2b92d32fda03

2.AssertionError: Message: An unknown server-side error occurred while processing the command. Original error: Unknown device or simulator UDID: '*'

cfa98a137fc4436690c0781526164709

3.Could not initialize ios-deploy make sure it is installed (npm install -g ios-deploy) and works on your system

d3574ffd84de4fbca9c926890b966e81

4.npm install -g ios-deploy 失败问题的解决方法

8a504cef8bec4b26b84722224e599bd8

Appium 使用

Appium-Desktop 的使用

>>准备一个 ipa 或者 app 包。

>>运行Appium-Desktop

>>开启start server

32fe5231cddb4ebd87d0387244c9ffbb

>>点击start new session

8197807583f54404bbd4f9379c88a073

>>在 Desired Capabilities 中输入相关的参数后点击Start Session

689ff2272a97492daaacc0f856a1388e

>>运行成功后,会弹出一个控制界面,在该界面中可以控制手机上正在运行的程序

>>点击界面上方中心的录制按钮,可以将你对手机端的操作代码化。生成的代码可以直接放入指定的代码中去执行。

12b064b29fcf476d9ac8aaa63dd3ce5e

>>在 UI 界面上我们可以查看App UI 层次结构,可以选择对应的控件。可以查看选中的 UI 控件的各种值(下图右下角所示),也可以对选中的空间进行点击,输入值,清空值操作

255283914be54ac3bd35571b131caa93

>>如上图所示。我们还可以针对需要使用坐标系统(不通用。因为不同的设备分辨率不同)点击,手势操作等。

关于在代码中如何使用 Appium

本例中使用 Python 为主要部分。

1.连接 Appium

path = "/Users/jack/Desktop/xx/xx/xx.ipa"

desired_caps = {

'app': os.path.abspath(path),

'platformName': 'iOS',

'platformVersion': '11.2.2',

'deviceName': 'iPad',

'udid': 'xxx',

'showIOSLog': 'true'

}

command_executor = 'http://127.0.0.1:4723/wd/hub'

appium_driver = webdriver.Remote(command_executor=command_executor, desired_capabilities=desired_caps)

```

**appium_driver** 就是我们需要的接入点。

2.获取当前页面层次结构

dd25e8cb5b644d0aa961797f7fc5d357

page_source 是 XML 文本。例子解析 XML 之后就可以看到整个页面的布局。

注意: 论坛中有说过当页面数据过多的时候,可能会出现超时错误问题。

3.查找指定的 UI 元素

查找 UI 元素的方式有很多种。

>>AccessibilityIdentifier 方式查找。推荐

7e229c917f3a4c4d86e03cb146a55279

>>AccessibilityIdentifier 方式查找。不推荐,但是必须的时候还是要用

0f491fa0d82f4df3ba815edbf953ccdf

4.获取查找到的控件的值

4145039246614877855aa13f9a48034e

5.已经查找到的控件点击,输入值,清空值操作

c693c02250a04e9ebdee4645d3d29013

6.长按操作

7.简单的手势滑动操作

5ca042b87d904f179eed5f87e714a16e

8.等待页面消失

try:

# 在 60s 每隔 0.5s 检查是否 view 消失

WebDriverWait(driver, 60, 0.5, ElementNotVisibleException).until_not(lambda x: x.find_element_by_accessibility_id(view).is_displayed())

except TimeoutException, e:

print("time out message")

raise e

9.等待页面出现

try:

# 在 60s 每隔 0.5s 检查是否 view 出现

WebDriverWait(driver, 60, 0.5, ElementNotVisibleException).until(lambda x: x.find_element_by_accessibility_id(view).is_displayed())

except TimeoutException, e:

print("time out message")

raise e

iOS 设备获取对应的控件的方法

对于 iOS 端,WebDriver 使用了苹果提供的 Accessibility Inspector 来获取页面层次。因此,在编写代码的时候,需要设置

iOS 代码使用 Appium 建议条件满足isAccessibilityElement为 true。同时accessibilityIdentifier建议有值。这样查找的时候在编写代码会更加便捷。否则就需要如下的方式去查找:

driver.find_element_by_xpath("//XCUIElementTypeApplication[@name="LLL"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeCollectionView/XCUIElementTypeCell")

上面的代码是去查找一个 tableview cell。当然我们可以使用 UI 工具获取到。但是当页面 ui 层次变更了,估计改动的时候会有想死的感觉了。

iOS 设备使用 Appium 的条件

  1. 运行 Mac 系统的电脑。
  2. 提供一个可以安装到真机上的 ipa 或者 app 包。
  3. Mac 系统建议安装 Xcode 环境。

iOS 设备使用 Appium 的限制

  1. 同一台电脑只能运行一个测试实例(没有研究出来多个测试)
  2. 测试 case 编写者必须清楚的知道自己在找什么,需要到哪里去找。
  3. Appium 只能针对已知的数据进行测试。对于未知的数据无法进行测试。例如:服务器端更新 server 的数据而没有通知 app 端。app 端仍然按照旧的数据去测试判断,就会出现错误。而这种错误不是 app 本身的错误。而由人测试的时候这里就会有主管判断为什么出现这种问题,中断去查找问题来源。
  4. 测试速度慢。目前来看可以接受
  5. 每次测试的时候都是重新安装 app。因此无法进行升级类的测试[对应的 install、uninstall api 不可用]
  6. 快速点击操作不可用,个别因为用户手速过快点击导致的问题会无法测试。因为Appium API 时延比较高。
  7. 设备横屏(在 iPad 上测试)的时候无法进行测试
  8. Scrollview/TableView/CollectionView 滚动的问题(swap 手势模拟有的时候很慢。一分钟都没反应完)。
  9. 关于通知推送,点击没有查到对应的测试资料。
  10. 内嵌,外部跳转 web 页面的测试没有验证过。
  11. Crash Log 以及运行时候的 log(设备的)无法收集。
  12. Emoji 表情输入没研究出来。目前看只能通过键盘点击达到这个效果,但是不方便。
  13. 因为时延较高,查找类页面在输入值的时候,应该清空页面显示,然后根据返回值显示。这部分不好测试。容易出现纰漏。

关于测试结果反馈

Appium 只是一款测试 Mobile 端 app 的框架。其本身的操作仅限于针对 App 进行测试,不具备生成测试结果,发送邮件等功能。如果想要该功能,需要在调用 Appium 的语言环境上思考。

由于 Demo 中使用的是 Python,因此使用 HTMLTestRunner 生成 html 格式的测试报告是最合适的方式。并且根据 Python 编程发送邮件给指定的用户。

  1. 在 case 中。如果断言错误,即已知结果不是想要的结果,可以使用断言使测试生成断言错误。这样就可以生成失败的测试 case 报告。
  2. 出现 Error 的时候有可能是由于 Python 代码本身不严谨造成的错误。因此当有 Error 错误的时候,首先考虑是否是 Python 代码的问题,其次考虑 App 错误。
  3. 没有错误,测试成功。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐