草庐IT

2022年最流行的 iOS 自动化测试工具

科技狠活与软件技术 2023-03-28 原文
iOS 设备销量的逐年增长为 iOS 的成功树立了高标准。然而,在测试这些设备时,购买具有各种硬件规格的设备和 iOS 设备对于中小企业和初创公司来说并不可行。此外,由于可扩展性和低效率问题,有比手动测试更好的测试解决方案。

尽管 iOS 仍然是一个比 Android 更封闭的操作系统,但您可以使用各种免费和开源技术来构建有效的自动化测试。对于使用基于云的测试解决方案的开发人员和测试人员而言,它使 iOS 应用程序测试活动更简单、更高效。

以下是一些带有代码示例的自动化测试框架,您可以使用它们来测试您的 iOS 应用程序。

Appium

作为最受欢迎的开源解决方案之一,Appium 可帮助用户管理适用于 Android、iOS 和 Windows 的混合、移动或本机应用程序。它使开发人员和测试人员能够为移动应用程序构建自动化测试,使他们能够以更低的风险更快地生产高质量的软件。

该应用程序的好处

  • Appium 是免费使用和开源的。
  • 它支持所有与 WebDriver 兼容的语言,如 Java、Objective-C 和 JavaScript。
  • 它的开发人员使用与 Selenium 相同的 JSON 有线协议创建它,使 QA 测试人员和移动开发人员可以轻松进行转换。
  • Appium 测试本机、移动网络和混合应用程序,并与 iOS 和 Android 操作系统兼容。
  • 它得到了一个规模庞大且活跃的社区的支持,为用户提供持续的帮助和故障排除。
  • 对于单元测试,选择一个支持框架,如 XCTest 或 XCUITest。
  • 它的跨平台兼容性使其能够跨移动和在线渠道重用测试场景。
  • 它是 iOS WebDriver 开发的基准。

应用缺点

  • 通过要求用户理解 Appium 架构和本机应用程序/选择器的原则来增加学习曲线。
  • 它取决于一系列开源部分,您必须在支持其他部分的版本中单独安装这些部分。
WebDriver 的 Appium 示例代码

driver.findElement(By.id("com.example.app:id/radio0")).click();
driver.findElement(By.id("com.example.app:id/radio1")).click();
driver.findElement(By.id("com.example.app:id/radio2")).click();
driver.findElement(By.id("
com.example.app:id/editText1")).click();
driver.findElement(By.id("
com.example.app:id/editText1")).sendKeys("Simple Test");
driver.findElement(By.name("Answer")).click();

Calabash

另一个兼容 Android 和 iOS 应用程序的优秀跨平台框架是 Calabash。用 Cucumber 编写的 Calabash 测试是该框架与其他框架的主要区别之一:这意味着虽然测试是基本的且易于阅读,但即使对于非技术人员,自动化系统仍然可以执行测试,因为我们将其编写为规格。

Calabash代码示例Feature:

Answer the Question featureScenario: As a valid user I
want to answer app questionI wait for text "What is the best way to test
application on hundred devices?"Then I press Radio button 0Then I press Radio
button 1Then I press Radio button 2Then I enter text "Simple Test" into field
with id "editText1"Then I press view with id "Button1"

Earl Gray

Earl Gray 是一个开源的 iOS UI 自动化框架,也是 Google 对 XCUITest 的回应,用于测试 iOS 应用程序。只有 iOS 设备可以使用 Earl Grey,开发人员必须使用 Swift 或 Objective-C 编写测试。Earl Grey 的主要优势在于它将 Espresso 的同步功能扩展到 iOS 应用程序自动化测试,确保自动化不会在应用程序正在使用时尝试执行操作。

EarlGrey的优势易于直接或通过 CacaoPods 添加到 iOS 项目具有有效内部组件同步功能的多功能框架完整的框架是开源的。

结合 XCodeEarlGrey 示例代码// Objective-C- (void)testInvokeCustomSelectorOnElement
{[[EarlGrey
selectElementWithMatcher:grey_accessibilityID(@"id_of_element")]performAction:[GREYActionBlock
actionWithName:@"Invoke clearStateForTest selector"performBlock:^(id element,
NSError *__strong *errorOrNil) {[element doSomething];return YES; // Return YES
for success, NO for failure.}]];}

XCUI test

在 iPad 和 iPhone 等 iOS 设备上,XCUITest 是用于 UI 测试移动应用程序和在线应用程序的测试自动化框架。它是 Apple 测试基础设施的一部分。XCUITest 提供了一个框架,该框架支持以编程方式识别和与来自其他测试工具的 UI 组件进行交互。到 2022 年,唯一支持的 iOS UI 交互库是 XCUITest,它取代了过时的 UIAutomator 技术。

XCUITest优势您可以使用 Swift 或 Objective-C 来编写您的应用程序和测试代码,并且两者都可以完全在 XCode 中修改并存储在同一个存储库中。由于XCUITest 和 iOS可以很好地协同工作,因此测试可能比使用竞争框架运行得更快。

通过在观察用户与链接的模拟器或真实设备的交互的同时创建测试代码,XCode 的“记录”功能可以进行测试。然后您可以修改记录的测试代码以生成可信赖、可重复的测试,从而在测试创建期间节省时间。测试人员可以使用 XCUITest 通过元素的标题、标签、值或占位符值来定位元素。仅出于测试目的,XCUIElements 还可以具有特定的“可访问性标识符”,使查找元素变得快速而简单。

XCUITest 缺点您的团队用于运行 XCUITest 的每台计算机,包括测试计算机和 CI/CD 设置,都必须安装 XCode。最好使用 XCUITest 运行器运行测试;您不能独立于 XCUITest 框架运行 XCUITest 代码。Swift 和 object-C 是唯一可用的编程语言。

XCode 示例代码:

(void) testAdditionPerformance {[self
measureBlock:^{// set the initial state[calcViewController press:[calcView
viewWithTag: 6]]; // 6// iterate for 100000 cycles of adding 2for (int i=0;
i<100000; i++) {[calcViewController press:[calcView viewWithTag:13]]; //
+[calcViewController press:[calcView viewWithTag: 2]]; // 2[calcViewController
press:[calcView viewWithTag:12]]; // =}}];}
结论尝试设置您的测试功能是一项挑战。此外,iOS 设备测试需要专业知识。测试自动化平台可以帮助测试 iOS 设备。这些平台可让您连接到全球支持 SIM 卡的 iOS 设备。通过此类平台,您可以获得可操作的见解,帮助您改进 iOS 应用程序。

有关2022年最流行的 iOS 自动化测试工具的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  3. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  4. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  5. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  6. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  7. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  8. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  9. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  10. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

随机推荐