首页 > 其他分享 >IOS自动化测试框架appium

IOS自动化测试框架appium

时间:2024-01-31 10:44:17浏览次数:26  
标签:appium iOS IOS install 自动化 安装 WebDriverAgent

    由于公司的产品坐落于不同的平台,如ios、mac、Android、windows、web。因此每次有新需求的时候,开发结束后,留给测试的时间也不多。此外,一些新的功能实现,偶尔会影响其他的模块功能正常的使用。

网上的ios自动化方面的内容也是少之又少。由于本人对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 直接集成到自己的项目里,然后通信机制就走 WebDriverAgent,Appium 其实就提供了一个 Client 端的作用。所以 iOS 9.3 系统之后自动化测试核心是 WebDriverAgent,Appium 就提供了一个 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 操作手机进行自动化。

环境搭建------硬件环境

一台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 node@14
查看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

编写自动化测试用例代码,

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(verbosity=2).run(suite)

以上就是ios自动化环境的过程,记录下来。也方便自己回头来看,也方便新人学习少走弯路。

 

参考:https://www.cnblogs.com/rmticocean/articles/16876479.html

https://www.cnblogs.com/guowenrui/p/16990067.html

标签:appium,iOS,IOS,install,自动化,安装,WebDriverAgent
From: https://www.cnblogs.com/klb561/p/17998729

相关文章

  • 修改主板bios开机logo
    1. 下载AFUWIN5.12.zip,ChangeLogov5.2.0.22.zip   2.准备新logo,大小按原大小800*600可以jpg可以bmp3.操作:①原rom:打开AFUWINGUIx64.EXE程序 点击存储保存桌面原rom(建议多复制一个)②换logo图片:打开ChangeLogo64.exe程序 点击loadimage选择原......
  • 如何对混合日志进行自动化解析
    本文分享自华为云社区《【AIOps】日志分析领域难题:如何对混合日志进行自动化解析?》,作者:DevAI。AIOps智能运维,是指将AI应用于运维领域,基于已有的运维数据通过AI的方式来解决传统运维没办法解决的问题;本文聚焦在AIOps领域的日志解析子课题。现有的日志解析器(logparser)在实际......
  • 17个工作必备的Python自动化代码
    您是否厌倦了在日常工作中做那些重复性的任务?简单但多功能的Python脚本可以解决您的问题。 我们将通过上下两个篇章为您介绍17个能够自动执行各种任务并提高工作效率Python脚本及其代码。无论您是开发人员、数据分析师,还是只是希望简化工作流程的人,这些脚本都能满足您的需求。 ......
  • 如何安全的在一个已有的git分支上,自动化的切换到另外一个分支指定commit
    如何安全的在一个已有的git分支上,自动化的切换到另外一个分支指定commit?下面是一种干净的安全的可以自动化的做法:清理本地脏数据gitcheckout.gitclean-df.将commit重置到HEADgitreset--hardHEAD重置子git模块gitsubmoduleforeach--recursivegitreset--har......
  • IOS七层模型
    ISO七层模型的分层和作用7应用层<--------------应用层协议------------>应用层APDU6表示层<--------------表示层协议------------>表示层PPDU5会话层<--------------会话层协议------------>会话层SPDU4传输层<--------------传输层协议----------......
  • 2023最新版克魔助手抓包教程(9) - 克魔助手 IOS 数据抓包
     引言在移动应用程序的开发中,了解应用程序的网络通信是至关重要的。数据抓包是一种很好的方法,可以让我们分析应用程序的网络请求和响应,了解应用程序的网络操作情况。克魔助手是一款非常强大的抓包工具,可以帮助我们在Android和iOS平台上进行数据抓包。本篇博客将介绍如何使......
  • iOS App审核状态和审核时间管理指南
    引言对于一款开发完成并准备上架的iOS应用程序来说,通过苹果公司的审核是非常重要的一步。苹果公司会对应用程序进行严格的检查,以确保应用程序的质量和安全性。本文将介绍iOS应用程序审核的流程和时间,希望能够帮助开发者更好地了解和处理审核过程中的问题。添加图片注释,不超......
  • VMware Aria Automation 8.16 - 多云基础架构自动化平台
    VMwareAriaAutomation8.16-多云基础架构自动化平台Multi-CloudInfrastructureAutomationPlatform请访问原文链接:https://sysin.org/blog/vmware-aria-automation/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现代基础架构自动化平台VMwareAriaAutomati......
  • 【UI自动化基础】元素定位
    元素定位元素定位的定义元素定位是指查找元素HTML代码的过程元素HTML代码指的是从开始标签到结束标签之间的所有代码find_element定位一个元素find_elements定位多个元素元素定位方法by_id当元素具有id属性时,可以通过by_id定位元素方法:driver.find_element_by_id('id......
  • axios实现,在一个极短时间内,请求同一个接口,若传参完全一样,则使用浏览器中的缓存中的上
    axios实现,在一个极短时间内,请求同一个接口,若传参完全一样,则使用浏览器中的缓存中的上次的值。同时,上次的值应该在指定时间内可以自动清除。请写一个axios适配器。实现上述功能。在axios中,我们可以利用浏览器的缓存机制(HTTP缓存)来实现这个需求。不过,浏览器的HTTP缓存主要依赖于服......