Tag: 自动化测试

iOS自动化测试:Xcode UI测试入门

如何编写iOS自动化测试? 如何使用Xcode UI测试框架通过Screen Object Pattern编写可靠且可维护的测试? 阅读本文以了解答案。 XCUITest框架简介 第一步,我们需要选择自动化框架。 在本教程中,我们将利用XCUITest Framework。 一个允许测试用户与屏幕实际交互的框架。 它由Apple开发,为用户界面和集成测试提供了强大的功能。 设置Xcode项目以进行UI测试 Xcode UI测试要求访问应用程序源代码,并且必须在计算机上安装Xcode。 首先,我们需要创建UI测试目标: 打开Xcode项目 文件>新建>目标 选择iOS UI测试套件 输入您的组织信息并选择一种编程语言(本教程中将使用Swift) 使用XCUI Test Recorder编写第一个测试 XCUI Test Recorder允许我们记录用户与屏幕的交互并在测试中使用生成的代码: 导航到测试导航器 选择要记录的测试功能 按下UI记录器按钮 在设备上执行测试 为了完成我们的测试,我们应该添加断言来进行验证,以确保预期元素显示在主屏幕上 //预期显示的元素 让玩家= app.collectionViews.staticTexts [“测试”] //声明该元素已显示 XCTAssertTrue(player.exists) 使用辅助功能检查器检查元素 XCUI测试记录器非常适合简单的测试,但是记录器生成的代码需要修改,有时它不能为Element提供正确的定位器。 更好的方法是使用辅助功能检查器: 开放辅助功能检查器 单击开始检查按钮 检查元素以定义定位器 当我们知道Element调试描述时,我们可以根据该值编写Locator: 让playerBalance = app.staticTexts [“ $ 99.999”] 获取屏幕调试描述的另一种方法是在Xcode控制台中打印可访问性层次结构: print(app.debugDescription) 屏幕对象模式简介 在编写用户界面和集成测试时,我们希望使用可读代码创建可维护的测试。 […]

为什么要编写不合格的测试?

我们都知道红色,绿色和重构技术。 但是我从来没有说过我应该先写一个失败的测试。 我想-“为什么我的考试不及格?”。 所以这是我关于如何艰难学习的故事。 那段时间我失去了所有的信心。 我希望-没有人在生活中必须经历同样的经历。 我在团队中的角色 如果某人具有DevOps的角色,则您实际上无法说出他/她的工作。 如果我不得不夸耀-“我致力于软件的整体交付,并确保按照定义的质量标准按时交付服务。”但是,事实并非如此。 加入团队后,我是一名常规系统管理员。 我不是一个人工作。 团队中至少有两个人专门管理构建基础结构。 因此,就像结对编程一样,我进行了结对管理 。 但是,由于我们的构建代理(MacBook和Linux VM)变得非常稳定,因此我们还可以执行其他IT操作任务,包括引入fastlane,团队密码管理器,在Gocd中管理管道等。我们决定了自己的优先事项,并按照我们的意愿做了工作。 但是有一个问题。 如果在代理上发现任何错误配置或必须配置新工具,则我和Gopal Singhal(我的一对)需要尽快解决。 整个团队在与构建代理有关的一丁点问题上都受阻。 因此,它归结为任何需要添加到我们的构建CI池中的计算机都应事先进行全面测试。 任务 因此,我们在代理上仅安装了一个版本的Xcode,我们避免在同一个代理上安装多个版本的Xcode。 要求从Xcode 9.0转移到Xcode 9.1。 对我来说,这看起来很简单。 我必须像之前一样安装一台计算机,唯一的区别是Xcode版本。 我配置了一台机器并在其上运行一些作业。 一切顺利。 除了视觉比较测试之一失败。 我看到了它的日志。 日志说,视觉比较测试由于预期的基线图像和实际屏幕之间的差异而中断。 这远远超过了可接受的差异(3%)。 因此,我认为可能是由于获取了一些较旧的人工制品而导致测试失败。 因此,我检查了它的所有依赖关系-代码,人工制品,配置文件,配置,环境变量,网络配置,主板,RAM,CPU周期(双关语意)。 但是,没有任何帮助。 我花了两个多星期的时间来理解为什么作业在新机器上失败了。 但是,我没有任何线索。 我失去了所有的信心。 我不愿向团队更新-“我不了解为什么视觉测试在我的机器设置中失败了。” 经过两个星期的投资并陷入困境–是否寻求帮助,我想咨询其中一个QA。 他告诉那是一次有效的失败。 该测试失败了,因为实际上基准很旧并且应用程序的UI发生了很大变化。 新任务 现在,问题已经扭转了。 来自-“ 为什么在新计算机上失败? ”,它变为-“ 为什么CI池中的现有计算机没有失败。 ” 我既快乐又悲伤。 很高兴-因为我正确设置了机器。 很难过-因为我对我们的测试失去了信心。 我们怎么可能还没有弄清楚我们有没有测试的测试。 […]

iOS自动化测试:并行运行测试

如何通过在物理设备和模拟器上并行运行来减少测试执行时间? 如何使用屏幕截图生成测试报告并通过命令行界面运行测试? 阅读本文以了解答案。 Xcode UI测试简介 本文是5月6日我文章的延伸,我们在那里学习了如何为您的项目设置XCUI框架并开始使用Swift编写Xcode UI测试。 进行检查以使您对该主题更加熟悉。 Fastlane工具入门 Fastlane是功能强大的开源工具,将帮助我们通过命令行界面执行测试,以及为我们提供测试,构建,签名和部署库的集合。 首先,我们需要安装它们: 打开终端 执行[sudo] gem install fastlane -NV 导航到您的项目目录并运行fastlane init 输入4以选择手动设置 等待安装完成 现在,我们已经安装了Fastlane工具。 您的项目中应该具有创建了Appfile和Fastfile fastlane目录。 通过命令行执行测试 为了在Continuous Integration Server上运行测试,我们需要通过命令行界面执行它。 此任务有多种方法,在本教程中,我们将使用Fastlane Scan操作。 让我们进行设置: 导航到创建的fastlane目录cd fastlane/ 在文本编辑器(例如Atom)中打开Fastfile 根据您的项目方案名称设置方案 指定测试设备 车道:test do 扫描( 方案:“ BoardBank”,#项目方案名称 clean:true,#测试执行前清理项目文件夹 设备:“ iPhone 8”#用于测试的模拟器 ) 结束 恭喜,我们已经成功配置了项目以执行测试,而Fastlane工具将为我们完成其余工作。 要运行测试: 执行快速fastlane test 等待测试执行 您将在fastlane/test_output目录中找到生成的HTML和Junit报告。 改善测试报告 Fastlane仅允许生成简单的测试报告,其中不包括屏幕截图和设备日志。 […]

通过Appium实现iOS并行化-一种优雅的方式

没有值得拥有的东西,变得容易。 直到2017年6月,iOS Parallelisation也是如此。 XCode的限制是每个运行者仅允许一个模拟器,这是UI自动化开发人员的主要限制,这导致反馈周期变慢。 进行15个小时的约500次测试的回归套装只是一种常态。 在您决定去还是不去之前十五小时! 随着“移动优先”或“仅移动”趋势的发展,IOS自动化很快成为加快发布周期的瓶颈。 然后,Facebook的FBSimulatorControl带来了一线希望。 FBSimulatorControl是一个macOS库,用于同时管理,引导和与多个iOS模拟器进行交互。 尽管该解决方案非常出色,但对于围绕Appium和Cucumber构建的自动化框架却很少使用。 将数百个测试迁移到该框架是一个成本更高的解决方案。 这使UI自动化开发人员充满信心,认为iOS并行化是可能的,而Apple的支持将指日可待。 年份2016 在TestVagrant,与Cucumber和Appium一起工作时,我们一次又一次地面对多个客户的相同问题。 我们如何将功能/测试分发到可用设备上? 我们如何在所有可用设备上运行所有功能? 我们如何运行诸如Driver-Customer之类的应用间场景? 我们如何自动检测和管理设备以及维护Appium服务器和Webdriver实例? 我们如何构建有助于快速决策的报告? 我们如何鼓励很少或没有编程经验的qa为自动化做出贡献? 到2016年底,我们已解决了大部分问题,但有些零散的问题。 然后,我们意识到这些不仅是我们面临的挑战,还是整个致力于黄瓜和Appium的社区的绊脚石。 我们将所有解决方案归为一个单一的框架,称为 Optimus,一个开源的移动自动化框架。 Optimus Framework是一个包含多个项目的生态系统,它可以 自动发现已连接的设备(物理设备,仿真器,模拟器) 以多种模式运行黄瓜功能; 分布和碎片化。 运行应用间测试 生成近乎实时的报告,以加快分析速度。 在过去的两年中擎天柱 演变为适用于Appium和Cucumber的近乎完整的移动自动化框架。 但是它错过了一项关键功能,即并行运行iOS测试。 年份2017 终于在2017年,XCode正式在单个iOS主机上支持了多个模拟器,并且Appium社区足够快地支持并行iOS测试。 然后,社区中出现了一些解决方案,使iOS并行化成为可能,但是设置很麻烦,例如 为连接的设备管理多个WebDriverAgent。 通过唯一的服务器实例路由Appium命令。 作为质量检查人员,我们认为应该减轻设置方面的麻烦,并且不应成为自动化的障碍。 Optimus提取了所有设置机制,并允许团队在几分钟内建立Device Lab。 通过对擎天柱的一些调整,我们确定可以在iOS模拟器和设备上并行运行黄瓜功能。 擎天柱3.0 借助Optimus 3.0,自动化团队现在可以在iOS设备上并行运行其测试服,而无需担心基础设置。 这是它的一瞥。 方便的资源 Optimus — https://github.com/testvagrant/optimusTemplate Wiki-https://github.com/testvagrant/optimusTemplate/wiki Gitter — https://gitter.im/optimus_support/optimus […]

iOS快照测试用例

“ iOSSnapshotTestCase” FBSSnapshotTestCase教程库Facebook脚本库uber ตัว快照测试用例มันเอาไว้ 快照快照方法renderInContext: UIView对象CALayer对象存储库(参考图像)源代码存储库中的源代码文档显示失败。 ราะ codeอเราเขียน代码ที่เกี่ยวข้องกับUIเยอะมากๆายกรณีทดสอบ(测试用例)ที่เราต้องทำเมื่อสร้าง UIView แล้ว… textราจะรู้ได้อย่างไรว่าตัวอักษร(文本)ที่ใส่เข้าไปเพียงพอในพื้นที่ที่เตรที่ที่เตยมไว้ิ่งโด ดีกับราจะรู้ได้อย่างไรว่ารูปที่เตรียมไว้พอดีกับ图像视图ที่มีให้ Viewราจะรู้ได้อย่างไรว่าสีหรือภาพของ UIView เป็นอย่างไรถ้า状态เปลี่ยนเช่น被选中,突出显示 codeาเราต้องเขียน代码iOSiOS快照测试案例ี่แหละจะมนี่แหละจะมนอน iOSSnapshotTestCase อาสามาถทำได้ Coารติดตั้งผ่านCocoaPods ให้เพิ่ม代码ในกล่องข้างล่างในPodfile target “ชื่อ target (unit) test” do use_frameworks! pod ‘iOSSnapshotTestCase’ end Objectiveาใช้ภาษา Objective-C ให้ใช้ iOSSnapshotTestCase/Core แทนซึ่งจะตัดในส่วนการรองรับภาษา Swift ออกไป อย่าลืมเปลี่ยนชื่อ目标测试นะครับ 2.บอกที่เก็บของไฟล์รูปซึ่งสามารถทำได้3แต่แนะนำให้เพิ่มเข้าไปที่schemaทั้งนี้สามารถกำหนดได้กำหนด2ปลายคือต้นฉบับ FB_REFERENCE_IMAGE_DIR ที่เก็บถ้ามีค่าไม่ตรไม่ตามฉบับ IMAGE_DIFF_DIR สร้างกรณีทดสอบแรก งไฟล์ร้างไฟล์单元测试ที่อยู่ภายใต้目标ของ单元测试โดยให้子类ตัว FBSnapshotTestCase แทนตัว XCTestCase กใช้ FBSnapshotVerifyView ยกใช้方法FBSnapshotVerifyView ในการทดสอบ recordา recordMode = true […]

使用Appium Mobile测试自动化管理质量检查难题

随着无数移动应用程序,操作系统,设备平台,网络的兴起,对质量测试的需求变得至关重要。 自动化的移动测试在质量保证行业中仍然是一个独创的概念。 在Appium成为用于测试Android和iOS应用程序的最可靠的开源移动测试自动化工具之前,移动应用程序测试人员面临着严峻的挑战。 它减少了测试人员面临的许多挑战,并成为自动化移动应用程序测试的测试人员友好工具。 根据《 2017-18年世界质量报告》,质量检查团队面临的最常见挑战是缺乏内部测试环境的时间,测试专业知识以及缺少测试移动应用程序的正确工具和方法,集成测试的难度大为了克服这些问题,必须在更深层次上改变策略和方法,以改善客户体验。 以下是根据自动移动应用程序测试中移动应用程序测试人员面临的经验指出的一些挑战: 在多个设备上执行测试:很难在不同的设备环境上部署和运行测试。 在较少数量的设备上购买和运行测试很容易,但是当数量更多时,在所有设备上运行自动化测试会变得困难且耗时。 在测试大量设备时,最好考虑使用诸如pCloudy之类的云服务。 pCloudy Appium集成体系结构使开发人员的工作变得更简单,代码更改更少。 您只需要提及一些所需的功能即可,而不是调用API或更改代码以运行Appium脚本。 您可以在500多个设备上并行运行测试。 想知道是什么! 它使您节省了50%的应用测试时间。 a) 设备连接性:设备具有不同的功能。 某些设备在安全性,可访问性和驱动程序方面具有某些限制。 一台设备上运行的应用程序某些功能可能无法在另一台设备上运行。 因此,用于测试的设备在功能上会有很大差异,因此可能会在此级别出现问题。 b) 测试性能:在真实设备上进行测试是最有效的,因为所有内容均已在实际情况下得到验证,尤其是在不同网络条件下测试性能和测试应用程序的情况下。 GPS,接近传感器,生活传感器等许多手势无法在模拟器上进行测试。 在模拟器上测试的应用程序在实际设备上可能无法始终正常运行。 同一操作系统在不同设备上可能会不一致,更不用说其他操作系统了。 在需要进行大规模设备测试的情况下,也可以考虑进行设备云测试。 c) 访问网络:为了使功能更流畅,必须易于访问网络,数据库和Web服务。 如果使用远程服务,则需要配置设备隧道和VPN连接以轻松访问资源。 pcloudy的设备隧道为开发人员提供了对云上设备的完全控制。 这样,可以通过计算机中安装的Android Studio或Eclipse IDE访问云设备。 这已帮助开发人员和测试人员输入托管在云中的任何类型的设备,以运行快速评估和应用程序调试会话。 以上是移动应用程序测试自动化的一些挑战,但是Appium如何解决这些问题? Appium支持大多数测试人员都熟悉的Selenium Webdriver API 2.无需修改正在测试的应用程序的代码。 3. Appium支持主要的编程语言,例如JAVA,RUBY,PYTHON,C#等。 4. Appium支持IOS和Android移动平台 5. Appium具有庞大的用户社区,并且是一个开放源代码工具。 但是,它的某些版本确实存在其自身的挑战。 像这样的挑战不支持图像识别,并非所有功能都同时在Android和IOS上可用,某些API没有实现,等等。尽管有这些缺点,Appium仍然是测试人员的最佳选择。 真实设备和云上的APP的性能。 哪种环境最适合Appium性能? 是在真实设备上还是在云上? 1. 在Real Devices上 –在提供实时用户体验方面, […]