一、Web 测试与传统测试的区别
- 相同之处
测试内容: 功能、性能、易用性、兼容性、安全性等
测试方法: 等价类边界值法、判定表法、状态迁移法,流程分析法、因果图法、错误猜测法等
测试手段: 人工测试、工具测试等 - 不同之处
Web 测试更加注重性能测试和安全性测试
性能测试
传统测试 | web测试 |
---|---|
CPU使用情况 | 事务响应时间 |
内存使用情况 | 系统处理能力 (TPS) |
最大并发用户数 |
安全性测试
传统测试 | web测试 |
---|---|
用户管理 | XSS 攻击 |
系统是否有超时限制 | 缓冲区溢出 |
相关信息是否写入日志文件,是否可以追踪 | SQL 注入 |
服务器端的安全漏洞 | 拒绝服务(DoS) |
信息是否加密 |
二、功能测试
- 链接测试
- 超链接与说明文字相匹配
- 被链接页面是存在的 不出现 404 找不到页面的错误
测试工具:Xenu 死链接检查工具 - 超链接未链接到任何地址
- 没有孤立的页面(没有链接指向的页面)
- 链接的描述必须精简有效
- 表单测试
- 输入检查
长度限制 测试(input标签的maxlength属性 JS脚本)思路:等价类边界值输入域
类型限制 测试(JS脚本 服务器代码)
模式匹配 如日期格式 测试(JS脚本 服务器代码)
特殊值 % _ 空格 文字前后空格 null 单引号 双引号 HTML标签(<br> <b>abc</b> <!--
)
下拉框选择 有效选择 无效选择 首尾和中间选择 - 界面显示
文字环绕,随窗口的大小调整页面大小
- Cookie 测试
3.1 Cookie 的概念
- Cookie 是当你浏览网站时,由 Web 服务器存于你硬盘上的一段文本信息
- Cookie 可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。
- Cookie 文件可以被浏览器读取
3.2 Cookie 常用操作
- 清理 Cookie 的方法
Chrome, Firefox 和 IE 浏览器的快捷键 Ctrl + Shift + Del - 设置 Cookie 访问提醒
IE 浏览器的 Internet选项 > 隐私 > 高级 接受改为提示 - 查看和修改 Cookie 的详细信息
Firefox 开发者工具 > 存储 > Cookie
Chrome 开发者工具 > Application > Storage > Cookies
3.3 Cookie 的测试点
- Cookie 是否起作用
正向测试
- Cookie 是否按设计文档的要求产生,对应功能是否实现
一般会有一个作用是 Session ID 的 Cookie,如 JSESSIONID 和 PHPSESSID
反向测试
- 屏蔽或有选择性地拒绝 Cookie,检查当 Cookie 被屏蔽时 Web 系统会出现什么问题;
允许出现功能不能正常运行的情况,不允许 Web 系统出现错误、崩溃、数据错乱或其
他不正常的行为。
如果必须使用 Cookie 才能完成的功能,系统应提示提示需要开启 Cookie;- 删除 Cookie,检查当 Cookie 被删除后 Web 系统会出现什么问题;
对应 Cookie 的功能不能实现,如需要重新登录。
- Cookie 是否按预定的时间进行保存
- 开始时间:查看 Cookie 产生的时间
可以借助 IE 浏览器 Cookie 提示功能,或 Firefox 和 Chrome 浏览器的开发者工具- 结束时间:查看 Cookie 的有效期(Expires)
是否和设计文档一致,有效期是Session/会话表示未设置有效期,Cookie保存在内存,关闭浏
览器失效
- 刷新对 Cookies 有什么影响
在有效期内刷新没有影响 - Cookie 安全内容检查(属于安全性测试)
- Cookie 不能保存重要的有控制功能的数据,如是否已经登录的标志
- 关键数据是否加密
检查存储的 Cookie 文件内容,看是否有用户名、密码、手机号等敏感信息存储,并且未被加
密处理。
某些类型的数据即使是加密了也绝对不能存储在 Cookie 文件中 例如:网银交易中的信用卡
号和交易密码。- Cookie 过期日期设置 检查是否把 Cookie 的过期日期设置得过长
- HttpOnly 属性的设置 设置为 True 有助于缓解跨站脚本威胁,防止 Cookie 被 JS 脚本窃
取。- Secure 属性的设置 设置为 True,在传输 Cookie 时使用 SSL 连接,能保护数据在传输过
程中不被篡改。配合https协议使用。
3.4 Session 测试
- Session 的概念
- Session 通过在服务器端记录信息确定用户身份
- 当访问网站时,服务器会标示该访问者,给它一个 Session ID,当会话过期后就删除这个 SessionID
- Session ID 以响应的方式传递给客户端,以 Cookie 的形式保存在客户端中,客户端在后续的请求
中将保存该 Session ID 值的 Cookie 回传给服务器,服务器就可以用来对客户端的身份进行验证- Session 保存在服务器,Session 过多的时候会消耗服务器资源,所以大型网站会有专门的Session 服务器
- Session在服务器可以保存在文本文件,可以保存是数据库,也可以保存在内存里
- Session 的测试点
- Session 的过期时间设置是否合理,通常登录的会话有效期半小时左右
- Session 过期后是否客户端生成新的 Session ID
- Session ID 和 IP 地址绑定,避免 Session ID 被别人冒用
获取其他电脑的有效SessionId(如ECShop的ECS_ID),通过浏览器覆盖自己的SessionId看是否能冒用身份
3.5 文件上传测试
- 只能上传允许的文件类型和大小
- 不能上传脚本或可执行文件
- 不能单纯以扩展名来判断文件类型
- 上传超大文件时可以正常处理,比如给出提示信息等
- 浏览好文件后,上传前或上传过程中将目标文件删除这种异常情况可以正常处理
- 上传的文件应该提供接口查看
- 上传的文件不应该直接保存于数据库中,而是将文件保存在服务器端硬盘,数据库中保存该文件的基本信息。
- 文件上传到服务器端后应该被重命名,防止文件名冲突。
3.6 数据库测试
- 数据完整性
业务数据的存储和数据库设计文档一致
特别是前端页面无法确认的数据需要使用数据库查询的SQL去确认 - 数据一致性
数据库没有条件限制或回滚功能,错误的记录被保存下来。 - 输出错误
数据源是正确的,但是由于数据传输或在程序设计中数据提取和操作的指令问题。 - 数据库并发测试
- 数据库数据的增、删、改可以用于测试数据的准备
三、易用性测试
- 页面导航
- 页面内容
内容正确,合法,符合语法规则
排版整齐统一,字体和颜色统一
错误提示信息精确 - 图形测试 图片的大小和显示
- 辅助功能测试 使用说明,导航,站点地图,帮助等
- 快捷操作 Tab 切换输入框 Shift+Tab 倒序切换输入框 Enter 默认按钮
- 满足区域文化 文字,中英文混排要求英文单词前后有间隔,货币格式和单位,日期格式
- 考虑用户群体 儿童,男性,女性,老人
- 其他测试点
不要出现水平滚动条,要使用垂直滚动条
重要信息或大纲级的内容需高亮显示
使用不同大小字体,以免找不到重点
分辨率匹配
四、 性能测试
性能测试是检验系统的性能是否符合要求的测试
- 前端性能关注点
HTTP 连接数(并发数)
页面内容加载速度
外部脚本和 CSS 加载速度 - 后端性能测试
- 负载测试
在一定的软硬件及网络环境下,通过运行一种或多种业务在不同虚拟用户数量情况下,测试服务器的性能指标是否在用户的要求范围内,用于确定系统所能承载的最大用户数、最佳用户数以及不同用户数下的系统响应时间及服务器的资源利用率。 - 压力测试
在一定的软硬件及网络环境下,通过模拟大量的虚拟用户向服务器产生负载,使服务器的资源处于极限状态下长时间连续运行,以测试服务器在高负载情况下是否能够稳定工作。 - 容量测试
测试系统可处理同时在线的最大用户数,通常和数据库容量相关。
- 性能测试的目的
- 测算系统的性能指标
- 查找系统的性能瓶颈
- 给出较适合的软硬件配置方案
- 检验硬件配置能否满足客户要求
- 性能测试工具
LoadRunner
JMeter
五、兼容性测试
- 服务器兼容性测试
Web 服务器的版本 Apache,nginx
连接不同的数据库 Oracle,MySQL,SQL Server - 客户端兼容性测试
- 浏览器兼容性测试
浏览器的种类 独立内核(Chrome,Firefox,IE11),使用率高(Edge,360,QQ)
浏览器的配置测试:不同选项,安全设置
插件和脚本兼容性测试:Flash - 操作系统兼容性测试 Windows 11+Edge,macOS+Safari,Window 7+Chrome
- 分辨率 1024x768 1366x768 1920x1080(FHD 全高清 1080p) 2K 4K
六、安全性测试
- 认证与授权
- 认证测试
- 什么是认证
认证的目的是为了认出用户是谁
认证实际上就是一个验证凭证的过程
单因素认证
多因素认证 如验证码 (人脸识别 指纹识别 主要出现在App)
密码强度策略- 认证测试点
登录失败的错误提示消息不应该明确告知是用户名不存在还是密码错误,避免客户端使用暴力
破解方式。
绕开登录验证
必须要登录成功后才能访问的页面中都需要用 Session 对客户端进行验证,确认当前
Session 已经登录过,否则访问该页面时应该自动跳转到登录页面。 避免客户端直接在 URL
地址栏输入某个地址进行访问,绕开登录验证。
连续多次登录失败,应该暂停用户登录。并将该信息发送给系统管理员,并告知客户端的 IP
地址。
密码强度测试 登录时应该使用图片验证码,避免使用工具发送数据包。
- 授权测试
- 什么是授权
授权的目的是为了决定用户能够做什么- 授权测试点
用户只能访问被授权的模块和功能
用户不能通过直接输入URL地址的方式越权访问
水平越权
垂直越权
权限的控制只能由系统管理员来维护,其它用户不能做任何修改。
权限控制要细,最好细到增删查改这种功能上,并且不同模块有不同的权限。
- 文件上传漏洞
可以和文件上传的功能测试一起考虑
对文件类型进行过滤
不能单纯只是以文件的后缀名来进行类型的判断
文件上传的大小必须有限制 - 缓存溢出漏洞
缓存溢出即是功能性 Bug,又是安全性 Bug
两段代码比较
测试输入框时考虑超长输入 - SQL 注入
SQL 注入利用现有应用程序,将恶意的 SQL 命令注入到后台数据库引擎执行的能力。
由于没有对用户的输入数据进行必要的合法性判断,导致了攻击者可以提交一段数据库查询代码,根据程序返回的结果,获得一些他想得到的数据。 - XSS 脚本攻击
XSS = Cross Site Scripting = 跨站脚本攻击
利用网站漏洞从用户那里恶意盗取信息 - 拒绝服务攻击
- DoS 拒绝服务攻击
发起大量的虚假请求攻击服务器,致使服务器无法正常处理提交的合法请求 - DDoS 分布式拒绝服务攻击
利用多台电脑作为客户端发起大量的虚假请求攻击服务器,请求数量更大,服务器更容易出问题 - SYN 攻击
耗完可用的 TCP 连接,利用“三次握手”的原理来实现攻击的目的
使用硬件防火墙,它从物理线路上直接过滤掉虚假的 SYN 数据包
- 绕过 JS 对输入的验证
- 本地修改JS脚本 修改合法性判断的条件或判断的结果
- 使用工具直接发送数据包 如接口测试工具Postman或JMeter
- 设置断点修改发送的数据包 如使用Fiddler等可以修改数据的抓包工具