如何在iOS测试中使用Chaos

您听说过无穷大的猴子定理吗? 内容如下:

“如果您让猴子在打字机上敲击随机键,在无限的时间内,它会扑灭任何预期的书面文字”

还有其他版本使用无限数量的猴子而不是时间。 作为应用程序开发人员,我们有类似的情况。 我们的应用程序被大量以无法想象的方式使用我们的应用程序的用户使用(好吧,他们被编号了,而不是猴子,但是仍然相似。) 结果,他们将发现我们从未预料到的错误。 那么我们该怎么做呢?

Netflix创造了一个新名词:混沌工程。 这样做的目的是在生产代码中引入混乱,以发现系统在出现故障时的行为。 他们发表了他们的混乱猴子,杀死了他们生命系统的实例。 我们也许可以在后端系统上使用它,但是总的来说,我们的应用程序有其自身的问题,我们不能仅仅在用户使用它们时就杀死它们;)。

所以,我们能做些什么?

单元测试

在为算法编写单元测试时,通常必须减少输入值,因为它们可能很大。 相反,我们考虑一些极端情况并进行测试。 可悲的是,这可能导致我们遗漏了一些错误。 考虑到上述在测试中添加受控混乱的想法,我们可以开始使用特定范围内的随机值。 这些值需要生成,并且我们的算法必须包含一个条件(意味着条件始终为真)。

幸运的是,我们不必自己写所有这些随机性。 SwiftCheck已创建为我们做到这一点。 让我们开始吧!

阅读以下说明时,请考虑将电子邮件作为我们的域结构:

 结构电子邮件{ 
var local:字串
var host:字符串
var tld:字符串
}

发电机

在SwiftCheck中,您可以使用生成器来创建任意数据。 尝试生成电子邮件地址时,我们必须生成三个部分:本地,主机和TLD。 本地部分可以包括大写和小写字母,数字和某些种类的字符。

完成此操作后,我们可以构建库并以通常的方式包括它们:

 迦太基建造 

完成所有这些之后,我们可以添加相应的测试:

结论

即使是最优秀的开发人员,也无法预测其应用程序可能具有的所有状态。 这导致没有测试所有内容。 由于没有人是完美的,并且我们无法测试所有内容,因此我们的应用程序容易出现错误。 找到这些错误很困难,但是混沌测试可以提供帮助。 在单元测试中,我们可以在测试算法时测试各种属性。 在UI测试中,我们可以使用猴子来完成应用程序的操作,这是我们从未想到的。

听起来需要做很多工作,但是由于这可以防止生产中的重大错误,因此我认为这是值得的。 如上文所述,它甚至可以用于查找生产中的错误。 如果您感兴趣,它是UIWebView。 从iOS 9开始,似乎每个导航都会创建很多手势识别器。 过渡到其他页面时,这些页面不会被释放,因此会保留下来。 当您触摸屏幕时,所有这些动作都会使主队列超载,从而使您的应用无响应。 最后,看门狗杀死了它。

上一篇:黄金大师测试