当前位置:网站首页>【软件工程之美 - 专栏笔记】29 | 自动化测试:如何把Bug杀死在摇篮里?
【软件工程之美 - 专栏笔记】29 | 自动化测试:如何把Bug杀死在摇篮里?
2022-07-29 05:23:00 【if...else...】
专栏信息
专栏作者:宝玉
专栏发布平台:极客时间
主要内容
今天我将带你一起了解什么是自动化测试,以及如何在项目中应用自动化测试。
一、为什么自动化测试能保障质量?
人是怎么做测试的:首先根据需求写成测试用例,设计好输入值和期望的输出,然后按照测试用例一个个操作,输入一些内容,做一些操作,观察是不是和期望的结果一致,一致就通过,不一致就不通过。
自动化测试,就是把这些操作,用程序脚本来完成的,本质上还是要输入和操作,要检查输出是不是和期望值一致。
一旦实现了自动化,每测试一次的成本其实大幅降低了的,几百个测试用例可能几分钟就跑完了。尤其是每次修改完代码,合并到主干之前,把这几百个测试用例跑一遍,可以有效地预防“修复一个 Bug 而产生新 Bug”的情况发生。
二、有哪些类型的自动化测试?
在对自动化测试类型的定义方面,Google 的分类方法我觉得比较科学:根据数据做出决策,而不仅仅是依靠直觉或无法衡量和评估的内容。
Google 将自动化测试分成了三大类:小型测试、中型测试和大型测试。
我们将以用户注册的功能来说明几种测试的区别 。

小型测试
小型测试是为了验证一个代码单元的功能,例如针对一个函数或者一个类的测试。我们平时说的单元测试就是一个典型的小型测试。
小型测试的运行,不需要依赖外部。如果有外部服务(比如文件操作、网络服务、数据库等),必须使用一个模拟的外部服务。
中型测试
中型测试是验证两个或多个模块应用之间的交互,通常也叫集成测试。
对于中型测试,可以使用外部服务(比如文件操作、网络服务、数据库等),可以模拟也可以使用真实的服务。
大型测试
大型测试则是从较高的层次运行,把系统作为一个整体验证。会验证系统的一个或者所有子系统,从前端一直到后端数据存储。大型测试也叫系统测试或者端对端测试。
对于大型测试,通常会直接使用外部服务(比如文件操作、网络服务、数据库等),而不会去模拟。
区分测试类型的依据是什么?
Google 针对这几种测试类型列了一张表,根据数据给出了明确区分:

- 小型测试,没有外部服务的依赖,都是要模拟的;
- 中型测试,所有的测试几乎都不需要依赖其他服务器的资源,如果有涉及其他机器的服务,则本地模拟,这样本机就可以完成测试;
- 大型测试,几乎不模拟,直接访问相关的外部服务。
所以一般项目中,小型测试最多,中型测试次之,大型测试最少。
测试金字塔

怎么写好自动化测试代码?
多人认为写自动化测试很复杂,其实测试代码其实写起来不难,包含四部分内容即可,也就是:准备、执行、断言和清理
三、如何为你的项目实施自动化测试?
选择好自动化测试框架
要写好自动化测试代码,首先要找对自动测试化框架。不同的语言,不同的平台,测试的框架都不一样。好在现在搜索引擎很方便,根据“你的语言 + 自动测试框架”的关键字,就能找到很多的结果。
在持续集成环境上跑你的自动化测试
选好自动化测试框架后,你的自动化测试代码,其中的小型测试和中型测试,最好要能在持续集成环境上运行起来。

新项目和老项目的不同策略
如果是新项目,那么可以在一开始就保持一定的自动化测试代码的覆盖率,你甚至还可以试试测试驱动(TDD)的开发模式,也就是先写测试代码,再写实现代码,保证测试通过,最后对代码进行重构。
如果是老项目,短期内要让自动化测试代码有覆盖是有难度的,可以先把主要的功能场景的中型测试写起来,这样可以保证这些主要功能不会轻易出问题。
如果时间紧任务重,来不及写自动化测试怎么办?
确实遇到时间紧的情况,我建议你要优先保证中型测试代码的覆盖,因为这样至少可以保证主要的用户使用场景是正常的
四、其他摘抄
- 自动化测试有一个手工测试没有的优势,那就是可以直接绕过界面,对程序内部的类、函数进行直接测试,如果有一定量的自动化测试代码覆盖,相对来说软件质量是更有保障的。
- 有些测试,自动化测试成本比手工测试成本要高,比如说测试界面布局、颜色等,还是需要一定量的手工测试配合。
- 尤其是每次修改完代码,合并到主干之前,把这几百个测试用例跑一遍,可以有效地预防“修复一个 Bug 而产生新 Bug”的情况发生。
总结
自动化测试,一定要配合好持续集成,才能最大化发挥其效用。
搭建持续集成环境和集成自动化测试框架的事情,要作为一个正式的项目任务去做,当作一个很重要的任务去推进。
边栏推荐
猜你喜欢

华为云14天鸿蒙设备开发-Day7WIFI功能开发

SimpleFOC调参3-PID参数整定攻略

QT learning notes QT model/view

Hal library learning notes-14 ADC and DAC

Transfer learning

【RoboMaster】从零开始控制RM电机(2)-CAN通信原理及电调通信协议

Reading papers on fake news detection (2): semi supervised learning and graph neural networks for fake news detection

基于wifi的温度采集与控制系统

ML6自学笔记

LoRa开启物联网新时代-ASR6500S、ASR6501/6502、ASR6505、ASR6601
随机推荐
Migration learning notes - adaptive component analysis
NRF52832-QFAA 蓝牙无线芯片
arduino uno错误分析avrdude: stk500_recv(): programmer is not responding
充电桩充电技术新能源充电桩开发
华为云14天鸿蒙设备开发-Day7WIFI功能开发
基于FPGA:运动目标检测(补充仿真结果,可用毕设)
基于STM32开源:磁流体蓝牙音箱(包含源码+PCB)
FT232替代GP232RL USB-RS232转换器芯片国产化应用
Design and implementation of QT learning notes data management system
2、 During OCR training, txt files and picture data are converted to LMDB file format
Am model in NLP field
QT学习笔记-数据管理系统设计实现
ML8自学笔记
低功耗蓝牙5.0芯片nrf52832-QFAA
3、 How to read video?
Pytorch Basics (Introductory)
Huawei cloud 14 day Hongmeng device development -day2 compilation framework
基于51单片机的四路抢答器仿真
HAL库学习笔记-11 I2C
噪声传感器工作原理是什么?