iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境

简介: iOS自动化测试方案的第四部分,涵盖了基础环境准备、iPhone虚拟机设置、MacOS虚拟机与iPhone真机的连接,以及扩展问题和代码示例,确保读者能够顺利完成环境搭建并进行iOS自动化测试。

一、基础环境准备

1、一台MacOS系统主机,可以是macmini、macbook(air\pro)、mac一体机,咱们主打一个经济实惠:MacOS系统虚拟机
2、一台iOS系统真机,俗称iphone
3、anaconda创建python3虚拟环境

1.1、MacOS虚拟机

需要安装软件包管理器:Homebrew

# 在命令行安装HomeBrew并安装其他iOS测试必要的命令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

1、brew install node;这个是为了安装npm、appium客户端准备的

brew install npm # 已经安装了node,就已经携带了npm
在这里插入图片描述
npm install -g cnpm --registry=https://registry.npm.taobao.orgappiu
在这里插入图片描述

2、安装成功,检查版本号

node -v
npm -v
cnpm -v

效果截图如下
在这里插入图片描述

3、安装服务端(相对于真机):npm install -g appium
在这里插入图片描述

4、安装appium检测医生:cnpm install -g appium-doctor

appium-doctor检查环境
在这里插入图片描述

5、使用本机与苹果iOS设备的服务进行通信的库,类似于安卓的adb命令

ios-deploy 一个不需要用Xcode安装和调试应用的命令行工具。需要一个有效的开发者证书,需要 Xcode 7以上的版本。终端输入命令进行安装:
ios-deploy、ideviceinstaller 类似 android 的 adb; 是 Appium 底层用到的工具之一,用于获取 iOS 设备信息。
libimobiledevice 是一个跨平台的软件库 ; 不依赖任何已有的私有库,不需要越狱。应用软件可以通过这个开发包轻松访问设备的文件系统、获取设备信息,备份和恢复设备,管理 SpringBoard 图标,管理已安装应用,获取通讯录、日程、备注和书签等信息
ideviceinstaller 是一个与iOS设备的installation_proxy交互的工具,允许安装、升级、卸载、存档、还原和列举已安装或存档的app。此工具用于在真机上运行测试,默认是都安装的。

brew install ios-deploy
brew install libimobiledevice
#  主要用于获取设备udid、安装app、卸载app、获取bundleid
brew install ideviceinstaller

idevice_id获取设备uuid
在这里插入图片描述

更多命令请移步:Mac如何安装使用libimobiledevice,ideviceinstaller(类似adb ) - 知乎 (zhihu.com)
在这里插入图片描述

6、启动appium服务
在这里插入图片描述

二、iPhone虚拟机

在MacOS虚拟机安装Xcode的时候,iOS开发工作者就可以使用其携带的iphone虚拟机进行调试开发了,WebDriverAgent
在这里插入图片描述

1、打开Xcode开发工具,前面已经build过了,现在通过product-test将它安装到iphone虚拟机或真机
在这里插入图片描述

2、安装成功标识:build successded
在这里插入图片描述

3、然后本地就可以直接访问:http://localhost:8100/status
在这里插入图片描述
command+shift+G;输入/usr/local/bin/ 可以找到appium快捷命令,右键,显示源文件

4、如果打不开,请在终端进行端口转发:iproxy 8100 8100,通过safari访问http://127.0.0.1:8100/status

该命令用于将手机的端口映射到电脑上的端口,前面的8100是映射到mac电脑的端口,后面是手机wds启动的监听端口,如果映射失败,则安装brew install usbmuxd
在这里插入图片描述

三、MacOS虚拟机连接iphone真机

usb连接真机,vmware虚拟机会检测usb设备,选择连接到虚拟机确定即可
在这里插入图片描述

1、这时Xcode工具构建安装包到设备中就出现真机选项了
在这里插入图片描述

2、先构建进行testing
在这里插入图片描述

3、构建成功
在这里插入图片描述

4、在控制台出现服务已经启动,并暴露端口
在这里插入图片描述

四、扩展&&问题

4.1、如果appium启动app失败,可能是appium driver没有安装xcuitest插件
appium driver install xcuitest
Releases · appium/appium-desktop (github.com)

在这里插入图片描述

如果不想通过github下载安装WebDriverAgent源码,可去Appium Server目录中找到appium-webdriveragent
在访达中选中Appium server右键选择显示包内容:
/Applications/Appium Server GUI.app/Contents/Resources/app/node_modules/appium/node_mudoles/appium-webdriveragent
在这里插入图片描述

1、找到对应的目录,可Xcode工具编辑构建wda到真机或虚拟机
在这里插入图片描述

2、也可以通过xcodebuild命令构建项目到真机
在这里插入图片描述

3、与Xcode工具编辑工具是一样的步骤,在设置开发者账号的时候,提示的是BundleId需要唯一
在这里插入图片描述

4、找到Build Settings设置BundleId
在这里插入图片描述
再回到Siging Capabilities页面下Signing Certificate Development下面的感叹号就不存在了

4.2、下载并安装Appium服务端,inspector元素定位器

启动appium server GUI或者appiun服务端
在这里插入图片描述

有时候并不想打开Xcode工具,想通过命令行来构建app到真机
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination ‘id=真机的uuid’ test
在这里插入图片描述

命令行构建iOS应用报错,是依赖路径不正确,需要切换目录即xcodebuild需要指向Xcode安装执行路径
xcode-select --switch /Applications/Xcode.app/Contents/Developer

再次执行会提示输出MacOS电脑密码
在这里插入图片描述

会出现权限问题,需要root权限,所以在命令行前加sudo,会提示password输入mac密码即可;
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination ‘id=真机的uuid’ test
密令安装第一次,test会失败,但是iOS真机已经安装好了WebDriverAgent应用,只需要进入手机设置–>通用–>VPN与设备管理信任开发者APP账号

4.3、下载appium-inspector

npm install app-inspector -g
在这里插入图片描述

在下载目录双击dmg安装appium-inspector
在这里插入图片描述

拖住应用图标移动到Application文件夹,双击Appliction进入文件夹可以看到安装的应用已经有图标了,这个可以当安装目录用的,不然很多初学者无法找到应用入口
在这里插入图片描述

正常双击应用打开是会有提示的,就是验证不通过,认为你的软件应用有问题,
在这里插入图片描述

在Application中双击系统偏好设置,找到安全性与隐私
在这里插入图片描述

点击仍要打开,对,你不让我打开,我偏要打开
在这里插入图片描述

最后一次,确认我要打开了,退后。。。
在这里插入图片描述

启动中
在这里插入图片描述

再看看就已经启动好了
在这里插入图片描述

安装ideviceinstaller
brew install ideviceinstaller
在这里插入图片描述

复制iOS参数,在JSON Representation,上面输入真机wda启动的端口,8100,如果iproxy转发就填如转发端口
在这里插入图片描述

可以点击Save As将此刻的配置保存起来,免得下次丢失需要重新录入,再点击start session开启app应用的元素找茬之旅;
在这里插入图片描述

Save As之后,在Saved Capabillty Sets设置中查看,可选择直接启动
在这里插入图片描述

默认source是应用元素,而点击session information可以选择语言,知道它的初始启动参数是如何写的。
在这里插入图片描述

以上就是iOS自动化测试的开发环境搭建过程。

4.4、代码示例:
import unittest
from appium import webdriver
from time import sleep

from appium.webdriver.common.appiumby import AppiumBy



class appiumSimpleTezt(unittest.TestCase):

    def setUp(self):
        self.desired_capabilities = {
   
   
            "platformName": "ios",
            "platformVersion": "16.6",
            "deviceName": "iPhone 8P",
            "udid": "3a174cf4dd652dab19a9adb40470959db5325b70",
            "bundleId": "com.byd.BYDi",
            "webDriverAgentUrl": "http://127.0.0.1:8100",
            "noReset": True,  # true不重置app应用,false需要重启app应用  如果已经登录,则不需要重新登录授权
            "usePrebuiltWDA": True,
            "useXctestrunFile": True,  # 暂时没发现其他用途
            "skipLogCapture": True,  # 会影响automationName参数
            "automationName": "XCuiTest"
        }

        self.driver = webdriver.Remote(
            command_executor='http://127.0.0.1:4723',  # /wd/hub
            desired_capabilities=self.desired_capabilities
        )

    def test_SignIn(self):
        next_view_button = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "我的")
        next_view_button.click()

        sleep(1)

        login_button = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "每日签到")
        login_button.click()

        sleep(1)

        login_button = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "SignIn back icon")
        login_button.click()

    def tearDown(self):
        self.driver.quit()


if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(appiumSimpleTezt)
    unittest.TextTestRunner(verbosity=2).run(suite)
相关文章
|
6天前
|
开发工具 Android开发 Swift
安卓与iOS开发环境对比分析
在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统无疑是主角。它们各自拥有独特的特点和优势,为开发者提供了不同的开发环境和工具。本文将深入浅出地探讨安卓和iOS开发环境的主要差异,包括开发工具、编程语言、用户界面设计、性能优化以及市场覆盖等方面,旨在帮助初学者更好地理解两大平台的开发特点,并为他们选择合适的开发路径提供参考。通过比较分析,我们将揭示不同环境下的开发实践,以及如何根据项目需求和目标受众来选择最合适的开发平台。
19 2
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
探索软件测试的未来:自动化与人工智能的融合
在本文中,我们将一起踏上一段激动人心的旅程,探索软件测试领域的未来趋势。从手工测试的繁琐到自动化测试的便捷,再到人工智能(AI)技术的引入,我们将揭示这些变革如何影响测试流程、提升效率并减少错误。文章将深入浅出地分析自动化测试工具的进步和AI技术如何赋能软件测试,预测未来可能的发展路径,并提供一些行业案例作为参考。无论你是软件测试领域的新手,还是寻求进阶知识的资深人士,这篇文章都将带给你新的启示和思考。
|
3天前
|
机器学习/深度学习 物联网 大数据
软件测试的演变与未来:从传统方法到自动化革命
在数字化时代的浪潮下,软件测试作为保障软件质量的重要环节,其方法和工具经历了翻天覆地的变化。本文将带领读者穿梭时光隧道,探索软件测试的发展历程,从手工测试的繁琐与局限性,到自动化测试的高效与精准,再到未来可能迎来的智能化与集成化趋势。通过深入浅出的分析,我们将揭示如何通过不断进化的软件测试技术,提升软件开发的效率和质量,确保在这个快速变化的时代中,软件产品能够稳健前行。
|
4天前
|
IDE Java Android开发
安卓与iOS开发环境的差异及其对开发者的影响
在数字时代的浪潮中,移动应用成为人们生活的延伸。两大操作系统——安卓与iOS,如同两座技术高峰,各自占据着半壁江山。本文将探索这两个平台的开发环境差异,并讨论这些差异如何塑造开发者的编程习惯与职业选择。我们将从工具和语言、用户界面设计、系统架构、市场定位以及开发社区和资源五个方面进行比较,旨在为开发者提供一份实用的指南,帮助他们在不断变化的技术世界中,找到适合自己的发展路径。
13 3
|
5天前
|
jenkins 测试技术 持续交付
软件测试中的自动化策略
【9月更文挑战第8天】在软件开发的海洋里,自动化测试如同一艘航船,带领我们穿越波涛汹涌的测试任务。本文将揭开自动化测试策略的神秘面纱,带你领略其背后的智慧与力量。从工具的选择到脚本的设计,再到持续集成的实施,每一步都是对效率和质量的追求。让我们一同启航,探索自动化测试如何提升我们的工作效能,并确保软件产品的稳健前行。
|
7天前
|
机器学习/深度学习 敏捷开发 大数据
软件测试的演变之旅:从传统方法到自动化革命
在数字时代的浪潮下,软件测试作为保障产品质量的关键一环,经历了从手工测试到自动化测试的重大转变。本文将探讨这一演变背后的驱动力、所面临的挑战以及未来的发展趋势,为读者揭示软件测试领域的深层次变革。
|
4天前
|
机器学习/深度学习 人工智能 测试技术
探索软件测试的未来:AI与自动化的融合之路
【9月更文挑战第9天】随着技术的飞速发展,软件测试领域正经历着一场革命。本文将深入探讨人工智能(AI)和自动化技术如何重塑软件测试的未来,提升测试效率,确保软件质量。我们将从AI在测试中的应用、自动化测试的优势,到两者结合带来的创新方法进行详细分析,旨在为读者提供一条清晰的路径,以理解并利用这些先进技术优化测试流程。
|
8天前
|
监控 测试技术 项目管理
软件测试中的自动化策略:提升效率与准确性
【9月更文挑战第5天】在软件开发的海洋中,自动化测试犹如一艘高效精确的航船,引领着项目向着质量的彼岸。本文将从浅入深地探讨自动化测试的核心价值、实施步骤及常见问题,旨在为读者提供一套清晰的自动化测试实践指南。
|
6天前
|
移动开发 Android开发 Swift
安卓与iOS开发环境对比:选择合适的平台
在数字时代的浪潮中,移动应用开发成为技术前沿的热门领域。两大主流操作系统——安卓和iOS,各自拥有独特的开发环境与生态。本文将深入探讨这两种平台的开发特点,帮助开发者根据自己的需求和资源选择最合适的开发路径。从工具支持到用户群体,从编程语言到市场分布,我们将一一剖析,为即将踏上移动开发之旅的朋友们提供一盏明灯。
|
13天前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
40 4