当前位置: 首页 > Web前端 > HTML

前端进阶之路:前端架构设计(三)——测试核心

时间:2023-04-03 00:22:49 HTML

可能很多人和我一样,第一次听到“前端架构”这个词,第一反应是:“难道前端还有架构?”在后端开发的世界里,系统规划和可扩展性是关键,所以架构师很受重视,他们在开发工作开始之前就被邀请加入项目,他们会和客户讨论平台那将构建架构需求,使用什么技术栈?内容类型有哪些?这些内容是如何创建的?软件架构师的职责是确保项目中的每一步都在总体架构的指导下进行,而不是随意决定。现在的前端领域,随着JS框架、UI框架和各种库的丰富,前端架构也变得非常重要。如果一个大型项目没有合理的前端架构设计,那么前端代码可能会被不同的开发者随意引入库和UI框架,导致代码量变得异常臃肿。最终的结果可能是代码变得不可维护,页面性能低下。我们必须推翻重构。因此,我们需要在项目开始前就对前端代码进行结构化。一旦前端架构师设计了所有前端开发者必须遵循的检查机制,建立了系统设计规范,那么项目就有了衡量代码质量的标准,前端开发者也能享受到更高效的工作流程.所以,前端架构的定义可以用下面一句话来概括:前端架构是一组工具和流程的集合,旨在提高前端代码的质量,实现高效和可持续的工作流。本系列前端架构文章将分别围绕前端架构的四大核心展开,分别是代码、流程、测试、文档。前端架构的四大核心(一)代码归根结底,所有的网站都是由一堆文本文件和资源文件组成的。当我们面对制作网站产生的大量代码时,我们会发现为代码和资源设定一个期望值是多么的重要。在代码部分,我们将重点介绍如何在系统架构中实现HTML、CSS和JavaScript。(2)流程早已过了FTP上传文件的时代,所以现在重要的是思考如何使用工具和流程来构建高效无差错的工作流程。工作流变得越来越复杂,用于它们的工具也越来越复杂。这些工具在提高生产力、加快效率和保持代码一致性方面带来了惊人的效果,但同时也伴随着过度工程化和抽象化的风险。因此,需要改变现有的工作流程。(3)测试要构建一个可扩展的、持续优化的系统,需要保证新旧代码的良好兼容。我们的代码不是独立存在的,它们是大系统一部分。创建覆盖面广的测试计划,确保旧代码仍能正常工作。(4)文档一般来说,如果不是团队重要成员的离开,我们很难意识到文档的重要性。到那个时候,大家就得停下手头的事情,先把所有的文件都写好。作为一名前端架构师,在开发项目的同时,一定要善于写出好的文档。测试核心(一)传统人工测试软件的局限性测试是在规定的条件下运行程序,发现程序中的错误,衡量软件的质量,评价其是否满足设计要求的过程。查找软件中的潜在错误和缺陷。首先,测试人员会对开发人员开发的功能编写测试用例,比如表单中需要填写的数据、页面点击的顺序、最终页面的预期效果等。然后,测试人员会编写Manualverification会根据用例一步步进行。如果页面出现异常,如无法打开页面或生成的数据不准确等,缺陷记录将提交给企业缺陷管理系统,供开发人员修正。在开发过程中,如果编译出了新版本,测试人员需要根据测试用例重新测试,确认是否有新的缺陷,或者旧的缺陷是否已经改正。长期以来,这种传统的人工测试在各大公司得到广泛应用,并被证明能够有效保证行知的产品质量,但随着互联网技术的发展,这种传统的测试模式越来越显现出瓶颈。1.重复劳动,测试质量低目前互联网产品研发的研究短平快,小步快跑,短则两三天,长则一周就出新版本。在这短短的时间内,测试人员需要将新版本部署到测试环境,更新数据库,然后手动执行所有测试用例的验证。这个过程紧迫、工作量大、机械化、重复性强。当测试人员长期在重复性验证的事情上工作时,往往会因为思维习惯而忽略新出现的问题,最终导致不仅测试人员自身缺乏工作积极性,而且测试质量也更加难以保证。2.测试效率低手工测试天生就决定了它的执行效率很低,测试人员需要根据测试用例逐行阅读,然后在页面上一步步填写表格,是一个非常繁琐的过程步骤并单击按钮后提交。遇到复杂的业务流程,涉及方方面面。笔者甚至还看到了一个测试用例,一个多小时都完成不了。在开发后期,可能每天或者每两天发布一个版本进行测试。如果一个软件系统有几千甚至几万个功能点,人工测试会特别费时费力。不仅消耗大量人力,还可能影响产品的如期发布。3、无法保证代码的整个路径都被覆盖。是否有良好的测试覆盖率是评估测试成熟度的重要指标。核心思想是提供多组甚至几十组输入,全面覆盖业务中的大部分路径,关注软件的边界行为。例如,某个页面的输入框的字符数在开发时被限制为256个字符,但测试人员很可能会错过这种极端的输入情况。由于人工测试效率低下,别说测试几十组数据,就是几组数据都可能难以实施。此外,在数据量大或用户并发量大的情况下,还需要检测一些软件缺陷。暴露,很难通过人工测试保证代码的全路径覆盖。4.不能有效兼顾多种浏览器,多平台Web前端测试环境复杂,兼容性要求高,尤其要兼顾多种操作系统,包括Window、MacOS和Linux,以及不同的浏览器如IE、Edege、Chrome、Safari等,还要考虑IOS、Andorid等移动操作系统,经过排列组合后,将是人工测试无法达到的数字。很难想象有那家公司可以投入巨大的人力成本来完成如此庞大的人工测试。(二)前端测试的分类1、单元测试(UnitTest)在软件开发过程中,最基本的测试就是单元测试,它是针对程序单元(软件设计的最小单位)的正确性进行测试。程序单元是应用程序的最小可测试组件。在过程式编程中,一个单元是单个程序、函数、过程等;对于面向对象编程来说,最小的单位是方法。在企业的质量控制体系中,单元测试是在软件提交给测试部门之前由开发部门完成的。单元测试的目标是打破程序单元之间的依赖关系,隔离单元并证明这些单独的单元是正确的,所以单元测试不应该有依赖和隔离。通常,在单元测试中,系统的依赖组件被抽取出来,并用测试替身(TestDouble)代替,这样单元测试的重点是测试“单元”的逻辑,而不是第三方系统交互。2.集成测试(IntegrationTest)即使一个程序在单元测试中运行良好,也不确定它们能否协同工作。集成测试就是把应用程序中能够独立运行的组件取出来,通常是一些单元的集合,来测试这部分单元作为一个整体的性能,验证它们是否能够协调工作。集成测试通常位于单元测试之后和端到端测试之前。例如,一个普通的集成测试场景是使用数据组件来测试数据库的运行。测试人员需要安装配置数据库,然后将预先准备好的数据插入数据库,执行待测组件,运行后查看数据库中的数据。在这个测试场景中,被测单元依赖于数据库访问模块,所以不是单元测试。但它并没有模拟一个完整的用户真实场景,所以它不是一个端到端的测试。3、端到端测试(End-to-EndTest)端到端测试(通常简称为E2E)是对产品或服务进行整体验证。典型的方法是模拟真实的用户场景,并将其与系统的需求定义进行比较,从而找到产品和服务。需求定义不符合或存在矛盾的地方,最终目标是发布产品。例如,在一个web应用中,测试人员会启动服务器,打开浏览器,访问被测网页,在网页上操作需要测试的功能,检查浏览器中发生的特定事件,确保被测功能可以正常运行。端到端测试通常由测试部门完成,一般具有以下特点:需要搭建专门的测试环境来模拟真实的用户场景,测试用例的成本相对较高复杂度高,运行时间长一次测试发现问题,由于涉及的模块较多,很难定位问题。端到端测试可以手动完成,也可以自动实现测试框架和测试代码。在Web前端应用程序中,端到端测试通常从用户界面开始,验证用户与应用程序之间的交互,确保用户界面为用户提供适当的操作来访问应用程序的功能测试对象,同时确保内部对象符合预期。人工测试效率低下,无法满足快速迭代的Web前端应用的测试需求,因此迫切需要自动化Web前端应用的端到端测试。(三)测试驱动开发(TDD:Test-DrivenDevelopment)的概念1.TDD的优势TDD的优势基本思想是通过测试来推动整个开发过程,测试驱动开发技术不是只是一个简单的测试工作。需求一直是软件开发过程中最难描述、最易变的东西。这里所说的需求不仅仅是指用户的需求,还包括对代码使用的需求。很多开发者最怕的就是后期修改或者扩展某个类或者函数的接口。为什么会出现这种情况是因为这部分代码的使用需求没有很好的描述。测试驱动开发是首先通过编写测试用例来考虑代码(包括函数、过程、接口等)的使用需求,并且这种描述是明确的、可验证的。通过编写这部分代码的测试用例,对其功能分解、使用流程、界面进行了设计。而这种从使用角度出发的代码设计,通常更符合后期开发的需要。可测试的需求对于提高代码的内聚性和重用性是非常有利的。因此,测试驱动开发也是一个代码设计的过程。开发者通常很厌倦编写文档,但是他们通常希望在想要使用和理解别人的代码时得到文档的指导。测试驱动开发过程中产生的测试用例代码,就是对代码最好的诠释。快乐工作的基础是对自己和工作结果有信心。目前很多开发者经常会担心:“代码是否正确?”“硬写的代码有没有严重的bug?”“修改后的新代码会影响其他部分吗?”。这种恐惧甚至导致某些代码应该修改但又不敢修改。测试驱动开发提供的测试集可以作为你信心的来源。当然,测试驱动开发最重要的作用就是保证代码的正确性,快速发现和定位bug。快速发现和定位bug是很多开发者的梦想。关键代码的测试集和测试用例的不断完善为快速发现和定位bug提供了条件。2、TDD的原理测试驱动开发的基本思想是先写测试代码再开发功能代码。也就是说,明确了要开发某个功能后,首先想的是如何测试这个功能,并完成测试代码的编写,然后再编写相关的代码来满足这些测试用例。然后循环添加其他功能,直到所有功能开发完成。3、TDD的过程测试驱动开发的基本过程如下:明确当前要完成的功能。可以记录为TODO列表。快速完成该特性的测试用例编写。测试代码编译失败。编写相应的功能代码。测试通过。重构代码并确保测试通过。循环完成所有功能的开发。(四)测试工具推荐1、JasmineJasmine应该算是最成熟的Javascript测试框架了。它有自己的断言和测试执行环境,并且有智能和清晰的语法,可以让你轻松编写测试代码。2、MochaMocha也是一个前端框架,简单易用,插件丰富。想学的话可以看看阮一峰的教程:测试框架Mocha示例教程3。KarmaKarma是Google团队开发的一款测试工具。它不是测试框架,而是运行测试的驱动程序。你可以通过karma的配置文件组合你喜欢的框架、断言库和浏览器。参考Web前端测试和集成-Jasmine/Selenium/Protractor/JenkIBM:TestDriverdevelopment(TDD)