上海网站建设公司哪家好?,ai软件下载,中国互联网平台,网站管理员是干什么的由于公司的产品坐落于不同的平台#xff0c;如ios、mac、Android、windows、web。因此每次有新需求的时候#xff0c;开发结束后#xff0c;留给测试的时间也不多。此外#xff0c;一些新的功能实现#xff0c;偶尔会影响其他的模块功能正常的使用。 网上的ios自动化方面的…
由于公司的产品坐落于不同的平台如ios、mac、Android、windows、web。因此每次有新需求的时候开发结束后留给测试的时间也不多。此外一些新的功能实现偶尔会影响其他的模块功能正常的使用。 网上的ios自动化方面的内容也是少之又少。由于本人对ios自动化初次接触花了两天的时间到处找文章才逐渐入了门。本文也是站在小白的角度从0到1搭建ios自动化测试环境。
框架选型
查了很多资料关于iOS自动化的框架有很多。但是支持Python的没有几个。
如
UIAutomation 是苹果提供的 UI 自动化测试框架使用 JavaScript 编写。 XCTest 是一个可以提供各个层次的测试的框架比如单元测试自动化测试性能测试等。 KIF 使用未公开的 Apple API私有 API这对于测试目的而言是安全的基于第三方 iOS UI 的单元测试框架所以可以做项目的单元测试也可以做 UI 集成测试。但缺点是运行较慢。且需要掌握Objective-C 语言。 Frank 是IOS 开发环境下一款实现自动测试的工具Xcode 环境下开发完成后通过 Frank 实现结构化的测试用例其底层语言为 Ruby作为一款开源的 iOS 测试工具在国外已经有广泛的应用。但是国内相关资料却比较少。其最大的优点是允许我们用熟悉的自然语言实现实际的操作逻辑。
还有一些云测试平台因为都是收费的这里也就不说了。 综上所述appium框架支持多种语言编写自动化测试用例且我之前使用过。因此我选择了它。
appium驱动iOS测试原理
XCUITest是苹果开发的一个做IOS自动化测试的框架需要了解些Swift等iOS编程知识WebDriverAgent是Facebook开发的一个iOS自动化测试工具先来看下面的这张原理图 WDA在Client创建了一个Server在手机端安装了一个叫作WebDriverAgentRunner 的一个应用这个应用会接收来自 Server 的指令并连接底层的XCTest.framwork让 XCTest.framwork 调用苹果API来操作手机进行自动化 而appium是把WebDriverAgentRunner 给集成进去了因此实现了appium的跨平台能力 通过上图我们了解到 Appium 很粗暴的把整个 WebDriverAgent 直接集成到自己的项目里然后通信机制就走 WebDriverAgentAppium 其实就提供了一个 Client 端的作用。所以 iOS 9.3 系统之后自动化测试核心是 WebDriverAgentAppium 就提供了一个 Client 端来写脚本和发送指令。
Appium 自动化架构模式可以用一个抽象的架构表示就是下面这样的 从图中可以看出
Client 端是 Appium 之前本身提供的 Server 端是WebDriverAgent 和 Instruments Appium 直接把 WebDriverAgent 整个集成进来Instruments 是为了支持 iOS 9.3 之前的系统 最右边是一个手机 之前 Server 是和 bootstrap.jar 通信这里 WebDriverAgent 提供了 WebDriverAgentRunner 类似 bootstrap.jar 的功能WebDriverAgent与之通信 WebDriverAgentRunner 是一个应用Client 和 server 运行了之后WebDriverAgentRunner 会被装到手机上这个应用会接收来自 Server 的指令并连接底层的 XCTest.framwork并告诉 XCTest.framwork 操作手机进行自动化。
关于 WebDriverAgent
实现了一个 server通过 server 可以远程控制 iOS 设备启动应用、关闭应用、点击、滚动等操作 通过连接 XCTest.framework 调用苹果的 API 执行动作 支持多个设备同时进行自动化 Appium、Macaca 已经集成。 但是 WebDriverAgent 仅仅只提供了一个 server和 inspect 进行元素定位并没有像 Appium 一样提供 java 或 python 的 Client 端去写脚本脚本执行的时候发送指令给 server然后去运行。WebDriverAgent 要求你自己去实现 Client 端即拿 Java/ Python 的 WebDriver 库进行封装然后发送指令。所以 WebDriverAgent 其实就类似于 Appium server就只是一个 server。
环境搭建
硬件环境
一台Mac、一部iphone真机或虚拟机、一条数据线
实际测试都是在真机上完成的所以整篇文章都以真机为准。
自动化开发环境
开发环境xcode, Command Line Tools, ,Pycharm, Python3, pip, setuptools
其他环境homebrew, node, npm, carthage, appium, python-client, appium-doctor,
xcode,
电脑打开App Store搜索即可下载安装
Command Line Tools
为了配置appium环境我们需要安装Xcode Command Line Tools。 下载完成后双击已下载的 .dmg 进行安装检验 Command Line Tools 是否安装成功。
xcode-select --install # 查看是否安装 xcode-select: error: command line tools are already installed, use Software Update to install updates(错误命令行工具已经安装请使用“软件更新”安装更新)
Python,
官网下载一步下一步安装即可
pip setuptools,
下载setuptools https://pypi.python.org/pypi/setuptools https://pypi.python.org/pypi/pip 打开cmd 进入setuptools解压目录输入python setup.py install 进入pip解压目录输入python setup.py install 安装好后打开终端输入pip如提示不是内部命令则将python安装目录下Scripts目录添加到环境变量Path中。
Homebrew,
Homebrew是一个包管理软件它可以使我们更容易地安装其他一些软件终端输入安装 /usr/bin/ruby -e $(curl –fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) 检查homebrew是否安装 brew -v //检查homebrew是否安装 brew list //查看已安装列表 brew update //更新Homebrew
Node NPM,
安装 brew install node14 查看node版本 node -v 配置国内源 npm config set registry https://registry.npm.taobao.org/
Carthage,
Carthage项目依赖管理 类似于 java 的 maven 主要是 WebDriverAgent 使用WebDriverAgent 是用它做项目依赖的 终端输入 brew install carthage 更新carthage : brew upgrade carthage 重新安装 : brew reinstall carthage 安装完成后检查一下是否安装成功 carthage version
Appium,
安装appium-server https://github.com/appium/appium-desktop
Appium-Doctor,
检查appium安装是否成功的工具集指令 安装 appium-doctor npm install appium-doctor -g 检查 iOS环境是否安装成功 appium-doctor --ios iOS 真机调试环境配置
webdriverAgent
在github上下载最新webdriverAgent代码 https://github.com/appium/WebDriverAgent 下载依赖暂时可跳过下面操作没报错可忽略 cd WebDriverAgent mkdir -p Resources/WebDriverAgent.bundle sh ./Scripts/build.sh
执行完成后打开WebDriverAgent.xcodeproj文件。
配置开发者账号所有target建议都配置一遍。 连接并选择自己的ios设备 窗口栏-Product-Destination-Device
选择WebDriverAgentRunner 窗口栏-Product-Test 如果有这个报错前往手机设置-通用-描述文件与设置管理授信一下APP就OK了。 然后再次运行Test就可以在Xcode控制台看到下面的输出信息 浏览器打开访问上面的地址/status网页返回以下内容说明OK了。 有些iphone手机通过手机的IP和端口号还不能访问此时需要将手机的端口转发到mac上终端运行以下命令
iproxy 8100 8100 将手机的8100端口映射到电脑的8100端口上。这样我们就能通过访问电脑的8100端口来访问到手机了。
网上查到说“为了持续集成”使用如下方法在代码中启动wda不需要在xcode启动。
desiredCapabilities.setCapability(useNewWDA, true); 这种方法我暂时没有试过特此记录有空再试。
appium-desktop (server) 打开下载的appium desktop
点击 start server 因为新版本的 inspector 和 appium-desktop 分离了我们需要去github下载inspector。 下载地址
安装后打开。在 Desired Capabilities 中输入相关的参数后点击Start Session { platformName: ios, appium:deviceName: 我的iPhone, appium:platformVersion: 15.7.1, appium:bundleId: com.safety.authon, appium:udid: 0a1386121527af8447cb5ac06de1d35cec8ea798 } 以上信息可通过xcode-菜单栏-Window-Devices and Simulator获取。
运行成功后会弹出一个控制界面在该界面中可以看到手机运行程序的布局元素。 自动化用例编写 打开pycharm新建一个项目。
安装依赖
pip install selenium pip install Appium-Python-Client 编写自动化测试用例代码 #! /usr/bin/env pyhton
# -*- coding:utf-8 -*-
# author:jeff.xie
# datetime:2023/11/22 16:23
# software:PyCharm# iphone app 启动成功实战测试用例from appium import webdriver
from time import sleepfrom appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import Bydriver webdriver.Remote(command_executor http://127.0.0.1:4723/wd/hub,
desired_capabilities {
platformName: ios,
appium:deviceName: iPhone Jeff,
appium:platformVersion: 16.5.1,
appium:bundleId: welab.bank.mobile.stage,
appium:udid: 00008030-000A09C81A43802E
})
sleep(10)ele driver.find_element(AppiumBy.IOS_PREDICATE,name 用戶名稱)
ele.send_keys(qatest101)
driver.find_element(By.ID,)
sleep(2)# 参考 External Libraries.site-packages.appium.webdriver.common.appiumby
class AppiumBy(By):IOS_PREDICATE -ios predicate stringIOS_UIAUTOMATION -ios uiautomationIOS_CLASS_CHAIN -ios class chainANDROID_UIAUTOMATOR -android uiautomatorANDROID_VIEWTAG -android viewtagANDROID_DATA_MATCHER -android datamatcherANDROID_VIEW_MATCHER -android viewmatcher# DeprecatedWINDOWS_UI_AUTOMATION -windows uiautomationACCESSIBILITY_ID accessibility idIMAGE -imageCUSTOM -custom#参考seleniumclass By:Set of supported locator strategies.ID idXPATH xpathLINK_TEXT link textPARTIAL_LINK_TEXT partial link textNAME nameTAG_NAME tag nameCLASS_NAME class nameCSS_SELECTOR css selector import unittest import os from appium import webdriver from time import sleep class appiumSimpleTezt (unittest.TestCase): def setUp(self): app_path /Users/jx/appiumSimpleDemo/build/Release-iphoneos/appiumSimpleDemo.app app os.path.abspath(app_path) self.driver webdriver.Remote( command_executor http://127.0.0.1:4723/wd/hub, desired_capabilities { platformName: ios, appium:deviceName: 我的iPhone, appium:platformVersion: 15.7.1, appium:bundleId: com.safety.authon, appium:udid: 0a1386121527af8447cb5ac06de1d35cec8ea798 } def test_push_view(self): next_view_button self.driver.find_element_by_accessibility_id(entry next view) next_view_button.click() sleep(2) back_view_button self.driver.find_element_by_accessibility_id(Back) back_view_button.click() def tearDown(self): sleep(1) # self.driver.quit()
if __name__ __main__: suite unittest.TestLoader().loadTestsFromTestCase(appiumSimpleTezt) unittest.TextTestRunner(verbosity2).run(suite)
以上就是ios自动化环境的过程记录下来。也方便自己回头来看也方便新人学习少走弯路。
以上内容参考了如下网站 https://github.com/zhshijie/appiumSimpleDemo http://appium.io/docs/en/about-appium/getting-started/ https://www.cnblogs.com/crstyl/p/14690895.html https://github.com/appium/WebDriverAgent