测试测试的意义在于,在用户消费输出代码之前,开发者先消费它,给它一个重要的质量保证。测试包括单元测试、性能测试、安全测试和功能测试等方面。1.单元测试1.1单元测试的意义对于开发人员来说,单元测试是最基本的方式。如果开发人员不自己测试代码,他们将不可避免地面临以下问题。测试工程师可靠吗?第三方代码可靠吗?在产品迭代过程中,如何持续保证质量?编写可测试代码的原则:单一职责接口抽象分离对于开发人员来说,不仅要写单元测试,还要写可测试代码。1.2单元测试简介单元测试主要包括断言、测试框架、测试用例、测试覆盖率、mocks和持续集成。由于Node的特殊性,还增加了异步代码测试和私有方法测试。Assertion断言:单元测试中使用的一种监控方法,保证最小单元正常。断言用于检查程序在运行时是否符合预期。测试框架记录抛出的异常并继续执行,最终生成测试报告。这些任务的承担者就是测试框架。测试框架用于测试服务,本身不参与测试。主要用于管理测试用例和生成测试报告,提高测试用例的开发速度,提高测试用例的可维护性和可读性,以及一些外围工作。测试样式组织测试用例的不同方式称为测试样式。主流单元测试风格:TDD(TestDrivenDevelopment)BDD(BehaviorDrivenDevelopment)两者的区别:*侧重点不同。TDD关注的是所有功能是否都被正确实现,每个功能都有对应的测试用例;BDD关注的是整体行为是否符合预期,适合自顶向下设计。*表达方式不同。TDD的表达方式偏向于功能规范的风格;BDD的表达方式更接近于自然语言的习惯。*测试报告无论使用哪种断言库,在运行完测试用例后,测试报告都是开发人员和质量管理人员都非常关注的。测试代码的文件组织为了使单元测试顺利进行,必须在包描述文件(package.json)中添加相应模块的依赖。一个测试用例一个行为或功能需要一个完整的、多方面的测试用例,一个测试用例至少包含一个断言。测试用例至少需要通过正向测试和反向测试才能保证测试功能的覆盖,这是最基本的测试用例。异步测试超时设置如果一个测试用例的执行时间超过了预期的时间,就会记录一个超时,然后执行下一个测试用例。测试覆盖率通过不断地在代码中加入测试用例,不断覆盖代码的分支和不同情况。Mockmock:通过伪造调用的方法来测试上层代码的健壮性。通过模拟底层方法的异常,只需要监控调用者的输出值是否符合预期即可,无需关注是否是真正的异常。测试私有方法rewire模块提供了一种访问私有方法的简洁方法。1.3工程和自动化工程Node使用Makefile来构建工程。持续集成对于实际项目来说,频繁的迭代是常态。如何记录版本迭代信息也需要持续集成环境。社区流行的一种方式——使用travis实现持续集成。2.性能测试性能测试的范围比较广,包括负载测试、压力测试和基准测试。2.1基准测试基准测试需要统计某个方法在一定时间内执行了多少次。2.2压力测试对网络接口进行压力测试,判断网络接口的性能。网络接口压力测试需要考察的指标有:吞吐率、响应时间、并发度。这些指标反映了服务器的并发处理能力。2.3Benchmark-drivendevelopmentBenchmark-drivendevelopment(BDD):其过程:编写benchmark,编写/修改代码,收集数据,发现问题,返回步骤2。2.4测试数据与业务数据的转换在实际进行功能开发之前,需要对业务量进行评估,使开发能够胜任线上的实际业务量。
