精华内容
下载资源
问答
  • ios 自动化

    2019-10-08 00:52:54
    有时间整理下ios自动化: 思考以下问题: 1、ios如何做自动化; 2、window下如何做ios自动化; 3、ios自动化框架选择; window下如何做ios自动化:  下载unlocker和mac镜像  下载unlocker链接,这个...

    有时间整理下ios自动化:

    思考以下问题:

    1、ios如何做自动化;

    2、window下如何做ios自动化;

    3、ios自动化框架选择;

    window下如何做ios自动化:

      下载unlocker和mac镜像

      下载unlocker链接,这个unlocker是我改变部分源码后,成功让vmware识别mac镜像

      停止虚拟机服务后,以管理员身份运行win-install.cmd,虚拟机即可识别苹果系统的驱动

      

      

     

       mac安装过程中报错

      

      编辑VMX文件,在 smc.present = "TRUE" 后面添加了 smc.version = 0 

      

       剩下的按引导即可成功安装mac系统

      

    ios自动化框架选择

      选择ios框架为appium

     

    appium安装环境

      安装homebrem

      /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

      安装node

      brew install node

      安装依赖的库

      npm install -g ios-deploy  #如果是iOS10以上的系统才需要安装
      npm install appium-doctor -g
      brew install carthage

      终端运行appium-doctor --ios查看是否配置成功

      安装appium

      npm install -g appium@1.8.1

      或者

      npm install -g cnpm --registry=https://registry.npm.taobao.org

      cnpm install -g appium@1.8.1

     

      appium-desktop连接真机

      安装这两个才可以连接真机

      brew install libimobiledevice
      brew install ideviceinstaller
     
      修改webDriverAgent    
         修改文件WebDriverAgentLib和WebDriverAgentRunner自动登录状态和bundle identifler即可
      修改后证书成功安装在ios真机上,即可运行appium代码

    转载于:https://www.cnblogs.com/xiaochou1024/p/9989278.html

    展开全文
  • IOS手机录屏 IOS自动化

    2017-07-17 08:47:21
    IOS录屏 支持IOS自动化
  • iOS自动化测试】 本课程为iOS自动化测试系列课程,课程采用最新版本的Appium,和全新的XCUITest框架进行教学,涵盖iOS自动化测试环境搭建、使用Appium进行iOS自动化测试的原理深度剖析、常用API、iOS常用手势、iOS...
  • appium ios自动化This tutorial is to start/set up your environment for iOS Automation. Here, we will be doing it with an Appium desktop instead of appium as an npm package. 本教程旨在启动/设置iOS自动化...

    appium ios自动化

    This tutorial is to start/set up your environment for iOS Automation. Here, we will be doing it with an Appium desktop instead of appium as an npm package.

    本教程旨在启动/设置iOS自动化的环境。 在这里,我们将使用Appium桌面而不是将appium作为npm软件包来执行此操作。

    为什么选择Appium Desktop? : (Why Appium Desktop? :)

    Appium Desktop is an app for Mac, Windows, and Linux which gives you the power of the Appium automation server in a beautiful and flexible UI. It is a combination of a few Appium-related tools:

    Appium Desktop是适用于Mac,Windows和Linux的应用程序,可在美观而灵活的UI中为您提供Appium自动化服务器的功能。 它是一些与Appium相关的工具的组合:

    • A graphical interface for the Appium Server. You can set options, start/stop the server, see logs, etc… You also don’t need to use Node/NPM to install Appium, as the Node runtime comes bundled with Appium Desktop.

      Appium服务器的图形界面。 您可以设置选项,启动/停止服务器,查看日志等。您还不需要使用Node / NPM来安装Appium,因为Node运行时与Appium Desktop捆绑在一起。
    • An Inspector that you can use to look at your app’s elements (Safari/Chrome browser, native or hybrid app), get basic information about them, and perform basic interactions with them. This is useful as a way to learn about Appium or as a way to learn about your app so you can write tests for it.

      您可以使用该检查器查看应用程序的元素(Safari / Chrome浏览器,本机或混合应用程序),获取有关它们的基本信息以及与它们进行基本交互。 这对于了解Appium或了解应用程序非常有用,因此您可以为其编写测试。

    系统要求 : (System Requirements :)

    1. Mac OS High Sierra (10.13) (or higher)

      Mac OS High Sierra(10.13)(或更高版本)
    2. A 64 bit CPU

      64位CPU

    系统设置 : (System setup :)

    Xcode (Xcode)

    Xcode is an integrated development environment (IDE) for macOS containing a suite of software development tools developed by Apple for developing software for macOS, iOS, iPadOS, watchOS, and tvOS. You can install it from here.

    Xcode是用于macOS的集成开发环境(IDE),其中包含由Apple开发的一套软件开发工具,用于开发用于macOS,iOS,iPadOS,watchOS和tvOS的软件。 您可以从这里安装它。

    家酿 (Homebrew)

    Homebrew is a package management software that will make it much simpler for us to install a few other software. You can install it from here.

    Homebrew是一个软件包管理软件,它将使我们更容易安装其他软件。 您可以从这里安装它。

    迦太基 (Carthage)

    Carthage builds your dependencies and provides you with binary frameworks, its needed by the WebDriverAgent. Use the following command to install :

    迦太基构建您的依赖关系,并为您提供WebDriverAgent所需的二进制框架。 使用以下命令进行安装:

    brew install carthage

    ios部署 (ios-deploy)

    ios-deploy is a utility to install and debug iPhone apps from the command line, without using Xcode. In terminal, run the following command :

    ios-deploy是一个实用程序,可从命令行安装和调试iPhone应用程序,而无需使用Xcode。 在终端中,运行以下命令:

    brew install ios-deploy

    ideviceinstaller (ideviceinstaller)

    ideviceinstaller is a tool to interact with the installation_proxyof an iOS device allowing to install, upgrade, uninstall, archive the iOS applications. In terminal, run the following command :

    ideviceinstaller是与iOS设备的installation_proxy交互的工具,可用于安装,升级,卸载和归档iOS应用程序。 在终端中,运行以下命令:

    brew install ideviceinstaller

    ios_webkit_debug_proxy (ios_webkit_debug_proxy)

    Appium uses this tool to access web views on real iOS devices. In terminal, run the following command :

    Appium使用此工具访问真实iOS设备上的Web视图。 在终端中,运行以下命令:

    brew install ios-webkit-debug-proxy

    可选: Node JS和npm (Optional : Node JS and npm)

    Installing node is completely optional beacuse node runtime comes bundled with Appium Desktop.

    安装节点完全是可选的,因为Appium Desktop捆绑了节点运行时。

    Node is a javascript run-time environment and npm is the node package manager. In terminal, run the following command :

    Node是一个javascript运行时环境,npm是节点包管理器。 在终端中,运行以下命令:

    brew install node

    Appium桌面 (Appium Desktop)

    You can install the Appium desktop from here. You can read more about appium desktop from the following link : https://github.com/appium/appium-desktop

    您可以从此处安装Appium桌面。 您可以通过以下链接阅读有关appium桌面的更多信息: https : //github.com/appium/appium-desktop

    After you install all the above mentioned dependancies, we are good to start with the setting up the WebDriverAgent.

    安装上述所有依赖关系后,我们最好从设置WebDriverAgent开始。

    WebDriverAgent (WebDriverAgent)

    WebDriverAgent is a WebDriver server implementation for iOS that can be used to remote control iOS devices. It allows you to launch & kill applications, tap & scroll views or confirm view presence on a screen. This makes it a perfect tool for application end-to-end testing or general purpose device automation. It works by linking XCTest.framework and calling Apple's API to execute commands directly on a device. WebDriverAgent is developed and used at Facebook for end-to-end testing and is successfully adopted by Appium.

    WebDriverAgent是用于iOS的WebDriver服务器实现,可用于远程控制iOS设备。 它允许您启动和终止应用程序,点击并滚动视图或确认屏幕上是否存在视图。 这使其成为用于应用程序端到端测试或通用设备自动化的理想工具。 它通过链接XCTest.framework并调用Apple的API来直接在设备上执行命令来工作。 WebDriverAgent是Facebook开发并用于端到端测试的,并已被Appium成功采用。

    In short WebDriverAgent is Mobile JSON wire protocol through which you can communicate with the iOS Device.

    简而言之,WebDriverAgent是移动JSON有线协议,您可以通过该协议与iOS设备进行通信。

    Before we continue with WebDriverAgent setup, make sure you have the Apple developer Accout. Without the developer account we may not be able to build the WebDriverAgent successfully.

    在继续进行WebDriverAgent设置之前,请确保您具有Apple开发人员Accout 。 没有开发者帐户,我们可能无法成功构建WebDriverAgent。

    Steps to build WebdriverAgent :

    生成WebdriverAgent的步骤:

    1. Lauch the appium desktop application.

      播放appium桌面应用程序。

    2. Start the server.

      启动服务器。

    3. Connect your iOS Device to your system through USB.

    3. 通过USB将iOS设备连接到系统。

    4. Click on the Appium inspector icon.

    4. 单击“ Appium检查器”图标。

    Image for post
    Appium Inspector Icon
    Appium Inspector图标

    You will see a screen that looks like this :

    您将看到一个类似如下的屏幕:

    Image for post
    Appium Inspector
    阿皮督察

    5. Choose “Automatic Server”.

    5. 选择“自动服务器”。

    6. Prepare the desired capability based on your device configuration :

    6. 根据您的设备配置准备所需的功能:

    {
    "deviceName": "iPhone",
    "platformName": "iOS",
    "platformVersion": "13.6",
    "automationName": "XCuiTest",
    "udid": "<YOUR-DEVICE-UDID>",
    "bundleId": "<YOUR-APPLICATION-BUNDLE-ID>",
    "xcodeOrgId": "<YOUR-XCODE-ORG-ID>",
    "xcodeSigningId": "iPhone Developer"
    }

    To get the xcodeOrgId follow the steps below :

    要获取xcodeOrgId,请按照以下步骤操作:

    1. Go to https://developer.apple.com/account

      转到https://developer.apple.com/account

    2. Login with you Apple developer account.

      使用您的Apple开发人员帐户登录。
    3. Click Membership in the sidebar.

      点击边栏中的会员资格。
    4. Your Team ID appears in the Membership Information section under the team name.

      您的团队ID出现在团队名称下方的“成员资格信息”部分。

    Once you have the desired capability JSON ready :

    一旦具备所需的功能,就可以准备JSON了:

    1. Click on the edit icon in the JSON Representation section.

      单击“ JSON表示形式”部分中的编辑图标。
    2. Replace “{}” with the JSON that you have prepared.

      将“ {}”替换为您准备的JSON。
    3. Click on the save button.

      点击保存按钮。
    4. Your screen should look like this now :

      屏幕现在应该如下所示:
    Image for post
    Appium Inspector with Desired Capabilites
    具有所需功能的Appium检查器

    You can save these capabilites by clicking on the Save As button, before we continue with the next steps.

    您可以通过单击另存为按钮来保存这些功能,然后再继续下一步。

    7. Click on the “Start Session” button, but there are going to be some failures lets fix them as we continue with the tutorial.

    7. 单击“开始会话”按钮,但是随着我们继续本教程,将会出现一些故障让我们修复它们。

    8. Notice you appium terminal, you will see some lines like below

    8. 注意您的appium终端,您将看到如下几行

    [WebDriverAgent] Beginning test with command 'xcodebuild build-for-testing test-without-building -project
    /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -derivedDataPath /Users/bio-india/Library/Developer/Xcode/DerivedData/WebDriverAgent-alwvnomvwrdtzoaxbbkniqrpcdpp -destination id=13435433-000514680A83002E IPHONEOS_DEPLOYMENT_TARGET=13.6 -xcconfig /var/folders/g3/4bgm1zrj74z3chm8vwwrkpjw0000gp/T/2020719-9679-167r3lc.acxv/appium-temp.xcconfig GCC_TREAT_WARNINGS_AS_ERRORS=0 COMPILER_INDEX_STORE_ENABLE=NO' in directory '/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent'

    9. From the above lines you can get the path to the WebDriverAgent.xcodeproj which is :

    9.从以上几行中,您可以获取WebDriverAgent.xcodeproj的路径,该路径是:

    /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj

    10. Open a terminal and run the following command :

    10. 打开一个终端并运行以下命令

    open /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj

    Now you will see Xcode starting with your WebDriverAgent.xcodeproj

    现在您将看到以WebDriverAgent.xcodeproj开头的Xcode

    Once the Xcode is launched, add you developer credentials to Xcode with the steps below :

    启动Xcode后 ,请按照以下步骤将开发人员凭据添加到Xcode中:

    1. Click on the Xcode Menu > Preferences, Alternatively you can also use the below shortcut to go to the preferences

      单击Xcode菜单> 首选项 ,或者,您也可以使用以下快捷方式转到首选项

    Command + ,

    2. Click on the Accounts tab

    2.单击帐户选项卡

    3. Click on the “+” icon and provide your developer credentials.

    3.单击“ +”图标并提供您的开发人员凭据。

    Once you have added your account you can then “Download your manual profiles”.

    添加帐户后,您可以“下载手动配置文件”。

    11. Configuring your WebDriverAgent

    11. 配置您的WebDriverAgent

    Now that, we have opened the WebDriverAgent project in the xcode and we have added our developer credentials to the Xcode. Lets configure the WebDriverAgent.

    现在,我们已经在xcode中打开了WebDriverAgent项目,并将开发人员凭据添加到了Xcode中。 让我们配置WebDriverAgent。

    Your screen should look something like this now (You may have some errors as well, which will get fixed with the below steps) :

    您的屏幕现在应该看起来像这样(您可能还会出现一些错误,将通过以下步骤进行修复):

    Image for post
    Xcode Intial Screen
    Xcode初始画面
    1. Click on the WebDriverAgentRunner in the targets section, you can see that highlighted in the above screenshot.

      单击目标部分中的WebDriverAgentRunner,您可以在上面的屏幕截图中看到突出显示的内容。
    2. Click on the “Signing & Capabilities” tab.

      单击“签名和功能”选项卡。
    3. Check the “Automatically manage signing” checkbox.

      选中“自动管理签名”复选框。
    4. Choose your Team in the Team dropdown.

      在团队下拉列表中选择您的团队。
    5. Now, you will notice that the errors are gone.

      现在,您将注意到错误已消失。
    6. The last step here is to change the bundle id for the WebDriverAgentRunner, Click on “Build Setting” tab.

      这里的最后一步是更改WebDriverAgentRunner的捆绑软件ID,单击“ Build Setting”选项卡。
    7. Search for “Product Bundle Identifier” and replace the value with a bundle identifier of your choice. For ex : “com.<YOUR-ORG>.wda.runner”

      搜索“产品捆绑包标识符”,然后将值替换为您选择的捆绑包标识符。 例如:“ com。<YOUR-ORG> .wda.runner”

    We are now done with configuring the WebDriverAgent runner lets test this by building it.

    现在我们已经完成了配置WebDriverAgent运行器的工作,可以通过构建它来对其进行测试。

    Choose the WebDriverAgentRunner as the target application and choose your device as a target device. In this case I chose a simulator and click on the build button “Play Icon”.

    选择WebDriverAgentRunner作为目标应用程序,然后选择您的设备作为目标设备。 在这种情况下,我选择了一个模拟器,然后单击构建按钮“播放图标”。

    Image for post

    Now you will see the message “Build Succeded”. With this the WebDriverAgentRunner setup is complete and you can try restarting the session from your Appium Desktop. (Repeat step 7)

    现在,您将看到消息“ Build Succeded”。 这样就完成了WebDriverAgentRunner的设置,您可以尝试从Appium桌面重新启动会话。 (重复步骤7)

    Now you may see a new error in the Appium Console. “xcodebuild exited with code ‘65’”. This is because your device doesnt trust the developer.

    现在,您可能会在Appium控制台中看到一个新错误。 “ xcodebuild退出,代码为'65'”。 这是因为您的设备不信任开发人员。

    To the trust the developer follow the below steps :

    要信任开发人员,请执行以下步骤

    1. Click on the “Start Session” button on the Appium Inspector.

      单击Appium Inspector上的“开始会话”按钮。
    2. Notice your mobile launcher, you will see a new App called WebDriverAgent Installed.

      注意您的移动启动器,您将看到一个名为WebDriverAgent Installed的新应用程序。
    3. Go to the phone Settings > General > Device Management.

      转到电话设置>常规>设备管理。
    4. You will see you developer account in the list,

      您会在列表中看到您的开发人员帐户,
    5. Choose that and Click on “Trust the developer”.

      选择该选项,然后单击“信任开发人员”。

    Now you should see your application launched by the appium desktop and you can notice the same screen on the Appium Inspector as well.

    现在,您应该看到由appium桌面启动的应用程序,并且您还可以在Appium Inspector上看到相同的屏幕。

    结论 (Conclusion)

    You can use the same desired capabilities in you code to run the automated tests like below :

    您可以在代码中使用相同的所需功能来运行自动化测试,如下所示:

    DesiredCapabilities iosCapabilities = new DesiredCapabilities();
    iosCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "");
    iosCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "");
    iosCapabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "");
    iosCapabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "");
    iosCapabilities.setCapability(MobileCapabilityType.UDID, "");
    iosCapabilities.setCapability(MobileCapabilityType.NO_RESET, true);
    iosCapabilities.setCapability("xcodeOrgId", "<YOUR-TEAM-ID>");
    iosCapabilities.setCapability("xcodeSigningId", "iPhone Developer");
    iosCapabilities.setCapability("bundleId", "");
    driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), iosCapabilities);

    Alternatively if you wish to install the application into your device through appium you can use the capability mentioned below :

    另外,如果您希望通过appium将应用程序安装到设备中,则可以使用以下功能:

    iosCapabilities.setCapability(MobileCapabilityType.APP, "<IPA-FILE>");

    Cheers.

    干杯。

    翻译自: https://medium.com/swlh/ios-automation-with-appium-desktop-for-real-devices-simulators-41539b0439f1

    appium ios自动化

    展开全文
  • iOS自动化测试一直很神秘,很多人都在探索和找寻最强大的那一款自动化测试工具。个人观点,没有最强大只有最适合,适合以后使用熟练了自然功能强大了。 写在正文之前的几句废话。说到功能自动化测试一般特指基于UI...

    iOS自动化测试一直很神秘,很多人都在探索和找寻最强大的那一款自动化测试工具。个人观点,没有最强大只有最适合,适合以后使用熟练了自然功能强大了。

    写在正文之前的几句废话。说到功能自动化测试一般特指基于UI层面的自动化,本文中介绍的自动化测试框架都是UI自动化测试框架。更大概念的自动化测试以后有时间再详细介绍吧。说到UI自动化测试,就会有不同的一些声音。说什么UI自动化测试投入产出比低,UI变化快脚本维护成本高等。其实,这是一个怎么看待UI自动化测试问题。个人认为适量的UI自动化测试投入产出比还是很高的,具体“适量”怎么理解需要看具体的场景。如果你觉得UI自动化一无是处,那么看到这里就可以千万别往下看了。

    iOS到底有多少测试框架?大家一直在总结,之前stackoverflow上有一篇神帖总结过不下20种,当然不只是UI自动化测试框架,还包括单元测试框架什么的。(链接找不到了,由于时间比较老了很多工具已经不维护或者很少人使用,不看也罢)

    最近发现了一篇Blog  The current state of iOS automated functional testing 总结了一些UI自动化框架,总结的比较到位推荐给大家。结合自己的使用经验,对该Blog进行一些补充,希望您喜欢。 

    按照iOS自动化测试框架的实现原理来划分,iOS自动化测试框架大致可以分为两个大类4种类型:

    • UI Automation系 
      • 扩展型UI Automation
      • 驱动型UI Automation
    • 非 UI Automation系 
      • 私有API型
      • 注入编译型

    UI Automation

    UI Automation是Apple官方提供的UI自动化测试的解决方法,虽然直接使用非常不爽,但是还不得不说。虽然不好用,但是作为一些工具的底层实现还是需要了解的。 官方教程 和  相关API文档 可以方便查阅 

    扩展型UI Automation

    TuneupJs 是最早的iOS自动化测试工具,以JavaScript扩展库方法提供了很多好用js工具,最重要的是提供了超简洁的单元测试框架和持续继承解决方案。 

    ynm3k 是笔者维护的iOS自动化测试框架,借鉴或者说抄袭了很多TuneUpJs的想法,在其基础上加入了UI控件定位的很多方法,让测试脚本更加简单便捷。当然之后还有后续的维护计划,过了变态的996以后会开始实施。 

    如果你偏爱这种类型的测试框架,我真心的推荐ynm3k。因为TuneUpJS已经不维护了,ynm3k还会做一些好玩的功能。最关键的是我觉得ynm3k的UI控件定位识别功能真的很棒。(老王卖瓜了这么长时间还请大家见谅)

    驱动型UI Automation

    驱动型UI Automation 在自动化测试底层使用了UI Automation库,通过TCP通信的方式驱动UI Automation来完成自动化测试。通过这种方式,编辑脚本的语言不在局限于JavaScript,理论上讲可以是任何一种语言。所以有了iOSDriver和  Appium . 

    iOSDriver和Appium还兼容了WebDriver的Json Wire Protocol协议,意味着你可以写WebDriver脚本来完成iOS自动化测试。当然在手机端的一些操作和Web端是不同的,iOSDriver和Appium都扩展了相关的功能。iOSDriver选择了多加入Java语言Jar包的方式支持,而Appium则选择了通过WebDriver注入JavaScript的方式支持。iOSDriver的实现方式决定了只能使用Java语言编辑脚本,而Appium则支持更多的语言。

    当然让我真正选择Appium的原因是因为Appium更加轻便易用一些。如果你不经常玩Java,使用iOSDriver的时候一定会在环境设置方面卡很长的时间。

    私有API型

    直接使用私有API对UI界面进行操作是最简洁有效的自动化测试方式。私有API结合iOS单元测试框架OCUnit的组合完全非常棒,至少对iOS开发工程师来说。在这种类型的测试框架中,  KIF 是必须介绍的。原因很简单,Google在使用。对于那些对Google无理由崇拜的人们,赶紧用起来吧。 

    笔者关注了KIF一段时间,起初1.0版本的时候,真心的不好用。当然工具的维护者也意识到了这个方面的问题,推出了KIF的2.0版本,更新了很多的API。在2.0版本时,还不错。如果想做纯UI界面操作的话,不推荐使用KIF。

    注入编译型

    注入编译型是指在编译时注入一个Server到App内部,通过Server对外通信完成UI操作指令的执行。其中最著名的代表为  Frank 和  Calabash . 它们还是BDD测试框架的杰出代表。维护大单位都是全球知名的敏捷咨询公司。喜欢cucumber和ruby的人可以考虑。 

    大概介绍到这里,之后会陆续进行每种类型的详细介绍。

    原文地址:  http://houlianpi.github.io/blog/ios-testframework.html

     

     

    【关于我们】

    奈园(微信公众号:inaiyuan),专注于国内各大互联网公司社会招聘内推。关注后回复关键词“内推”查看最新互联网名企(包括但不限于今日头条、网易游戏、BAT、网易互联网、小米、京东、乐视、携程等名企)内推信息,有技术岗、有产品岗、有运营岗、有设计岗、有交互岗、有销售岗,更有其他N多相关岗位!更多内推信息请扫描以下二维码关注查阅。

     

     

     

    展开全文
  • Python实现iOS自动化打包
  • 打通IOS 自动化的任 督二脉 王海军 去哪儿网测试开发工程师 K J 4 L IOS UI自动化框架介绍 r i 打通任脉页面元素拾取 J w w 打通督脉基于图片的全方位智能比对 5 o i IOS 自动化持续集成及测试报告展示 3 3 3 Case...
  • 基于最新的XCUITEST框架的iOS自动化测试介绍,关键技术包含: appium,xcuitest,app-inspector,iOS自动化测试环境搭建
  • 主要介绍了Python实现iOS自动化打包详解步骤,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要给大家介绍了关于Python的iOS自动化打包的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • ​今天小编跟大家分享一篇来自学院内部学员的技术分享,本文主要介绍了作者在进行 iOS 自动化性能采集的一些经验,希望对大家在进行 iOS 自动化测试时有一些启发。 不要为小事遮住视线,我们还有更大的世界 前言 ...

    ​今天小编跟大家分享一篇来自学院内部学员的技术分享,本文主要介绍了作者在进行 iOS 自动化性能采集的一些经验,希望对大家在进行 iOS 自动化测试时有一些启发。

    不要为小事遮住视线,我们还有更大的世界在这里插入图片描述
    前言
    对于iOS总体生态是比较封闭的,相比Android没有像adb这种可以查看内存、cpu的命令.在日常做性能测试,需要借助xcode中instruments查看内存、cpu等数据.

    但是借助instruments比较麻烦、又不能提供命令行.在持续集成中,很难时时的监控app的性能指标.并且现在app发版一般是2周左右,留给做专项测试的时间更少了,那么做核心场景性能测试,肯定是来不及的.

    所以需要借助一些自动化工具来减轻手工采集性能指标的工作量.

    性能采集项
    app中基本性能采集项,内存、cpu、fps、电量等,因为自动化采集中手机设备是插着电脑充电的,所以不能采集电量数据.

    已有工具
    instruments是官方提供的,不能做到自动化采集

    腾讯gt,需要在app中集成sdk,有一定的接入成本

    第三sdk,类似腾讯gt需要在app集成,可能会有数据泄漏风险

    脚本开发
    上述的已有工具都不满足,在持续集成中做到自动化采集性能数据,期望的性能测试工具有一下几点:

    方便接入

    可生成性能报告

    可持续化

    数据收集精准

    所以基于这几点,需要自己开发一套性能采集脚本.

    使用官方提供的api做性能采集
    获取内存、cpu等
    #import <mach/mach.h>

    /**

    • 获取内存
      */
    • (NSString *)get_memory {
      int64_t memoryUsageInByte = 0;
      task_vm_info_data_t vmInfo;
      mach_msg_type_number_t count = TASK_VM_INFO_COUNT;
      kern_return_t kernelReturn = task_info(mach_task_self(), TASK_VM_INFO, (task_info_t) &vmInfo, &count);
      if(kernelReturn == KERN_SUCCESS) {
      memoryUsageInByte = (int64_t) vmInfo.phys_footprint;
      NSLog(@“Memory in use (in bytes): %lld”, memoryUsageInByte);
      } else {
      NSLog(@“Error with task_info(): %s”, mach_error_string(kernelReturn));
      }

      double mem = memoryUsageInByte / (1024.0 * 1024.0);
      NSString *memtostring ;
      memtostring = [NSString stringWithFormat:@"%.1lf",mem];

      return memtostring;
      }

    /**

    • 获取cpu
      */
    • (NSString *) get_cpu{
      kern_return_t kr;
      task_info_data_t tinfo;
      mach_msg_type_number_t task_info_count;

      task_info_count = TASK_INFO_MAX;
      kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)tinfo, &task_info_count);
      if (kr != KERN_SUCCESS) {
      return [ NSString stringWithFormat: @"%f" ,-1];
      }

      task_basic_info_t basic_info;
      thread_array_t thread_list;
      mach_msg_type_number_t thread_count;

      thread_info_data_t thinfo;
      mach_msg_type_number_t thread_info_count;

      thread_basic_info_t basic_info_th;
      uint32_t stat_thread = 0; // Mach threads

      basic_info = (task_basic_info_t)tinfo;

      // get threads in the task
      kr = task_threads(mach_task_self(), &thread_list, &thread_count);
      if (kr != KERN_SUCCESS) {
      return [ NSString stringWithFormat: @"%f" ,-1];
      }
      if (thread_count > 0)
      stat_thread += thread_count;

      long tot_sec = 0;
      long tot_usec = 0;
      float tot_cpu = 0;
      int j;

      for (j = 0; j < thread_count; j++)
      {
      thread_info_count = THREAD_INFO_MAX;
      kr = thread_info(thread_list[j], THREAD_BASIC_INFO,
      (thread_info_t)thinfo, &thread_info_count);
      if (kr != KERN_SUCCESS) {
      tot_cpu = -1;
      //return -1;
      }

        basic_info_th = (thread_basic_info_t)thinfo;
      
        if (!(basic_info_th->flags & TH_FLAGS_IDLE)) {
            tot_sec = tot_sec + basic_info_th->user_time.seconds + basic_info_th->system_time.seconds;
            tot_usec = tot_usec + basic_info_th->user_time.microseconds + basic_info_th->system_time.microseconds;
            tot_cpu = tot_cpu + basic_info_th->cpu_usage / (float)TH_USAGE_SCALE * 100.0;
        }
      

      } // for each thread

      kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));
      assert(kr == KERN_SUCCESS);

      NSString *tostring = nil ;
      tostring = [ NSString stringWithFormat: @"%.1f" ,tot_cpu];
      NSLog (@“performance cpu:%@”,tostring);

      return tostring;
      }

    获取页面vc
    上边收集了内存和cpu,还需要在收集数据的同时和页面对应上.这样就清楚了是当前页面的内存和cpu情况.

    /**
    *获取当前vc
    */

    • (UIViewController *) get_vc {
      UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
      __weak typeof(self) weakSelf = self;
      dispatch_async(dispatch_get_main_queue(), ^{
      if ([keyWindow.rootViewController isKindOfClass:[UITabBarController class]]) {
      UITabBarController *tab = (UITabBarController *)keyWindow.rootViewController;
      UINavigationController *nav = tab.childViewControllers[tab.selectedIndex];
      DDContainerController content = [nav topViewController];
      weakSelf.vc = [content contentViewController];
      }
      });
      return self.vc;
      }
      获取设备信息
      /

      *获取设备名称
      */
    • (NSString *) get_devicesName {
      NSString *devicesName = [UIDevice currentDevice].name; //设备名称
      NSLog(@“performance devicesName:%@”, devicesName);
      return devicesName;

    }

    /*
    *获取系统版本
    */

    • (NSString *) get_systemVersion{
      NSString *systemVersion = [UIDevice currentDevice].systemVersion; //系统版本
      NSLog(@“performance version:%@”, systemVersion);
      return systemVersion;
      }

    /*
    *获取设备idf
    */

    • (NSString *) get_idf {
      NSString *idf = [UIDevice currentDevice].identifierForVendor.UUIDString;
      NSLog(@“performance idf:%@”, idf);
      return idf;

    }
    数据拼接
    最终要把内存、cpu等数据拼接成字典的形式,方便输出查看

    输出log日志的数据格式

    {
    “cpu”: “0.4”,
    “fps”: “60 FPS”,
    “version”: “11.2”,
    “appname”: “xxxxxx”,
    “battery”: “-100.0”,
    “appversion”: “5.0.4”,
    “time”: “2018-09-07 11:45:24”,
    “memory”: “141.9”,
    “devicesName”: “xxxxxx”,
    “vcClass”: “DDAlreadPaidTabListVC”,
    “idf”: “8863F83E-70CB-43D5-B6C7-EAB85F3A2AAD”
    }

    开启子线程采集
    开一个子线程定时采集数据

    /*

    • 性能采集子线程
      */
    • (void) performancethread {
      NSThread *thread = [[NSThread alloc] initWithBlock:^{
      NSLog(@“performance get performance”);

        [self get_fps];
      
        while (true) {
            DDPerformanceModel *model = [DDPerformanceModel new];
            model.time=[self get_time];
            model.appname=[self get_appname];
            model.appversion=[self get_appversion];
            model.idf =[self get_idf];
            model.devicesName =[self get_devicesName];
            model.version = [self get_systemVersion ];
            model.vcClass = NSStringFromClass([self get_vc].class);
            model.memory = [self get_memory];
            model.battery = [self get_battery];
            model.cpu = [self get_cpu];
            model.fps = self.percount;
      
            NSString *json = [model modelToJSONString];
      

    // printf(" getperformance %s\r\n", [json UTF8String]);
    NSLog(@“getperformance model %@”, json);
    sleep(5);
    }
    }];
    [thread start];

    NSLog(@"performance   ======continue mainblock======");
    

    }

    初始化性能采集
    AppDelegate.m文件中didFinishLaunchingWithOptions方法中用户各种初始化操作,可以在第一行初始化性能采集,
    这样app启动以后就可以定时采集数据

    • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

      [[getperformance new] performancethread];//获取性能数据

      }
      性能采集日志存储
      一般来说日志存储都是写入到本地log日志,然后读取.但是有两个问题

    需要读写文件代码,对于不熟悉oc的人来说比较难

    因为是定时采集,文件IO操作频繁

    所以不考虑存储本地log日志的方式,可以在代码中打印出数据,通过截获当前设备运行的日志获取数据.

    模拟器可以使用xcrun simctl命令获取当前设备运行日志,
    真机用libimobiledevice获取日志

    xcrun simctl spawn booted log stream --level=debug | grep getperformance

    输出log日志的数据格式,这块做了json美化,每歌几秒在控制台就打印一次

    {
    “cpu”: “0.4”,
    “fps”: “60 FPS”,
    “version”: “11.2”,
    “appname”: “xxxxxx”,
    “battery”: “-100.0”,
    “appversion”: “5.0.4”,
    “time”: “2018-09-07 11:45:24”,
    “memory”: “141.9”,
    “devicesName”: “xxxxxx”,
    “vcClass”: “DDAlreadPaidTabListVC”,
    “idf”: “8863F83E-70CB-43D5-B6C7-EAB85F3A2AAD”
    }

    如果获取多次数据可以使用shell脚本把命令放到后台,定时写入到logpath中
    nohup xcrun simctl spawn booted log stream --level=debug >${logpath} &
    代码插入到工程中
    因为在持续集成中,每次打取的代码都是不带性能测试代码,这些代码是单独写到文件中.在编译项目前,用shell把代码插入到工程中,这样打出来的包才能有采集性能数据功能.

    scriptrootpath=2AddFiles={2} AddFiles={2}"/GetPerformance/performancefiles"
    localDDPerformanceModelh=scriptrootpath"/GetPerformance/performancefiles/DDPerformanceModel.h"localDDPerformanceModelm={scriptrootpath}"/GetPerformance/performancefiles/DDPerformanceModel.h" localDDPerformanceModelm={scriptrootpath}"/GetPerformance/performancefiles/DDPerformanceModel.m"
    localgetperformanceh=scriptrootpath"/GetPerformance/performancefiles/getperformance.h"localgetperformancem={scriptrootpath}"/GetPerformance/performancefiles/getperformance.h" localgetperformancem={scriptrootpath}"/GetPerformance/performancefiles/getperformance.m"

    addfiles(){

    echo "删除${projectaddpath}中的原性能采集文件"
    
    rm -rf ${DDPerformanceModelh}
    rm -rf ${DDPerformanceModelm}
    rm -rf ${getperformanceh}
    rm -rf ${getperformancem}
    
    echo "复制文件到${projectaddpath}路径"
    
    cp  ${localDDPerformanceModelh} ${projectaddpath}
    cp  ${localDDPerformanceModelm} ${projectaddpath}
    cp  ${localgetperformanceh} ${projectaddpath}
    cp  ${localgetperformancem} ${projectaddpath}
    

    }
    性能数据绘制
    在手工和自动化使用插入性能测试代码的app,如果截获性能数据后,可以对数据做性能数据绘制.

    用Higcharts或者echarts绘制性能走势图
    在这里插入图片描述
    如何在持续集成中使用
    monkey和UI自动化中使用,最终会发送一份性能报告.

    Demo代码
    已经把性能代码脱了主项目,可在Demo代码中编译,github地址:https://github.com/xinxi1990/iOSPerformanceTest

    最后
    虽然iOS生态封闭,但是对于开发者和测试者还是有一些空间可以利用的.

    iOS测试一直都是一个难点,难懂的oc语法和iOS整体框架.如果你开始慢慢接触iOS,会发现iOS测试也并不是那么难,需要一点耐心和一点专心而已.

    (文章来源于霍格沃兹测试学院)

    更多优秀内容及资料可点击获取

    展开全文
  • appium ios 自动化测试

    2018-01-12 23:54:00
    iOS自动化测试:Appium 从入门到实践https://www.jianshu.com/p/43f858180557appium自动化测试iOS Demohttps://www.jianshu.com/p/eb03321c5e2f使用Appium进行iOS的真机自动化测试...mac下iOS10 appiu...
  • ios自动化基础应用

    2020-12-15 21:55:13
    ios自动化环境搭建参考如下两个路径; https://www.cnblogs.com/we8fans/p/7384291.html https://www.cnblogs.com/we8fans/p/10416904.html 一 配置启动项 public class Tester { public static void main(String[] ...
  • iOS 自动化测试

    2016-02-22 15:21:00
    iOS 自动化测试 转载于:https://www.cnblogs.com/xzoscar/p/5207244.html
  • iOS自动化打包

    2016-03-02 23:15:35
    iOS自动化打包脚本,地址:(https://github.com/hades0918/ipapy)iOS项目自动打包脚本1.脚本自动打包2.上传到fir.im3.发送邮件给测试人员需要安装的相关指令软件:1.python 2.72.xcode3.fir.im指令使用方法:1.安装...
  • 利用Jenkins实现iOS自动化打包

    千次阅读 2019-02-12 10:31:19
    利用Jenkins实现iOS自动化打包安装 fastlane安装 Jenkins构建设置高级设置 之前做iOS自动化打包这一块,找了很多资料,一直没有特别全的iOS打包流程。所以,花费了很多力气来处理iOS打包遇到的问题,所幸,终于...
  • ios_monkey,非常简单好用,可以写逻辑自动化测试,ios_monkey,非常简单好用,可以写逻辑自动化测试
  • iOS自动化测试之自动安装ipa的资料 https://blog.csdn.net/yxys01/article/details/73549475 一、打包IPA Mac下用命令行打ipa包(打包) [iOS]从零开始写个自动打包IPA脚本(ios更新接口后,部分代码也需要...
  • 本文将带你了解IOS软件开发之Python的iOS自动化打包,希望本文对大家学IOS有所帮助。前言这段时间刚刚学习了一段时间的Python,加上自己是做iOS开发的,就想着用Python来做一个自动化打包,可以自动完成打包,上传到...
  • 一. 环境搭建 应用场景 想要进行 iOS 自动化测试,必须进行环境的搭建。 需要的环境 macOS系统电脑 Xcode -----打开 app store 搜索 Xcode 并下载 待测试的 iOS 项目—找开发人员 appium Desktop ...
  • iOS 自动化测试 积累

    2015-02-16 16:09:26
    iOS 自动化测试 积累 分类: iOS测试开发2013-11-18 11:23 673人阅读 评论(0) 收藏 举报 iOS 自动化测试 手机 苹果 Test iOS Apps with UI Automation 电子版可以免费下载了,作者本来是收费的,哈哈!...
  • iOS自动化打包xcodebuild

    2021-01-03 20:07:49
    iOS自动打包脚本制作 在工程根目录下新建两个文件 destination export method enterprise signingStyle automatic stripSwiftSymbols teamID KV6556Y343 thinning method的类型为String,用来指定打包...
  • 首先声明一点:上面地址的文章其实已经讲述的很详细了,但是我为什么还要写这篇文章呢。因为我早上洗脸的时候突然想到我为什么不把app的文件路径直接作为参数传过去呢,那样的话我的py文件就不用每个项目都再打开...
  • IOS自动化打包

    2014-08-30 14:20:36
    1。iphone自动打包 http://3426724.blog.51cto.com/3416724/883484 ... 2。IOS自动化打包介绍 http://stblog.baidu-tech.com/?p=1295 3。新年送大家一个好东西,放上一个自动打包各种渠道的shell htt
  • ios ui自动化测试Who knew automated UI Testing could be so easy! Well, I guess Apple did. Automated UI Testing has never been easier with the XCUITest framework for iOS. 谁知道自动化的UI测试是如此简单...
  • python下ios自动化测试项目 地址https://github.com/openatx/facebook-wda 和UIAutomator2同一个作者代码差不多 目前支持版本比较多。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,819
精华内容 1,927
关键字:

ios自动化