1.2.1 端到端测试概览
端到端测试是最直观可以理解的测试类型。在前端应用程序中,端到端测试可以从用户的视角通过浏览器自动检查应用程序是否正常工作。
想象一下,你正在编写一个计算器应用程序,并且你想测试两个数求和的运算方法是否正确。你可以编写一个端到端测试,打开浏览器,加载计算器应用程序,单击“1”按钮,单击加号“+”按钮,再次单击“1”按钮,单击等号“=”,最后检查屏幕是否显示正确结果“2”。代码示例见例1.1。
例1.1 一个端到端测试,检查计算器两数求和的方法
端到端测试非常节省时间。编写完一个端到端测试后,读者可以根据自己的需求随时运行它。想象一下,相比执行数百次同样的手动测试,这样一套测试代码可以节省多少时间!
刚开始,你会以为有端到端测试就足够了,但它们仍存在一些问题。首先,端到端测试运行不够快。启动浏览器需要占用几秒钟,网站响应速度又慢。通常一套端到端测试需要30分钟的运行时间。如果应用程序完全依赖于端到端测试,那么测试套件将需要数小时的运行时间。
端到端测试的另一个问题是调试起来比较困难。要调试端到端测试,需要打开浏览器并逐步完成用户操作以重现bug。本地运行这个调试过程就已经够糟糕了,如果测试是在持续集成服务器上失败而不是本地计算机上失败,那么整个调试过程会变得更加糟糕。
注释 有一种方式可以避免重现过程出现问题,就是在可重现的环境中运行端到端测试,例如Docker容器。虽然Docker容器内容超出本书范围,但运行端到端测试时应该考虑使用Docker容器,以确保避免因不同运行环境而产生重现bug失败的问题。
端到端测试还有一个问题,它可能成为flaky测试。flaky测试表示即使被测应用程序正常运行,测试仍然频繁失败,或许是因为代码执行时间太长或许是因为API暂时失效。对待flaky测试,就像对待一个爽约的朋友,久而久之就会不再对其认真,“哦,不,测试失败了!让我看看……哦,又是那个总是失败的测试,没有什么可担心的”。flaky测试使你的测试套件变得不那么有用,但是在编写端到端测试时却很难避免!
如果要列举开发人员的抱怨清单,我一定会将端对端测试列入前三名。我认为虽然端到端测试有用,但它不应该是应用测试中唯一的测试类型。
本书仅用一章来专门描述端到端测试,一是因为端到端测试的缺点,二是因为端到端测试与框架无关——无论应用程序是用Vue还是用MooTools编写的,端到端测试都能正常运行。
端到端测试是可以自动执行的手动测试。读者可以针对实时网站定期运行端到端测试,或者在代码合并到主分支之前运行端到端测试。
端到端测试并不是一种新的测试代码的方法,它只是加快了手动测试的执行速度。而单元测试却是一种不同于手动测试代码的新方法。