Appium iOS 测试环境搭建

Created
Jan 13, 2021 7:50 AM

安装 Appium

安装 Appium 本体

  1. 安装 node.js,并确保 npm 可用。这里使用 homebrew,做开发的应该都装了。
  2. brew install node
  3. 安装检查工具
  4. npm install -g appium-doctor
  5. 然后运行 iOS 测试的环境检查
  6. appium-doctor --ios

    我这边的话,是有几个问题需要解决

    image
  7. 先看这个 Error running xcrun simctl。结合下面的描述,应该是没检查到我安装的 xcode。执行下面的命令
  8. sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

    检查一下,没有问题

    image
  9. 然后再看这个 Carthage was NOT found!。缺了这个软件,那就用 brew 直接安装。
  10. brew install Carthage
  11. 最后再运行一次检查,没有问题了。一些 additional 软件包我就不装了。
  12. image
  13. 最后直接从这里下载 Appium 即可

安装附加功能

真机调试驱动

新版本中已经不需要额外安装 libimobiledevice 了,此项可以忽略。具体文档可以看下面的链接

ios-deploy

虽然 libimobiledevice 和 ios-deploy 说是都不用自己装了,但还是需要这个工具查看下手机里安装的 App 的包名,后面需要。

brew install ios-deploy

准备测试配置信息

后续测试中,需要我们准备三个信息:设备udid、xcodeOrgId和xcodeSigningId

  1. udid 可以在这里找到
  2. image
  3. 按照下面的文档,还需要添加 xcodeOrgId 和 xcodeSigningId
  4. 可以在证书信息里找到

    image

    这个 组织单位

    image

使用 Appium 进行测试(真机)

准备测试用 app

这里推荐 Apple 官方提供的 UIKitCatalog

  1. 在下面这个链接里下载项目文件
  2. 编译并运行
  3. image
  4. 在 Products 里找到 .app 文件,留作备用
  5. image

手动 Build WebDriverAgent

💡

如果使用免费开发者账号,由于证书7天过期,所以这一步的部分步骤每周要做一次,具体看下面的步骤

每周要做
  1. 打开 Window - Devices and Simulators
  2. image
  3. 把上周调试用的三个 app 在这里全部删掉
  4. image
  5. 打开 DriverAgentRunner 项目,并重新执行下面的命令。然后重新信任开发者
  6. xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test -allowProvisioningUpdates
  1. 找到项目路径,我这边是在这里 Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent
  2. 进入该目录,分别执行下面两条命令更新依赖
  3. mkdir -p Resources/WebDriverAgent.bundle 

    如果 Appium 版本低于 1.21.0,还需要执行下面的这条命令

    ./Scripts/bootstrap.sh -d
  4. 双击项目文件打开项目
  5. image
  6. 更改 WebDriverAgentLib 的包名,随便起,改个不一样的
  7. image

    然后选择一个签名的 Team

    image
  8. 类似的,更改 DriverAgentRunner 的包名,随便起,改个不一样的
  9. image

    然后选择一个签名的 Team

    image
  10. Product - Build
  11. image

    显示 Build Success 即可

如果出现错误,就把IntegrationApp 也进行相同的操作

测试是否正常

  1. 插上手机后,在 Xcode 里选择目标设备
  2. image
  3. 然后在终端执行下面的命令,注意替换 udid 为手机的
  4. xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test
  5. 如果出现类似下面的错误,执行
  6. xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'id=<udid>' test -allowProvisioningUpdates
    image
  7. 如果出现下面的错误,WebDriverAgent 可能已经安装到手机上了,但是开发者尚未被信任
  8. image

    找到 App,点开,出现如下提示

    image

    在设置 - 通用 - 描述文件与设备管理 里信任开发者

  9. 然后第一次可能会卡住,重启手机,重启 xcode,重来一次就行
  10. image
  11. 手机上安装了 WebDriverAgentRunner 即可
  12. image

进行测试

以上环境弄好后,就可以使用 Appium 调试了

  1. 首先打开 Appium,启动服务后点击右上角的放大镜打开配置界面
  2. image

    然后就可以看到这个测试实际上是依赖 json 配置信息运行的

    image
  3. 从这里可以获取一个模板,然后改一下设备名和系统版本
  4. 这里放一个我用的

    {
      "platformName": "iOS",
      "platformVersion": "14.3",
      "deviceName": "iPhone SE (2nd generation)",
      "automationName": "XCUITest",
      "udid": "xxxxx",
      "app": "/Users/flintylemming/Downloads/Appium Test/UIKitCatalog.app",
      "xcodeOrgId": "xxxxxx",
      "xcodeSigningId": "iPhone Developer"
    }
    

    根据自己实际情况修改即可

  5. 配置好后,点击 Start Session。在这个页面里就可以看到画面的元素信息,比如当前选中的这个 View 按钮的 xpath 就能看到,后面写 Java 代码控制的时候用得上。
  6. image

    注意,Apple Silicon 设备可能无法在这个画面里正常显示手机内容

    image

    控制台提示如下错误

    [HTTP] <-- GET /wd/hub/session/e74f430d-b956-43f6-be15-8cd2a65e666f/screenshot 500 1033 ms - 273
    [HTTP] 
    [iProxy@00008030:8100] The connection has been closed

Java 项目实战

普通 Maven 项目

实际项目中建议准备一个简易的 Maven 项目,这样在遇到问题是可以快速排查是否是环境上出了问题。具体是怎么写的可以看这个视频

基本上就是一个配置 capability 的 base class

image

和一个进行操作的 class

image

这边有按照 AccessibilityId 找元素的,有按照 XPath 找元素的,都可以在刚才 Appium 那里面通过监视元素插到对应的值。

搭配 TestNg 使用

可以参考这个视频

简单来说就是 TestNg 有 @BeforeSuite、@BeforeTest、@Test、@AfterTest 和 @AfterSuite。他会按照这个顺序执行你写到里面的代码,然后返回执行结果。你可以再拿这个结果返回给前台什么的。