iOS开发人员的Charles技巧和窍门:模拟
注意:本文中的几乎所有内容均可用于iOS,Android,Web或您正在使用的任何技术的任何平台。
在第一篇文章《查尔斯:iOS开发人员的技巧和窍门》(第1卷)中,我就如何配置和开始使用查尔斯做了一个友好的分步指南。 正如我在那篇文章中提到的,查尔斯打开了另一个世界的大门,从可视化简单请求到即时模拟数据以伪造不存在的端点。 在本文中,我将向您展示如何使用Charles来模拟来自现有或不存在的端点的数据。
改写
让我们从一个简单的技巧开始。 我想在其中更改“ 浏览”部分 Meetups应用程序,并使用Charles更改我的位置以查看外观。 例如,我将更改端点中的某些参数以伪造我在日本的位置。
对于“ 探索 ”部分,他们使用端点调用api.meetup.com/self/home,我们可以添加一些与位置有关的参数,我们将更改纬度和经度,并指定要探索的城市。
Charles使我们能够使用位于工具>重写中的重写工具来处理HTTP事务中的任何数据。 该工具使我们能够在执行请求之前更改请求的不同部分,甚至操纵响应。 确保检查“ 启用重写”指示器。
对于此示例,我们要操纵纬度和经度参数,因此我们需要添加一个新的重写项。 我们将其称为: Meetup家庭位置模拟。
该位置是指您要模拟的URL。 因为我们想为多个位置创建一个可重用的Mock,所以我们指定https://api.meetup.com/self/home 作为我们的网址。 如果仅将完整的URL粘贴到主机文件中,则速度会更快,Charles会自动解析URL并为您填充其他字段。
让我们继续添加一些重写位置参数的规则。 添加新规则,然后在“ 类型”下拉列表中选择您要更改的内容。 对于此示例,请使用Modify Query Param 。 由于我们只想操纵请求 ,因此在“位置”部分中选择“ 请求 ”。 在“ 匹配”部分中,指定要查找的参数,并在“ 替换”部分中指定要更改的值。 考虑到139.77和35.67是东京的经度和纬度,因此规则如下所示。
在测试之前,请确保您按“ 应用”。
这是我们的重写。 我建议您花时间弄乱更多的位置或不同的url参数,以了解应用程序如何处理不同的响应。
操纵响应体
正如您在“ 重写规则”窗口中看到的那样,我们有很多选项可以处理数据。 通常,在我的工作中,我需要测试一些仅针对特定用户或服务器通常不返回的数据显示的行为,例如某些状态或错误消息。 因此,让我们使用Charles嘲笑全新的Category来操纵Meetup App的Category部分。
我注意到, home端点以符合以下结构的类别列表作为响应:
{
“ id”:242,
“简称”:“户外探险”,
“名称”:“户外与冒险”,
“ sort_name”:“户外与冒险”,
“照片”:{
“ id”:450131943,
“ highres_link”:“ https://secure.meetupstatic.com/photos/event/2/e/a/7/highres_450131943.jpeg”,
“ photo_link”:“ https://secure.meetupstatic.com/photos/event/2/e/a/7/600_450131943.jpeg”,
“ thumb_link”:“ https://secure.meetupstatic.com/photos/event/2/e/a/7/thumb_450131943.jpeg”,
“类型”:“事件”,
“ base_url”:“ https://secure.meetupstatic.com”
}
我们可以手动编写我们自己的模型并将其添加到列表中。 只需添加一个新的重写项,添加与上一个示例相同的位置,最后添加一个新的重写规则。 这次,请确保在响应中操作主体 ,然后在替换部分中粘贴新响应。 作为示例,我将此新项目添加到当前响应中:
{
“ id”:12345678,
“短名称”:“模拟元素”,
“名称”:“模拟类别”,
“ sort_name”:“模拟类别”,
“照片”:{
“ id”:450131943,
“ highres_link”:“ https://secure.meetupstatic.com/photos/event/2/e/a/7/highres_450131943.jpeg”,
“ photo_link”:“ https://secure.meetupstatic.com/photos/event/2/e/a/7/600_450131943.jpeg”,
“ thumb_link”:“ https://secure.meetupstatic.com/photos/event/2/e/a/7/thumb_450131943.jpeg”,
“类型”:“事件”,
“ base_url”:“ https://secure.meetupstatic.com”
},
“ category_ids”:[3,23]
}
共享和导入模拟
有时其他团队成员需要模拟与您模拟的数据完全相同的数据,通过Charles,您可以共享您所做的重写或从其他人导入重写。 只需选择要共享的模拟,然后选择Export ,它将生成一个XML文件。 如果需要导入,请索要XML文件,然后按Import ,选择正确的文件即可。
这是我们在前面的示例中所做的模拟:https://github.com/migueloruiz/Charles-Tips-and-Tricks/blob/master/Charles%20Tips%20and%20triks%20Vol%202.xml
使用本地文件作为端点
如果您正在处理大型文件并在JSON中模拟不同的参数,则使用重写工具可能会变得非常混乱和缓慢。 有了Map Local的帮助,该工具可以帮助我们使用本地文件来模拟服务。
例如,我们将使用“ 地图本地”工具再次操作“ 浏览”屏幕。 只需打开“ 工具”>“ 本地地图”,请确保已选中“ 启用本地地图” 。
按添加并配置URL,我们将再次模拟https://api.meetup.com/self/home 但这一次在“ 映射要选择的部分”部分中选择要映射的文件的本地路径。
您可以复制上一个呼叫的内容并生成本地.json或使用以下文件:https://github.com/migueloruiz/Charles-Tips-and-Tricks/blob/master/Home.json
如果将此工具与某些文本编辑器结合使用,则更改数据的过程将像您看到的一样快速,简便。
重写与地图本地
该工具有很多共同点,可以与简单的模拟完美配合,但是对于更复杂的模拟,请考虑以下几点:
重写工具提供了一种精细的方式来处理所有类型的请求数据(URL,路径,HTTP代码,标头,正文等)。 当您需要进行一些更改,但是数据量很大,可能会有些混乱和缓慢,这是完美的选择。 因此,我建议将所有数据更改拆分为不同的规则。
“地图本地”工具无法像“重写”工具那样以特定方式处理数据。 还请注意,此方法总是要模拟200 HTTP状态,因此您不能模拟错误。 但是,在您正在开发新功能而尚未使用的端点的情况下,这是完美的选择。 因此,此工具只需单击几下,即可帮助您伪造服务器。
结论
正如我们在本文中所探讨的那样,Charles是一个出色的工具,不仅用于调试,而且还是用于烟雾测试并加快开发时间的出色工具。
作为一种好习惯,我希望与我们的团队共享一个共享文件夹或存储库(也可以与Android和Web团队共享),其中包含我们制作的所有模拟内容。 它可以帮助我们在几秒钟内测试不同的情况,并保留和扩展端点工作方式的伪文档。
在下一篇文章中,我们将讨论网络,并展示如何在不同的网络条件下使用Charles来测试您的应用程序,并让我们意识到应用程序中可能出现的问题。