Tag: 测试工具

iOS版Travis CI

最近,我想为我的应用程序实现持续集成。 我想很多人和我偶然发现了Travis CI上的objc.io文章。 不幸的是,这篇文章已经过时了,它是从2013年11月开始的。 同时,自从撰写本文以来,Facebook的xctool项目中一直在讨论xctool是否要支持Xcode8。但是,我们已经在Xcode 9上了。与此同时,已经发生了很多变化,文章已过时。 我个人认为objc.io应该不时测试他们的文章,或者至少要提到所使用的技术无效或无法正常工作。 由于他们没有更新他们的文章,我觉得我应该发布更新。 因此,基本上改变的是xctool has some new commands, for example test has been replaced by run-tests 。 此外, xctool不再构建您的项目,我们必须退回到xcodebuild , xcbuild或Buck(Facebook的新项目)。 假设您知道如何使用GitHub帐户将项目链接到Travis CI,我将主要讨论.travis.yml文件。 我只强调了.travis.yml文件的一些区别。 您仍然需要在objc.io文章中添加仍然正确的其他元素。 如您所见,存在一些差异。 例如:(1)我们可以安全地将语言设置为Swift,如今,(2)应该仍然可以正常工作,但是我仍然更喜欢使用xctool 。 (3)完全是错误的, 这不再起作用 。 (4)这就是正确调用xctool ! 使用xcodebuild或您喜欢并且可能已经使用的任何其他构建系统来构建工作区。 然后使用xctool运行测试。 在第14行的摘要中,如果您将-scheme TravisExampleTests更改为-scheme TravisExampleTests ,则还可以免费运行UI测试。 这需要其他配置,因为以这种方式运行将导致断言失败: NSInternalInconsistencyException, “No target application path specified via test configuration” 。 […]

使用SwiftyMocky生成模拟并简化Swift中的单元测试

简单的5点指导可将您的单元测试带入一个全新的水平。 总体来说,Swift世界最近发生了很多事情,这种趋势并没有错过对开发的一部分进行测试的机会。 尽管良好的测试实践正在传播,但对旨在帮助该过程的工具的需求也在增长。 我很高兴成为一个团队的成员之一,该团队致力于开发一种名为SwiftyMocky的解决方案。 1.模拟是测试双 一般而言,在谈论单元测试和测试时,有一整套特殊目的的对象,称为“测试双打”。 在本文中,我将仅简要介绍它们,因为需要理解SwiftyMocky背后的整个概念。 Test Doubles背后的故事很简单。 由于缺乏更好的词汇,经典的测试方法通常依赖于状态验证。 我们为sut及其依赖项创建初始状态,然后验证执行测试后的状态是否符合我们的期望。 尽管如此,并不是在每个测试用例中我们都在测试sut ,我们可以使用实际的实现作为其依赖项。 数据库操作或网络调用就是一个很好的例子。 我们真的不想在这里进行真正的通话,因此sut尝试进行的了解通常足以确保有效性。 另一个很好的例子(来自Martin Fowler的帖子)是发送电子邮件-很难从测试角度进行验证。 这就是我们的特殊情况对象出现的地方。 基于Gerard Meszaros提出的词汇(我个人觉得非常有用),我将其分为以下几类: 虚拟 :完全没有实现,该对象的整体唯一目的是满足依赖关系要求。 伪造的 :简单但有效的实现,通常采用捷径。 例如,伪存储将宁愿使用某些内存数据结构(如数组或字典),而不是包装核心数据操作。 在提供与具体实现相同的功能的同时,它使状态验证更加容易。 存根 :包含预定义的响应和答案,通常严格针对特定测试用例定义。 Spy :存根,不仅返回预定义的答案,还记录调用的方法。 模拟 :预先设定的期望值,可以验证sut的行为是否符合预期。 在本文的其余部分,我们将重点介绍Mock ,因为它可以处理正确测试所需的大多数内容。 请注意,虽然上述单词在测试双精度类型之间严格区分,但是在大多数工具中, Mock 都是扩展的,具有 Stub 和 Spy的 组合功能 。 在 SwiftyMocky中, 我们执行相同的操作,因此,每当引用 Mock时 ,我们的意思是同时提供 Stub 和 Spy 功能的对象。 尽管拥有Mock对象的想法很明确,并且收益不能被夸大,但这给我们带来了一个问题。 必须编写模拟实现,如果有适当的层分离,则在大型项目中这可能会成为相当大的开销。 在具有适当反映的语言中,有许多库和框架可以在运行时创建Mock ,使您可以选择一种最适合您的测试风格的库。 […]

用Charles Proxy骇客

今天,让我们谈谈“中间人”方法, 该方法允许任何人跟踪智能手机或计算机上的浏览器发送和接收的所有流量。 有时,您无法将所需的数据放入应用程序中,但是如果您可以在将浏览器或应用程序接收到的内容发送到智能手机之前对其进行修改,则可以使用一种非常方便的方法来测试点播数据。 这就是我将在本文中通过实际示例进行解释的内容。 我将重点介绍在台式机浏览器中进行测试,以及Android和iOS应用程序中的测试。 为此,我将使用Charles Proxy。 稍后,在另一篇博客文章中,我可能会写关于mitmproxy的信息,它是免费的开放源代码,但使用起来不太方便。 因此,在本文中,我将详细介绍如何在MacBook,台式机浏览器和iPhone上使用Charles Proxy。 中间代理人 什么是Charles Proxy? Charles Proxy是HTTP和HTTPS的交互式中间人代理。 它使任何人都可以查看其一台计算机与Internet之间的所有HTTP和SSL / HTTPS通信。 这包括请求,响应和HTTP标头(其中包含cookie和缓存信息)。 也可以在将请求发送到服务器之前对其进行修改,或者,这就是我将在此处描述的,收到的响应会带来很多机会。 如何安装Charles Charles可用于Windows,MacOS和Linux。 只需在“下载”页面上下载所需的那个,然后按照说明进行即可。 您将获得一个试用版,因为Charles不是免费的(而mitmproxy是免费的),但这是值得的。 我必须承认我首先使用了mitmproxy,但是Charles的使用方式更简单,如果您确实需要代理,则可能不后悔这笔费用。 如何捕捉事物……? …将显示在桌面浏览器中 如果要从浏览器捕获数据包,则必须将其配置为使用Charles。 默认情况下,它配置为使用端口8888,但是您可以通过打开“代理设置”来为所需的端口进行修改。 您可以先打开“帮助”,然后打开“本地IP地址”,以了解访问浏览器需要使用哪些IP,但是大多数时候,您可能会使用localhost(127.0.0.1)在本地进行操作。 让我们配置浏览器。 转到代理设置,然后添加127.0.0.1作为代理地址,并添加8888作为端口。 现在,您将捕获所有请求和响应的数据包,但仅适用于http服务器。 例如,如果Charles捕获了https://www.lyontesting.fr,您将看到此响应,但阅读起来不太舒服。 只需右键单击该请求,然后选择“启用SSL代理”。 然后在浏览器中刷新页面,您会发现结果并不理想。 这是因为www.lyontesting.fr页面被重定向到lyontesting.fr。 转到“代理/ SSL代理设置”,并调整位置主机,以匹配您要捕获的所有情况。 有趣的是,您可以修改将发送到浏览器的响应。 为此,只需添加这样的断点。 在“代理/断点设置…”中,选择“启用断点”,使用host = lyontesting.fr添加一个检测POST请求的断点,然后选择“响应”。 现在再次刷新页面,响应将不会发送到浏览器,正在等待您的批准。 在“编辑回复”标签中,您可以修改html。 在这里,我将“里昂测试”替换为“世界测试”。 结果显示在浏览器中。 现在,您可能认为可以使用浏览器的开发工具非常简单地完成此操作,并且您是对的。 但是这些简单的步骤向您展示了Charles和代理的基础知识。 这些东西也可以用于智能手机应用程序,这就是我们现在所看到的。 …将在智能手机应用中使用 Charles Proxy现在也作为iOS应用程序提供。 使用它,您可以指定要在记录中包括或排除的主机名(例如,仅对应用程序服务器的请求),与SSL代理相同。 […]