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