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

如何通过在物理设备和模拟器上并行运行来减少测试执行时间? 如何使用屏幕截图生成测试报告并通过命令行界面运行测试? 阅读本文以了解答案。

Xcode UI测试简介

本文是5月6日我文章的延伸,我们在那里学习了如何为您的项目设置XCUI框架并开始使用Swift编写Xcode UI测试。 进行检查以使您对该主题更加熟悉。

Fastlane工具入门

Fastlane是功能强大的开源工具,将帮助我们通过命令行界面执行测试,以及为我们提供测试,构建,签名和部署库的集合。 首先,我们需要安装它们:

  • 打开终端
  • 执行[sudo] gem install fastlane -NV
  • 导航到您的项目目录并运行fastlane init
  • 输入4以选择手动设置
  • 等待安装完成

现在,我们已经安装了Fastlane工具。 您的项目中应该具有创建了AppfileFastfile 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仅允许生成简单的测试报告,其中不包括屏幕截图和设备日志。 在构建测试自动化框架时,我们需要确保测试报告具有足够的信息,因此我们不必手动重新运行测试,并且可以更有效地分析测试失败。 更好的方法是使用此开源工具。 建立:

  brew安装TitouanVanBelle / XCTestHTMLReport / xchtmlreport 

成功安装后,下一步将是添加一个辅助方法,因此我们可以生成报告作为测试的一部分:

  def generate_report 
放置“正在生成测试报告...”
sh'xchtmlreport -r test_output / BoardBank.test_result'
将“测试报告成功生成”
结束

在多个设备上并行运行测试

在测试移动应用程序时,我们需要验证该应用程序在所有受支持的设备和操作系统版本上都能正常运行。 幸运的是,我们可以以最小的努力使这部分自动化。 可以在Fastfile中配置对模拟器的并行测试,我们只需要指定要测试的设备

  TEST_SIMULATORS = ['iPhone 8','iPad Air','iPhone SE','iPhone X'] 
 车道:test do 
扫描(
方案:“ BoardBank”,#项目方案名称
clean:true,#在测试执行前清理项目文件夹
设备:TEST_SIMULATORS

结束

不幸的是,在模拟器上进行测试并非总是最好的方法,因为不会出现某些问题。 在真实设备上进行测试将为我们提供更准确的测试结果。 要准备执行测试的设备,我们需要在设备上启用UI自动化:

  • 将测试设备连接到机器
  • 开启Xcode
  • 在设备上运行您的应用程序
  • 在设备上打开设置
  • 搜索开发者部分
  • 启用UI自动化

另外,我们需要禁用自动锁定,因此设备将始终准备好执行测试:

  • 导航到“显示和亮度”部分
  • 将自动锁定设置为从不

为确保系统通知不会影响测试执行,我们需要启用“请勿打扰”模式:

  • 导航到请勿打扰部分
  • 启用请勿打扰模式
  • 将静音设置为始终

该设备已配置为现在可以执行测试。 要在真实设备上执行测试,我们需要指定UDID。 您可以通过多种方式来获得它,例如。 然后,我们只需要将物理设备设置为测试目标:

  TEST_DEVICES = [ 
'platform = iOS,id = 9a31ef5bf7216fa79ec31af3f29901c209175937',
'platform = iOS,id = 8a91ef5bf2036fa49ec31af3f19902c209076390'
]
  private_lane:parrallel_device_test做 
扫描(
方案:“ BoardBank”,#项目方案名称
clean:true,#测试执行前清理项目文件夹
目的地:TEST_DEVICES,#个测试设备
result_bundle:“ TestResults”#生成测试报告

generate_report
结束

测试将在配置的设备上执行,并且将为每个设备捕获测试报告。 为确保始终生成测试报告,我们需要针对测试失败的情况编写异常处理:

 车道:device_test做 
开始
parrallel_device_test
拯救
generate_report
结束
结束

生成的HTML报告将包含每个设备的测试结果以及带有屏幕截图的测试日志。

结论

在本教程中,我们学习了如何为您的iOS项目设置Fastlane并在物理设备和模拟器上并行执行Xcode UI测试。

它将允许在Continuous Integration服务器上设置我们的测试并附加高级测试报告,以及增加测试范围并减少手动兼容性测试的工作量。 带有Application Source Code的完整Test Framework设置示例可在GitHub上获得 ,我强烈建议您进行检查以了解上下文的更多详细信息。

请继续关注更多教程和快乐测试🙂

关于作者

Maksim Akifev是一位技术熟练的质量保证工程师,在测试自动化,安全性和渗透性测试方面拥有丰富的经验,他可以帮助金融,医疗保健和网络安全等各个行业的公司构建可靠的产品。