你们公司的【前端项目】是如何做测试的?字节10年测试经验的我这样做的...
前端项目也叫web端项目(通俗讲就是网页上的功能)是我们能够在屏幕上看到并产生交互的体验。
前端项目如何做测试?
要讲清楚这个问题,先需要你对测试流程现有一个全局的了解,先上一张测试流程图:

测试流程图
接下来下面我们从需求阶段-开发阶段-测试阶段-发布阶段 共四个环节来还原一次完整的测试过程。
备注: 前端项目如何测试,在以上四个环节中的"测试阶段" 有详细阐述
一、需求阶段
在项目开始后,产品同学提出了若干需求,经过需求评审之后,最终给出了产品需求计划和迭代文档。
在这个阶段,测试跟开发同学要参与需求评审,在需求评审的过程中,开发同学会开始思考怎么做。
作为测试,有哪些不理解的,要及时提出来,让产品经理给出更清晰的解答。
最终,经过需求评审和澄清,我们了解了需求的细节,有哪些功能,要测哪几个点,要做到大概心里有数。

二、开发阶段
需求已经清楚了,开发同学就要进入开发了。同时呢,我们开始确定测试方案(工期评估、人力安排),根据需求编写测试用例(一般使用xmind或excel,根据自己习惯和团队规范来选择)。
为了防止测试用例遗漏,我们要做一次用例评审,邀请开发和产品经理参加,拉齐各方对需求的理解,最终产出一份完整的测试用例。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

三、测试阶段
在测试阶段,分为后端测试和前端测试,划分如下:
- 前端测试部分(用户在前端的操作,包含前端样式,交互效果等)
- 后端测试部分(前端对后端的接口请求,包含增删改查、数据处理的逻辑等)
说明:有些公司前后端测试分别由不同的团队或测试同学跟进,有些公司前后端测试都由同一个团队或同一个人跟进。
后端测试一般会先于前端测试介入,为啥要后端测试先开始呢?
来看一个小片段(下例中,前后端测试不是同一个人):
开始测试了,前端测试同学一看,页面没有展示预期的数据。好家伙,顺手给前端小哥提了一个bug。
前端开发经过排查发现直喊冤:后端没返回数据,臣妾也做不到呐。回头便将bug指给后端研发小哥了。
后端小哥一看:这个bug刚刚已经有后端测试同学提了 ,别着急哈,正在解决。
前端测试同学心想:敢情我这是白忙活了呀,怎么避免这个问题呢?
后来,经过大家的讨论决定:后端测试先开始,保证接口基本功能正常后前端测试再介入,避免重复劳动,提高工作效率。

首先开始的是后端测试,后端的测试范围如下:
1、功能测试
输入(入参)的测试:必传和非必传、参数长度、数值类型、正常和异常、有、无和为空,以及参数组合。
输出(返回)的测试:主要看正常返回的响应内容,和异常返回的响应码和提示语。
2、异常测试
重复提交:多次重复提交,连续重复提交,特别是涉及到支付、交易金额相关。
并发:两个以上用户操作同一场景,争夺资源、死锁等情况。
事务测试:多个连续步骤才能完成的业务流程。
3、性能测试(一般来说新接口需要做,老接口根据实际需求来定)
主要看响应时间、吞吐量、并发数、服务器资源使用率、cpu、内存、io、network等
这些测试内容基本都可以通过接口测试来完成,接口测试的工具推荐Postman。
接口稳定之后,可以写成自动化测试,方便后续的回归测试。
这里用到的自动化测试框架,小编使用的是java中的Testng(常用的还有JUnit4),不同的语言有各自的测试框架(比如python中的Unittest和Pytest)【本文最后会分享他们的区别】。

后端测试完成一遍冒烟测试之后,前端测试就可以开始了(重点来了,重点来了)
前端的测试范围如下:
1、UI测试
验证所有页面字体的风格是否一致
背景颜色应该与字体颜色和前景颜色相搭配
图片的大小和质量是否正常
2、功能测试(也称为e2e测试)
基本的功能是否符合预期
模拟用户操作,交互流程是否正确
3、兼容性测试
平台兼容性,使用用不同的 操作系统平台对网站进行测试。最常见的有 Windows、macOS、 Linux 等。
浏览器兼容性, 查看不同浏览器中的兼容性问题。
分辨率测试,在不同分辨率下的显示效果,避免分辨率低时界面文字显示太大,而分辨率高时又有些文字显示时太小。
4、性能测试
页面首次打开的耗时
页面加载时间
频繁操作是否崩溃
5、稳定性测试
页面是否白屏
掉电重启,断网重连后是否正常
长时间运行是否会崩溃
6、易用性测试
常用快捷键 (刷新,关闭等)
常用习惯性操作(回车搜索)
便捷性功能(记住密码等)

在测试的过程中,要对照测试用例来执行,避免遗漏。
每执行完一个测试用例,要记录实际的效果,不符合预期的要在禅道(或其它项目管理平台)记录bug,并指给对应的开发同学。
等所有的bug都解完了,需要完整的流程走一遍(回归测试)。
四、发布阶段
前后端的测试case都执行完了,bug也修改好了,就可以发送测试报告了。
一切妥当之后,就等一个良辰吉日将项目发布上线。
所谓吉日,一般要避免周五或节假日的前几天,因为万一上线后有问题,研发小哥们都在休息,找不到人修复,影响到用户体验可就要挨老板批了。
所谓良辰,一般是在夜黑风高的晚上,因为这个时候用户基本休息了,万一上线后有问题及时回滚就行了,不会影响到用户体验。煞费苦心,一切都是为了用户着想!
上线后,一般会通过灰度放量,观察线上效果,没有问题再逐步放量,最终完成项目的全量发布。

现在,有关“『前端项目』是如何做测试的?”已经有了答案。
接下来回复几个补充问题
1、前端测试覆盖率基本上很少有100%的,那么哪些代码需要测试?
没错,前端测试覆盖率几乎不可能到100%。
正因为如此,为了保证项目质量,不仅需要测试前端代码的展示效果,也要测试后端代码的处理逻辑。
2、有没有e2e测试?
e2e全称 end-to-end,其实就是模拟用户行为,属于是前端测试的内容。可以通过编写脚本或手动来完成,几乎所有的项目,业务都在不断更新的。业务变了,模拟用户行为也会随之改变。因此编写脚本性价比不高,所以通常是由人工来完成这项测试工作。
3、前端项目有专业的测试人员吗?
大厂有细分,会分为前端测试和后端测试(也叫服务端测试),分别保障前端和后端的质量。
前端测试人员主要负责页面展示和交互的正确性。
后端测试人员主要负责接口请求的正确性。
4、测试框架是什么?
小编自己在公司用的是java中的TestNG。
如果是使用python语言,也有对应的测试框架,下面分别说一下Java和Python的测试框架。
Java常用的测试框架
有JUnit和TestNG,二者的对比如下图:

相对于JUnit4来说,TestNG功能更加丰富。
从实际使用的角度来说,参数化的设置及功能,以及处理有上下依赖关系的测试时,JUnit测试框架有着明显的不足。因此,一般都会使用TestNG(推荐)。
python常用的测试框架
常用的有Unittest、Pytest它们的区别如下,各有特色,可以根据自己的业务需求来选择。

至于java和python哪个更适合做测试?
建议结合自己的基础能力和公司的语言习惯来选择.
最后: 可以在我的VX公众号:【自动化测试老司机】免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
相关文章:
你们公司的【前端项目】是如何做测试的?字节10年测试经验的我这样做的...
前端项目也叫web端项目(通俗讲就是网页上的功能)是我们能够在屏幕上看到并产生交互的体验。 前端项目如何做测试? 要讲清楚这个问题,先需要你对测试流程现有一个全局的了解,先上一张测试流程图: 测试流程…...
华为战略方法论:BLM模型之关键任务与依赖关系
内容简介 在 BLM 模型中,执行部分包括四个模块,分别是: 关键任务与依赖关系;组织与绩效;人才;氛围与文化。 详细内容,大家可以参看下面这张图。 这四个模块其实是可以进一步划分成两个关键点…...
django的ORM模板的fake更新
django存量数据表的migraions记录丢失,若要更新表结构,则需用到fake,否则报错: 解决步骤如下: 1)同步存量表结构,生成伪表 --fake sudo python3 manage.py makemigrations appname sudo pyt…...
239.滑动窗口最大值
leetcode原题链接 题目描述: 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例1: 输入:nums [1,…...
Redis基础原理
1 概念 1.1 关系型数据库与非关系型数据库对比 关系型数据库Mysql、Oralce特点数据之间有关联;数据存储在硬盘上效率操作关系型数据库非常耗时 非关系型数据库redis、hbase存储key:value特点数据之间没有关联关系;数据存储在内存中缓存思想从缓存中获…...
.NET 5 Web API 中JWT详细教程:保护你的Web应用
第一部分: 理解JWT JSON Web Token(JWT)是一种在不同系统之间传递信息的安全方式。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部包…...
MyBatis-Plus自动填充
文章目录 一、前言二、MyBatis-Plus自动填充功能实现2.1、实体类上增加注解2.2、自定义填充类编写 一、前言 我们在建表的时候,所有的表都会有create_id(创建人id)、create_time(创建时间)、update_id(更新…...
Dubbo服务提供者失效踢出原理解析
Dubbo服务提供者失效踢出原理解析 在分布式系统中,服务提供者的失效是一个常见而且重要的问题。Dubbo作为一款优秀的分布式服务框架,提供了失效踢出机制来及时剔除不可用的服务提供者,确保系统的稳定性和可用性。本文将深入探讨Dubbo服务提供…...
el-select下拉框处理分页数据,触底加载更多
1、声明自定义指令: directives: {loadmore: {inserted(el, binding) {const SELECTWRAP_DOM el.querySelector(.el-select-dropdown .el-select-dropdown__wrap);SELECTWRAP_DOM.addEventListener(scroll, function() {const condition this.scrollHeight - thi…...
如何设计自动化测试脚本?一文5个步骤带你从0到1设计
企业中如何设计自动化测试脚本呢?今天我们就来为大家分享一些干货。 一、线性设计 线性脚本设计方式是以脚本的方式体现测试用例,是一种非结构化的编码方式,多数采用录制回放的方式,测试工程师通过录制回访的访问对被测系统进行自…...
PostgreSQL实战-数据库迁移部署
PostgreSQL实战-数据库迁移部署 介绍 根据项目需求,我们需要将现有的PostgreSQL数据库重新部署到新的服务器上。由于项目本身就是基于PostgreSQL数据库构建的,因此数据库迁移将变得十分便捷。接下来,我将简要介绍我们的迁移步骤。 迁移步骤…...
PHP数据库
PHP MySQL 连接数据库 MySQL 简介MySQL Create 免费的 MySQL 数据库通常是通过 PHP 来使用的。 连接到一个 MySQL 数据库 在您能够访问并处理数据库中的数据之前,您必须创建到达数据库的连接。 在 PHP 中,这个任务通过 mysql_connect() 函数完成。 …...
Mybatis的基本操作--增删改查
目录 查看数据 无参数 一个参数 多个参数 添加数据 修改数据 删除数据 注释的方式进行查找数据 查看数据 分三种情况:无参,有一个参数,有多个参数的情况。 (这里的详细操作步骤是博主的上一篇博客写的:初识My…...
Qt简单实现密码器控件
本文实例为大家分享了Qt自定义一个密码器控件的简单实现代码,供大家参考,具体内容如下 实现构思: 密码器的功能可以看成是计算器和登陆界面的组合,所以在实现功能的过程中借鉴了大神的计算器的实现代码和登陆界面实现的代码。 …...
fpga_pwm呼吸灯(EP4CE6F17C8)
文章目录 一、呼吸灯二、代码实现三、引脚分配 一、呼吸灯 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,使用开发板上的四个led灯实现1s间隔的呼吸灯。 二、代码实现 c module pwm_led( input clk ,input rst_n ,output reg [3:0] led ); …...
WPF实战学习笔记20-设置首页启动页
文章目录 设置首页启动页增加配置接口添加接口文件:实现接口 配置启动选项 设置首页启动页 增加配置接口 添加接口文件: Mytodo.Common/IConfigureInterface.cs using System; using System.Collections.Generic; using System.Linq; using System.T…...
uniapp实现预约时间选择弹窗组件
做了个组件,实现出当日预约时间组件,效果图如下 废话不多说,直接上代码,代码简单,参数自己任意改 <template><view class"inventory"><u-popup :show"show" :round"10"…...
opencv 之 外接多边形(矩形、圆、三角形、椭圆、多边形)使用详解
opencv 之 外接多边形(矩形、圆、三角形、椭圆、多边形)使用详解 本文主要讲述opencv中的外接多边形的使用: 多边形近似外接矩形、最小外接矩形最小外接圆外接三角形椭圆拟合凸包 将重点讲述最小外接矩形的使用 1. API介绍 #多边形近似 v…...
断路器分合闸速断试验
试验目的 高压断路器的分、 合闸速度是断路器的重要特性参数, 反映出断路器的操动机构 与传动机构在分、 合闸过程中的运动特征。 断路器分、 合闸速度超出或者低于规定值 均会影响断路器的运行状态和使用寿命。 断路器合闸速度不足, 将会引起触头合闸振 颤, 预击穿时间过长。…...
【Redis】如何实现一个合格的分布式锁
文章目录 参考1、概述2、Redis粗糙实现3、遗留问题3.1、误删情况3.2、原子性保证3.3、超时自动解决3.4、总结 4、Redis实现优缺5、集群问题5.1、主从集群5.2、集群脑裂 6、RedLock7、Redisson7.1、简单实现7.2、看门狗机制 参考 Redisson实现Redis分布式锁的N种姿势 (qq.com)小…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
