区块链技术博客
www.b2bchain.cn

WWDC20 10221 – 更快地获得测试结果求职学习资料

本文介绍了WWDC20 10221 – 更快地获得测试结果求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

这个 session 基于一个基础概念 – 测试反馈环,如下图所示。
WWDC20 10221 - 更快地获得测试结果
这个测试反馈环其实并不难理解,环的一开始是写测试代码,然后跑测试用例,最后是解读测试结果。你可以根据测试结果决定是继续写更多的测试还是直接发布。很显然,应当让这个环的周期越短越好,因为这就意味着你能更快的拿到测试结果,也就进而意味着你可以更快的发布你的 feature。

下面我们将讨论 Xcode 12 中一些新的特性,这些新的特性能保证你的测试总能顺利结束,我们也将讨论怎么利用这些诊断报告来找到阻碍测试正常进行的原因,最后将讨论怎么通过并行测试更快地拿到测试结果。

保证测试正常结束

我们都会有遇到测试 hang 住,然后永远执行不完的情况,这会让我们非常不爽,遇到了只能取消测试任务。通常总结下来测试 hang 住这是由以下原因造成的:

  • 死锁,当两段代码都在等待对方先完成时发生
  • 是真的执行很慢
  • 没有选择恰当的 timeout 时间
  • 主线程占用太多 CPU 时间

为了避免 hang 的问题,Xcode 增加了一个新的选项,即允许执行时间 (Execution Time Allownace), 这个是指单个测试能执行的最大的时间。当测试超过这个给定的时间,Xcode将会抓取 spindump,然后杀掉 hang 住的测试,继续跑剩下的测试。spindump 是非常有用的,它可以告诉你,每个线程在哪些函数上花费了多少时间;如果测试停住了,从 spindump 也可以看出停在哪些函数上。我们可以从 Terminal 运行 spindump 命令即可抓取,或者如果你更喜欢 GUI 也可以用“活动监视器”来抓取。

默认情况下,一个测试会有 10 分钟的允许执行时间。如果一个测试在 10 分钟之内跑完了,那么时间将重置,下一个测试也将会有 10 分钟的时间。如果你针对所有的测试都想设置更多的执行时间,你可以在 Test Plan 设置项中定制默认配额;如果你只是想针对某个特定的测试用例定制时间的话,你可以用 executionTimeAllowance 这个API来设置。注意这个 executionTimeAllowance 实际是一个属性值,单位是秒,而且是以 60 秒为间隔向上取整。具体来说,如果不足 60 秒,将被当做 60 秒钟;如果是 100 秒,那将会是 120 秒。
WWDC20 10221 - 更快地获得测试结果
WWDC20 10221 - 更快地获得测试结果

下面我们来看一个具体的例子,比方说我们有下面的测试代码。
WWDC20 10221 - 更快地获得测试结果
testUpdatingSmoothiesFromServer 方法里面会用到一个方法叫 fetchSynchronouslyFromServer,这个方法是一个有问题的方法,永远在执行停不下来。下面我们在 Test Plan 中设置 Test Timeouts = on,然后重新运行一下,超过10分钟后,就会抓到一份 spindump。具体如何操作请看下面两张图。
WWDC20 10221 - 更快地获得测试结果
WWDC20 10221 - 更快地获得测试结果
那么10分钟超时之后,测试结果里面就会有一份 txt 文档,就是我们的 spindump 文件。
WWDC20 10221 - 更快地获得测试结果
双击打开 spindump 文件,可以看到它一般分为两部分,元数据( metadata )以及每个线程正在执行的方法 trace。我们在这个文件快速搜索一下我们刚才那个 fetchSynchronouslyFromServer 方法,发现它又调用了一个 helper method 叫做 performGETRequest,这是一个疑点。我们去代码里面查看后发现 fetchSynchronouslyFromServer 在尝试获取一个锁,而在 performGETRequest 方法里同样在尝试获取同一个锁,这样就形成了死锁。
WWDC20 10221 - 更快地获得测试结果
WWDC20 10221 - 更快地获得测试结果
为了解决问题,去掉 performGETRequest 方法里面的锁之后就好了,也就是删掉上图中被选中部分。

有三种办法可以自定义允许执行时间:
第一个是在 Test Plan 设置里面,如下图所示:
WWDC20 10221 - 更快地获得测试结果
第二个就是在 xcodebuild 命令选项里加上-default-test-execution-time-allowance <seconds>

这个 session 基于一个基础概念 – 测试反馈环,如下图所示。
WWDC20 10221 - 更快地获得测试结果
这个测试反馈环其实并不难理解,环的一开始是写测试代码,然后跑测试用例,最后是解读测试结果。你可以根据测试结果决定是继续写更多的测试还是直接发布。很显然,应当让这个环的周期越短越好,因为这就意味着你能更快的拿到测试结果,也就进而意味着你可以更快的发布你的 feature。

下面我们将讨论 Xcode 12 中一些新的特性,这些新的特性能保证你的测试总能顺利结束,我们也将讨论怎么利用这些诊断报告来找到阻碍测试正常进行的原因,最后将讨论怎么通过并行测试更快地拿到测试结果。

保证测试正常结束

我们都会有遇到测试 hang 住,然后永远执行不完的情况,这会让我们非常不爽,遇到了只能取消测试任务。通常总结下来测试 hang 住这是由以下原因造成的:

  • 死锁,当两段代码都在等待对方先完成时发生
  • 是真的执行很慢
  • 没有选择恰当的 timeout 时间
  • 主线程占用太多 CPU 时间

为了避免 hang 的问题,Xcode 增加了一个新的选项,即允许执行时间 (Execution Time Allownace), 这个是指单个测试能执行的最大的时间。当测试超过这个给定的时间,Xcode将会抓取 spindump,然后杀掉 hang 住的测试,继续跑剩下的测试。spindump 是非常有用的,它可以告诉你,每个线程在哪些函数上花费了多少时间;如果测试停住了,从 spindump 也可以看出停在哪些函数上。我们可以从 Terminal 运行 spindump 命令即可抓取,或者如果你更喜欢 GUI 也可以用“活动监视器”来抓取。

默认情况下,一个测试会有 10 分钟的允许执行时间。如果一个测试在 10 分钟之内跑完了,那么时间将重置,下一个测试也将会有 10 分钟的时间。如果你针对所有的测试都想设置更多的执行时间,你可以在 Test Plan 设置项中定制默认配额;如果你只是想针对某个特定的测试用例定制时间的话,你可以用 executionTimeAllowance 这个API来设置。注意这个 executionTimeAllowance 实际是一个属性值,单位是秒,而且是以 60 秒为间隔向上取整。具体来说,如果不足 60 秒,将被当做 60 秒钟;如果是 100 秒,那将会是 120 秒。
WWDC20 10221 - 更快地获得测试结果
WWDC20 10221 - 更快地获得测试结果

下面我们来看一个具体的例子,比方说我们有下面的测试代码。
WWDC20 10221 - 更快地获得测试结果
testUpdatingSmoothiesFromServer 方法里面会用到一个方法叫 fetchSynchronouslyFromServer,这个方法是一个有问题的方法,永远在执行停不下来。下面我们在 Test Plan 中设置 Test Timeouts = on,然后重新运行一下,超过10分钟后,就会抓到一份 spindump。具体如何操作请看下面两张图。
WWDC20 10221 - 更快地获得测试结果
WWDC20 10221 - 更快地获得测试结果
那么10分钟超时之后,测试结果里面就会有一份 txt 文档,就是我们的 spindump 文件。
WWDC20 10221 - 更快地获得测试结果
双击打开 spindump 文件,可以看到它一般分为两部分,元数据( metadata )以及每个线程正在执行的方法 trace。我们在这个文件快速搜索一下我们刚才那个 fetchSynchronouslyFromServer 方法,发现它又调用了一个 helper method 叫做 performGETRequest,这是一个疑点。我们去代码里面查看后发现 fetchSynchronouslyFromServer 在尝试获取一个锁,而在 performGETRequest 方法里同样在尝试获取同一个锁,这样就形成了死锁。
WWDC20 10221 - 更快地获得测试结果
WWDC20 10221 - 更快地获得测试结果
为了解决问题,去掉 performGETRequest 方法里面的锁之后就好了,也就是删掉上图中被选中部分。

有三种办法可以自定义允许执行时间:
第一个是在 Test Plan 设置里面,如下图所示:
WWDC20 10221 - 更快地获得测试结果
第二个就是在 xcodebuild 命令选项里加上-default-test-execution-time-allowance <seconds>

这个 session 基于一个基础概念 – 测试反馈环,如下图所示。
WWDC20 10221 - 更快地获得测试结果
这个测试反馈环其实并不难理解,环的一开始是写测试代码,然后跑测试用例,最后是解读测试结果。你可以根据测试结果决定是继续写更多的测试还是直接发布。很显然,应当让这个环的周期越短越好,因为这就意味着你能更快的拿到测试结果,也就进而意味着你可以更快的发布你的 feature。

下面我们将讨论 Xcode 12 中一些新的特性,这些新的特性能保证你的测试总能顺利结束,我们也将讨论怎么利用这些诊断报告来找到阻碍测试正常进行的原因,最后将讨论怎么通过并行测试更快地拿到测试结果。

保证测试正常结束

我们都会有遇到测试 hang 住,然后永远执行不完的情况,这会让我们非常不爽,遇到了只能取消测试任务。通常总结下来测试 hang 住这是由以下原因造成的:

  • 死锁,当两段代码都在等待对方先完成时发生
  • 是真的执行很慢
  • 没有选择恰当的 timeout 时间
  • 主线程占用太多 CPU 时间

为了避免 hang 的问题,Xcode 增加了一个新的选项,即允许执行时间 (Execution Time Allownace), 这个是指单个测试能执行的最大的时间。当测试超过这个给定的时间,Xcode将会抓取 spindump,然后杀掉 hang 住的测试,继续跑剩下的测试。spindump 是非常有用的,它可以告诉你,每个线程在哪些函数上花费了多少时间;如果测试停住了,从 spindump 也可以看出停在哪些函数上。我们可以从 Terminal 运行 spindump 命令即可抓取,或者如果你更喜欢 GUI 也可以用“活动监视器”来抓取。

默认情况下,一个测试会有 10 分钟的允许执行时间。如果一个测试在 10 分钟之内跑完了,那么时间将重置,下一个测试也将会有 10 分钟的时间。如果你针对所有的测试都想设置更多的执行时间,你可以在 Test Plan 设置项中定制默认配额;如果你只是想针对某个特定的测试用例定制时间的话,你可以用 executionTimeAllowance 这个API来设置。注意这个 executionTimeAllowance 实际是一个属性值,单位是秒,而且是以 60 秒为间隔向上取整。具体来说,如果不足 60 秒,将被当做 60 秒钟;如果是 100 秒,那将会是 120 秒。
WWDC20 10221 - 更快地获得测试结果
WWDC20 10221 - 更快地获得测试结果

下面我们来看一个具体的例子,比方说我们有下面的测试代码。
WWDC20 10221 - 更快地获得测试结果
testUpdatingSmoothiesFromServer 方法里面会用到一个方法叫 fetchSynchronouslyFromServer,这个方法是一个有问题的方法,永远在执行停不下来。下面我们在 Test Plan 中设置 Test Timeouts = on,然后重新运行一下,超过10分钟后,就会抓到一份 spindump。具体如何操作请看下面两张图。
WWDC20 10221 - 更快地获得测试结果
WWDC20 10221 - 更快地获得测试结果
那么10分钟超时之后,测试结果里面就会有一份 txt 文档,就是我们的 spindump 文件。
WWDC20 10221 - 更快地获得测试结果
双击打开 spindump 文件,可以看到它一般分为两部分,元数据( metadata )以及每个线程正在执行的方法 trace。我们在这个文件快速搜索一下我们刚才那个 fetchSynchronouslyFromServer 方法,发现它又调用了一个 helper method 叫做 performGETRequest,这是一个疑点。我们去代码里面查看后发现 fetchSynchronouslyFromServer 在尝试获取一个锁,而在 performGETRequest 方法里同样在尝试获取同一个锁,这样就形成了死锁。
WWDC20 10221 - 更快地获得测试结果
WWDC20 10221 - 更快地获得测试结果
为了解决问题,去掉 performGETRequest 方法里面的锁之后就好了,也就是删掉上图中被选中部分。

有三种办法可以自定义允许执行时间:
第一个是在 Test Plan 设置里面,如下图所示:
WWDC20 10221 - 更快地获得测试结果
第二个就是在 xcodebuild 命令选项里加上-default-test-execution-time-allowance <seconds>

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » WWDC20 10221 – 更快地获得测试结果求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们