iOS系统下进行单元测试的测试计划

发表于:2022-9-30 09:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:张聪_2048    来源:掘金

  一、测试计划简介
  1.1、什么是测试计划?
  Xcode 测试计划提供了一种运行各种测试配置的测试选择的方法。测试计划是一个带有.xctestplan扩展名的JSON文件,您可以将其添加到Xcode项目中,并从方案中引用。它有三个主要要素:
  测试目标:一个或多个测试目标(单元或UI)。您不必在测试目标中运行所有测试。对于每个测试计划,您可以选择计划将运行的测试,以及测试是否可以并行运行。
  默认选项:一组默认(共享)设置,可以被特定配置覆盖。这些是您通常在方案编辑器中找到的设置:启动参数、本地化设置、屏幕截图设置、文本执行(字母或随机)、运行时调试选项Sanitizer、线程检查器和malloc守卫。
  配置:覆盖默认选项的一个或多个配置。测试计划对所选测试运行多次,每次对每种配置运行一次。
  1.2、它们有什么好处?
  测试计划的一些可能用途:
  使用不同的调试选项Sanitizer/诊断器运行测试:您不能同时启用地址和线程调试选项Sanitizer进行测试。使用测试计划,我们可以创建两种配置,一种启用地址调试选项Sanitizer,另一种启用线程调试选项Sanitizer。运行测试计划,然后运行我们的测试两次,每种调试选项Sanitizer一次,以便使用malloc诊断程序运行。
  测试多个本地化:为您支持的每种语言创建配置。您将应用程序语言和区域设置为配置的一部分。这也是为本地化程序生成屏幕截图的好方法。
  运行具有特定配置的选定测试:例如,您不希望性能测试并行运行。
  不同的测试范围:我喜欢在点击 Command + U 时默认运行一组快速测试。我还想要一套针对几种配置运行的全套单元、用户界面和性能测试。测试计划使设置变得容易得多。
  二、新建测试计划
  2.1、创建TestPlan
  2.1.1、新建xctestplan文件
  如下图所示新建TestPlan文件,命名ZJHUnitTestPlan,并保存在了 ZJHTestPlans目录中。也可以从Xcode菜单中:Product>Scheme>Convert Scheme to use Test Plans,新建TestPlan文件。
  2.1.2、添加测试目标
  选中Tests一栏,然后选择需要执行的单测用例。
  2.1.3、默认设置和新配置
  选择测试后,单击Configurations选项卡。新的测试计划具有共享(默认)设置和名为Configuration 1的单一配置。从共享设置开始。与默认设置不同的设置以粗体显示,我们把执行顺序更改为随机,并将Address Sanitizer改为On。
  2.2、查看.xctestplan文件
  可以如下图所示,查看我们刚刚新建的.xctestplan文件。
  2.3、配置Scheme并运行
  为了和之前的Scheme做区分,我这边copy了一个新的Scheme:ZJHUnitTestDemoTestPlan。然后在Test部分中,单击Convert to use Test Plans…
  在出现的弹出窗口中,选择Choose Test Plan,然后单击Convert…(也可以选择Create empty test plan,重建个新的)。然后选择ZJHUnitTestPlan.xctestplan,然后点击Add。
  之后,按Command-U运行测试并查看Test navigator,您会看到,在新的测试计划中,只有选择的测试用例才会执行。
  三、使用场景示例
  3.1、示例准备
  准备一个页面,支持中文简体、中文繁体,以及英文,然后计划在中国大陆、中国台湾、美国上线。点击下载Demo:ZJHUnitTestDemo
  3.2、新建Testplan
  现在我们新建一个ZJHMultilingualTestPlan.xctestplan,可以针对几种语言和地区运行UI测试。选择ZJHMultilingualTestPlan.xctestplan。在Configurations选项卡中,通过按Enter并替换现有文本,将Configuration 1重命名为America。在配置设置中,将Application Language设置为English。将Application Region设置为United States。仍在Configurations选项卡中,单击+添加新配置。选择新创建的配置文件,然后按Enter将其重命名为China,在China配置中,将Application Language设置为Chinese,Simplified。将Application Region设置为China Mainland。同理继续添加Taiwan,语言和地区配置为Chinese,Traditional和Taiwan。
  然后再将Testplan添加到Scheme中:
  3.3、运行Testplan
  先点 Test navigator最上面,切换使用ZJHMultilingualTestPlan,转到ZJHTestPlanUITests,右击菱形,然后弹框中选择Run in All Configurations。
  运行结束后,我们可以查看对应的测试报告,可以看到三个配置都有运行,然后China和Taiwan运行成功了,America运行失败,查看失败信息和截图,我们可以发现英文页面下,出现了中文。修改过后,再重新运行就能全部正确了。
  四、测试时分析APP
  Xcode提供了多种工具来分析您的应用程序的运行情况,但其中许多工具无法一起使用或会影响性能。您还必须记住该工具存在,并打开(和关闭)它们,并注意结果。好消息!您可以将分析工具设置为测试计划的一部分!转到ZJHMultilingualTestPlan计划的配置之一。看一下底部的设置:
  4.1、Sanitizers
  这三个sanitizers将在您的应用程序运行时检查以下内容:
  Address Sanitizer (ASan)检测到代码中的内存使用错误。启用ASan可能会稍微降低测试速度并增加内存使用量,但是确保您的代码没有内存冲突是值得的。
  Thread sanitizer(TSan)可帮助您检测data races,其中多个线程以不安全的方式访问和修改内存区域。这些都是很难预测的,因此很难找到和调试。
  Undefined Behavior Sanitizer(UBSan)检测到诸如除以零或访问其边界之外的数组之类的问题。
  4.2、Runtime API Checking
  默认情况下,Main Thread Checker 处于启用状态,并且在测试时应保持这种方式。如果在后台线程上使用UIKit或AppKit之类的框架,它将发出警告。您应该只在主线程中更新UI。
  4.3、Memory Management
  Malloc Scribble, Malloc Guard Edges and Guard Malloc帮助您检测释放的内存的使用情况和缓冲区溢出(buffer overruns)。后者意味着您的程序在将数据写入缓冲区时会超出缓冲区的范围。这导致覆盖邻近缓冲存储器位置的存储。
  注意:不能同时使用这些工具,也不能在同一配置中同时使用ASan和TSan。
  启用Zombie Objects设置后,程序中的对象达到保留计数0时将不会被释放。相反,它们将像僵尸一样半活半死。当程序尝试访问此类对象时,您会收到警告。
  另外,要了解有关Xcode中的内存管理工具的更多信息,请查看Apple的Malloc Debugging文档。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号