Jayden 过去两年一直在亚马逊担任首席软件工程师,他所在的团队负责处理一些面向用户的组件。为了了解亚马逊在测试网站上的细节,我对 Jayden 进行了一次采访。
问题 1:加入亚马逊之前,你在哪里工作?
Jayden:谷歌。我曾在 YouTube 团队任职,在 2015 年作为实习生加入。
问题 2:你目前的职务是什么?
Jayden:我担任首席软件工程师,负责一些用于购买产品的面向用户的组件。
问题 3:你们在测试上面临的最大挑战有哪些?
Jayden:跨浏览器测试。所有组件都必须在不同的浏览器(包括 Internet Explorer 和 Safari)上有着完美的视觉和运行体验。
问题 4:你们为什么还在支持 IE 浏览器?
Jayden:数据显示,我们有一定比例的用户还在使用 IE。因此,我们不能让这些用户失望。
问题 5:当你发现这一事实时,不会感到震惊吗?
Jayden:不,当我在谷歌工作时,我们也需要支持 IE。在那里工作的人们的心态是,一个好网站应该在所有浏览器中都能正常运行,没有人对此抱有疑问。
问题 6:你们是否进行过手动测试?
Jayden:是的,一个很好的例子是探索性测试,这里你无法真正实现自动化。但是,我们所有的功能测试都是自动化的。这样我们就可以频繁发版而不至于精神崩溃。
问题 7:你的团队使用的是 Selenium、Cypress 还是 Puppeteer?
Jayden:哪个都不用。我们探索了这些库并做了 POC,结果并不令人鼓舞。
问题 8:你能解释一下为什么吗?
Jayden:原因各有不同。Selenium 很难管理。它支持所有主流浏览器,但不支持即插即用,因此你需要为每种浏览器的某些操作编写不同的逻辑。
Cypress 的功能非常有限。在 Internet Explorer 和 Safari 上无法使用。它不支持多个浏览器标签。它不支持诸如悬停之类的原生事件。要让它与基本的 iframe 搭配使用,你需要做大量的改动。在亚马逊,没有人会使用 Cypress。Puppeteer 还没有足够的跨浏览器支持,它仍然需要很多改进。
问题 9:你们正在使用哪些库或工具?
Jayden:去年,我们的团队一直在使用 Endtest。
问题 10:你们为什么选择这个工具?
Jayden:选择工具时,我们总会从各个角度对其做分析:灵活性、易用性、投资回报率、可靠性等。去年,我们对 Endtest 进行了概念验证,结果非常不错。
就个人而言,我喜欢它可以原生处理跨浏览器测试的优势,它无需额外的调整。它让我们可以花更多时间来构建产品,而不必重新发明轮子来构建我们自己的内部测试框架。
问题 11:Endtest 是一种无代码工具,你们难道不需要更大的灵活性吗?
Jayden:在构建功能性自动化测试时,你需要变量、if 语句、循环和重用步骤的能力。Endtest 具有所有这些功能,它与大多数脚本语言一样灵活。灵活性很重要,但这并不是唯一要考虑的事情。如果我们仅基于灵活性来选择语言和库,那么只能得出结论:我们必须编写机器代码(写一堆 0 和 1)。
问题 12:为什么这么多团队仍在编写自己的测试框架?
Jayden:我相信,如今这种情况只会发生在较小的公司中,在过去 3 年中,我从未听说过像亚马逊、Airbnb、谷歌、Stripe、Instacart、PagerDuty 这样的公司做出过这样的事情。
从历史上看,我认为你可以在 2000 年代初找到原因。当时,人们使用的是老旧的测试记录程序,它们真的很差,还在使用屏幕坐标或图像识别来识别元素。因此人们将各种库(例如 Selenium)拼接在一起,开始构建自己的内部测试框架。这些内部框架中的绝大多数(我们称其为弗兰肯斯坦博士框架)一直处于“差一点准备就绪”的状态。
我听过很多故事。有的公司安排一到两名作风保守的员工在内部测试框架上做了数月或数年的工作,直到它成为无法使用的庞然大物为止。然后其他人出现,使用不同的语言或库开始重复相同的过程。
问题 13:你觉得为什么团队最终会做出如此糟糕的决定?
Jayden:进行全面的分析可以防止此类错误。你可以先考虑投资回报率,也就是你花了多少时间和资源进行这项工作,以及你将从多久开始从这项工作中获得回报。
我们来看一个简单的例子:贵公司需要一个视频会议工具,你需要选择是每月支付 18 美元的 Zoom 订阅费用,还是使用 WebRTC 构建自己的视频会议工具(WebRTC 是谷歌的免费开源项目)。开发人员可能会选择第二个选项,因为它听起来更有趣,更吸引人,让他们可以在简历中多添一笔。
但他们可能会需要 7 个月才完成任务。
如果你将决定权交给这些人,那么你的公司将花费大量资源来做这项工作,并且就算一切顺利,事情没有落到一团糟的下场,大家也只能在 7 个月后才开始使用它。
这正是某些公司内部测试框架的故事。当涉及内部工具时,重塑轮子永远是一个坏主意。
问题 14:可访问性对亚马逊来说有多重要?
Jayden:我想这对我们而言至关重要。对任何公司而言,这都非常关键,因为这意味着让你的产品可供尽可能多的人使用。当有人在做关于可访问性的网络研讨会时忘了提及 InternetExplorer,我会耸耸肩。
添加标题属性并让颜色更友好,能让你的网站对视力障碍者更加有用和友好。
但是,如果你忘记检查自己的网站是否可以在除 Chrome 和 Firefox 之外的其他浏览器中运行,这就基本上表明你根本不在乎大量用户的体验。
问题 15:你如何看待无头浏览器?
Jayden:我们不使用无头浏览器,因为我们遇到的一些问题只能在非无头浏览器中重现。想象一下这样一种情况:用户报告了 Windows 上 Chrome 的生产错误,而你却只在 Linux 容器中的无头 Chrome 浏览器上运行测试。
我们在 Windows、macOS 机器和移动设备上运行测试,但不在 Linux 容器上运行测试。
问题 16:在每个发行版:前,你们是否对所有内容都做测试?
Jayden:是的,我们会这样做。即使我们只是添加一个小补丁,也会测试每种浏览器上的每种场景。这是有道理的,因为不这样做将使亚马逊面临利润受损的风险。如果你能并行运行大多数测试,那么测试所有内容就不会那么费时。
问题 17:你们会并行运行多少个测试?
Jayden:超过 400,因为有时候我们会一天内发布多个版本。如果我们每周只发一个版,那么就算只并行进行 20 个测试,我们也可以接受。
问题 18:测试用的是真实数据还是伪数据?
Jayden:伪造看起来真实的数据。我们在逻辑上没有理由在测试中使用真实数据,我们拥有自己的虚构用户、产品、列表等。
问题 19:你们如何测试电子邮件?
Jayden:我们实际上是在发送真实的电子邮件,并在测试中打开它们。我们将为每个新用户生成一个随机的电子邮件地址,并使用 EndtestMailbox 自动测试交付的电子邮件。这让我们可以直观地检查电子邮件并与电子邮件中的元素交互。短消息也一样,只不过去掉可视部分。
问题 20:你们如何处理地理位置测试?
Jayden:我们至少在 50 个不同的地理位置上做测试。这对我们而言确实很重要,因为某些国家/地区要求供应商或购物者提供更多信息。我们正在使用由同一工具提供的 RealIPGeolocation 系统。
即使英语是你网站上的唯一语言,并且内容在所有国家/地区都是完全相同的,你还是要做地理位置测试,因为在某些情况下,当用户从其他国家或大洲访问时,你正在使用的第三方脚本可能会遇到麻烦。
我听说过一个网站,用户从欧洲访问时运行正常,然后从美国访问时就崩溃了,这是某些第三方脚本导致的。
问题 21:你对希望改进其功能自动化测试的团队有何建议?
Jayden:
在细节上保持灵活性,采取防御措施会阻止你的创新步伐。
掌握最新的工具和趋势,但是如果不做深入的分析就不要追赶潮流。
假设时要格外小心,浏览器不仅是一个 JavaScript 解释器。
如果你的网站可以在 Windows 上的 Chrome 中运行,并不意味着它可以在 macOS 上的 Chrome 或移动设备上的 Chrome 中完美运行。
问题 22:请举出一件每个团队都应该做,但大多数团队都没有做到的事情?
Jayden:在 Safari 上做测试,它是使用率第二高的浏览器。而且它不会很快消失,它将变得更加流行。它在不断获得新功能,而且苹果决心从 Chrome 中获得更多的市场份额。
原文链接:
评论