搭建环境

此处介绍如何用facebook-wda搭建iOS设备的自动化测试环境。

先介绍facebook-wda的架构流程图:

开发环境概述

  • 开发环境概述
    • client=客户端
      • 你要测试的iOS设备,比如iPhone
        • iPhone中安装WebDriverAgentRunner-Runner
    • server=服务端=test manager=WebDriverAgent的服务
      • 需要在Mac中启动test manager

首次:初始化

先介绍初始化需要做的事情,其中:

  • 初始化 = 第一次 = 首次 = 只需要做一次,以后无需重复做

想要能自动化操作iPhone等iOS设备,需要

(1)先确保Mac环境OK

把相关后续要用到的工具都安装好:

brew update
brew uninstall --ignore-dependencies libimobiledevice
brew uninstall --ignore-dependencies usbmuxd
brew install --HEAD usbmuxd
brew unlink usbmuxd
brew link usbmuxd
brew install --HEAD libimobiledevice

再去安装wda的库:

pip install facebook-wda

(2)再去给iPhone中安装相关内容

先确保iPhone已正常连接:

把iOS设备(iPhone等)插入Mac后,用

idevice_id -l

确保可以找到iPhone设备。

再去给iPhone中安装:

  • 客户端 = APP = WebDriverAgentRunner-Runner
    • 用于配合Mac中的server端test manager

安装后的效果:

iphone_app_webdriveragentrunner_runner

此处长按变待删除,才能看到app全名是:WebDriverAgentRunner-Runner

iphone_app_webdriveragentrunner_runner_delete

给iPhone中安装WebDriverAgentRunner-Runner

核心思路,都是编译和安装app WebDriverAgentRunner-Runner到iPhone中:

  • 确保Mac中已安装XCode

下载代码:

git clone https://github.com/appium/WebDriverAgent.git

切换目录:

cd WebDriverAgent

可以看到核心的入口文件,即Xcode项目文件:WebDriverAgent.xcodeproj

关于如何编译和安装,则有2种方式:

  • 通过IDEXCode去编译和安装
    • Xcode->Product->Test
      • 注:准备工作包括
        • XCode打开WebDriverAgent.xcodeproj
        • 选择Target的APP是:WebDriverAgentRunner
        • 去选择Team,是自己(或别的可用的)开发者账号
        • 会触发自动Code Signing
        • 最后才是:Product->Test
  • 终端运行xcodebuild命令去编译和安装
    • Terminal中:运行xcodebuildtest

上述操作步骤,和后续的每次运行test manager的方式是一样的,所以细节放在后面介绍。

之后:每次调试之前

启动test manager服务

  • server=服务端=test manager=WebDriverAgent的服务
    • 需要在Mac中启动test manager
      • 2种方式
        • XCode
          • Xcode->Product->Test
            • xcode_test_serverurlhere
        • 终端
          • Terminal中:运行xcodebuildtest
            • 直接一步:
              xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=`idevice_id -l | head -n1`" test
              
            • 或分2步
              • 先获取iOS设备的UDID:
                CUR_UDID=$(idevice_id -l | head -n1)
                
              • 再运行
                xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=$CUR_UDID" test
                
            • 注:
              • 要在WebDriverAgent的目录中运行上述命令
              • idevice_id -l作用是列出当前连接到Mac中的所有iOS的设备(的UDID)
              • head -n1作用是获取第一个(iOS设备的UDID)

第一次:确保wda服务运行正常

  • 先确保输出正常的信息,包含:ServerURLHereUsing singleton test manager
      • wda_serverurlhere_example
    • 文字
      。。。
      Test Case '-[UITestingUITests testRunner]' started.
          t =     0.01s Start Test at 2020-02-20 10:50:59.818
          t =     0.01s Set Up
      2020-02-20 10:50:59.968359+0800 WebDriverAgentRunner-Runner[460:142725] Built at Feb 20 2020 10:50:08
      2020-02-20 10:51:00.119667+0800 WebDriverAgentRunner-Runner[460:142725] ServerURLHere->http://192.168.31.43:8100<-ServerURLHere
      2020-02-20 10:51:00.123946+0800 WebDriverAgentRunner-Runner[460:142853] Using singleton test manager
      

即表示正常启动了test manager= WDA的server

如何确认test manager服务已正常运行

  • 用浏览器等访问status端口
    • (用浏览器)打开test manager中显示的地址
    • 可以返回json状态信息
      • wda_status_response
        {
          "value": {
              "message": "WebDriverAgent is ready to accept commands",
              "state": "success",
              "os": {
                  "name": "iOS",
                  "version": "12.4.5",
                  "sdkVersion": "13.0"
              },
              "ios": {
                  "simulatorVersion": "12.4.5",
                  "ip": "192.168.31.43"
              },
              "ready": true,
              "build": {
                  "time": "Feb 20 2020 10:50:08",
                  "productBundleIdentifier": "com.facebook.WebDriverAgentRunner"
              }
          },
          "sessionId": "38289A64-E467-4458-A0F1-8A3B2A6AAECE"
        }
        
    • 如果已用(iproxy 8100 8100实现了)端口转发,则可以直接用localhost
  • 用代码测试

    import wda
    
    # for debug
    # Enable debug will see http Request and Response
    # wda.DEBUG = True
    
    c = wda.Client('http://localhost:8100')
    
    curStatus = c.status()
    print("curStatus=%s" % curStatus)
    
    • 确保能输出信息
      • 比如
        curStatus=AttrDict({'message': 'WebDriverAgent is ready to accept commands', 'state': 'success', 'os': {'testmanagerdVersion': 26, 'name': 'iOS', 'sdkVersion': '14.2', 'version': '12.3.1'}, 'ios': {'ip': '192.168.31.58'}, 'ready': True, 'build': {'time': 'Apr 10 2021 22:08:54', 'productBundleIdentifier': 'com.facebook.WebDriverAgentRunner'}, 'sessionId': None})
        
      • wda_output_status

说明服务启动正常,环境搭建正常了

results matching ""

    No results matching ""