随着Web技术的不断演进,测试除了对应用的功能性、界面美观性、跨平台兼容性的基本要求外、安全性和性能的要求也逐步增高。因此,全面、系统的测试思维和策略成为了保证Web应用高质量的关键因素。本篇文章将从功能测试、界面测试、兼容性测试和安全测试四个方面,深入梳理测试要点,确保Web应用在各个层面上都能满足用户和业务的需求。通过这篇文章,希望对于构建全面测试思维,提供一些帮助。
一、功能测试
1、表单测试
表单一般指在界面进行数据提交操作的,包括新增和修改数据,例如注册。它涉及到的测试包括以下方面,每个点的验证都要考虑有效及无效输入的情况:
- 输入框测试: 考虑长度、数据类型、必填、唯一性约束、空格、及业务相关约束;
- 下拉框测试: 考虑默认值展示、下拉框数据完整性及正确性、手动输入值模糊匹配、选择第一个/最后一个/中间一个/业务常见选取的操作进行测试、联动选择(例省市区选择);
- 单选: 选与不选
- 多选: 考虑单一选择、多个组合选择(两两组合、3个组合、全部组合、常见业务组合情况)
- 文件上传: 例如图片、视频、excel、txt等。
- 如果是图片、视频类文件,考虑文件大小、格式、尺寸、数量、视频时长等;
- 如果是excel/txt文件,除了考虑本身文件大小、格式、数量;还需考虑文件包含数据内容验证:长度、数据类型、必填、唯一性约束及业务常见约束、表单、是否可读取多个表单
- 表单提交按钮: 是否支持回车/单击、快速多次点击是否重复提交表单、网络中断(弱网)提交、提交之后是否有提示、提交后内容显示是否正确、敏感数据是否加密、提交是否做权限校验控制、多人针对表单同时操作的场景测试。
2、搜索测试
搜索功能的测试,需要关注输入的搜索条件以及对应搜索结果的正确性。搜索条件一般主要包含2种:输入框搜索条件、下拉框搜索条件。
1-对于多个条件的页面搜索可以按照下面的顺序去进行测试(假设搜索条件为4个):
- 任单个条件查询:考虑正常输入搜索、模糊搜索、超长搜索、不存在与之匹配的条件、为空输入;
- 任两个组合查询:确保任两个组合查询的正确性验证,验证两个组合的所有情况;
- 三个组合查询:不需要测试三个组合的全部组合。因为前面针对所有单个条件的搜索、两个组合的所有组合进行测试了,那么在这里选择2-3组三种组合进行测试即可;
- 全条件组合查询:确保最大组合的正确性;
- 默认条件查询:补充默认条件查询的用例;
- 根据需求或者业务规则选取重点条件组合查询,如果此点与前面4点重复,不需重复测试。
2-搜索条件还有一种常见的情况:时间输入框
关于按时间来搜索的测试点,可以从以下考虑:
- 开始时间=结束时间,验证一天范围的数据;
- 开始时间<结束时间,验证跨天、跨月、跨年的数据;
- 开始时间大于/小于当前时间,若是针对出生年月搜索,验证大于的情况;若是定时任务时间搜索验证小于的情况;
- 只输入开始时间或者只输入结束时间;开始时间和结束时间都不输入;
- 结束时间早于开始时间,验证系统是否给予合理提示;
- 验证是否支持手动输入时间,并注意时间格式验证例如20180612格式
3-搜索功能的重点:落在搜索结果的完整性及正确性验证!
如何进行搜索结果的正确性验证? 对比后台或数据库数据是否一致。当数据量大,那么
- 看数量是否一致:页面显示10条 vs 后台/数据库查询得出10条
- 挑选其中第一、最后、中间一条对比:页面显示 vs 后台/数据库查询
一般搜索结果数据量大的情况下,还需要关注一个功能:翻页
- 首页、上一页、下一页、尾页功能验证;注意首页情况下,上一页是否支持点击;尾页情况下,下一页是否支持点击;
- 总页数、当前页数正确性验证;
- 指定跳转页验证;例如输入8,点击跳转那么是否能正常跳转到第8页的数据;且还注意下跳转的有效范围是1-总页数 ;所以我们考虑1、最大页数的有效值验证,且也需要考虑0、总页数+1、负数/小数/非数字、空的异常值验证
3、删除测试
所有删除操作需要关注当前页面及关联功能页面的数据是否被正常删除,页面不做显示。测试点考虑如下:
- 不选择数据,点击删除,是否合理提示
- 选择一条数据,点击删除,页面不显示
- 连续删除多个产品,是否支持批量删除
- 选择全选,点击删除,页面数据被清空
- 删除一个有关联性的数据,是否提示
- 删除数据后,再次点击添加,是否正常添加成功
除了页面不显示之外,对于数据库表数据,分逻辑删除、物理删除2种情况。界面删除操作,对于数据库通常是逻辑删除:
- 逻辑删除:假删除,对应数据库表中有个字段(例is_deleted)会进行标记1删除,0未删除。该条记录在数据库中仍然存在。
- 物理删除:对应数据库表中的数据,真实删除了。
4、业务流程测试
除了单个功能的流程验证外,功能与功能串联起来的各种业务场景,也是功能测试的重点,通常采用场景法来做分析。例如电商项目有从浏览商品到下单购买的业务场景、也有取消订单与退款退货的流程等
- 单个功能的流程:例如用户在搜索栏输入商品关键词(如“手机”)-->点击搜索按钮-->搜索结果页显示相关商品。
- 功能与功能串联的业务场景流程:例如用户注册-->用户登录-->搜索商品-->浏览商品详情页-->加入购物车-->提交订单-->支付-->跳转订单详情页,订单状态更改为:待发货。
二、界面测试
界面测试通常来说,只要对比产品的原型图,是一致的,就测试通过。但也有可能存在原型图覆盖不到的页面,且作为专业测试来说,基于当前产品原型设计,我们也可以关注:
界面布局是否合理、整体风格是否一致、各个控件的放置位置是否符合客户使用习惯,此外还要测试界面操作便捷性、导航简单易懂性,页面元素的可用性,界面中文字是否正确,命名是否统一,页面是否美观,文字、图片组合是否完美等等。
详细来说,比如:
1、导航测试
导航是指位于页面顶部或者侧边区域的,它起着链接站点或者软件内的各个页面的作用。
例如是否易于导航?导航是否直观?Web系统的主要部分是否可通过主页存取?Web应用系统导航帮助要尽可能地准确。Web系统是否需要站点地图、搜索引擎或其他的导航帮助?页面结构、导航、菜单、连接的风格是否一致?
2、图形测试
图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。
例如要确保图形有明确的用途。比如banner页图片的广告宣传。所有页面字的风格、颜色、格式是否一致?背景颜色是否与字体颜色和前景颜色相搭配?图片的大小和质量也是一个很重要的因素,不失真?需要验证的是文字回绕是否正确。如果说明文字指向右边的图片,应该确保该图片出现在右边。
3、内容测试
用来检验Web应用系统提供信息的正确性、准确性和相关性。
例如信息的正确性是指信息是可靠的还是误传的?信息的准确性是指是否有语法或拼写错误?信息的相关性是指是否在当前页面可以找到与当前浏览信息相关的信息列表或入口?
4、表格测试
表格经常和其他界面元素一起协同使用,主要承载数据的归纳、展示与对比的功能,是列表的一种。
- 存在筛选条件、搜索控件,是否列于页面上方?
- 对于日期筛选条件,是否单独处理,展示出来?
- 对于多个搜索条件的场景,是否采用高级搜索按钮并将其打包收起?
- 对于多个搜索条件的场景,是否配置重置按钮,便于一键清空所有搜索条件?
- 在数据显示超过多条时(一屏无法完全显示,需要滚动查看时),且表格中的数据不能直观的展示出数据类型,是否采用固定表头的形式,时刻显示数据类型
- 当字段数量过多,需要横向滚动表格,且需要对比数据时,采用固定属性列字段
- 是否支持排序,上下箭头指示排序,一般上下空心箭头默认,上箭头为升序,下箭头为降序
三、兼容测试
不同的操作系统平台、浏览器、分辨率进行测试。web应用主要是考虑浏览器的兼容性测试。浏览器很多,时间成本等条件约束下,考虑主流浏览器的兼容性。
1、开展人工测试,测试web应用在主流浏览器显示正常,不会有页面错乱错位等。
主要是页面的格式,字体,输入框,下拉框,复选框,按钮等的检查;页面显示是否正常等。一般穿插在功能测试中同步检查。
2、也可以借助一些第三方测试工具
例如IETester、BrowserShots等,详见我之前写过的一篇文章
四、安全测试
安全测试内容是很多测试人员在测试中,不太会关注或者能力范围内关注不到的一个领域,很多公司的安全测试会找专业第三方安全公司来做。但作为专业测试,在一个web应用的测试流程中,可以去补充考虑一些业务层面的安全测试要点。比如:
1. 身份验证和授权
- 弱口令测试 :检查是否用户设置过于简单或常见的密码,确保有强密码策略。
- 多因素认证 :验证多因素认证是否正确配置和执行,防止单一身份验证被攻破。
- 权限管理 :测试不同角色和用户的权限是否正确设置,确保用户只能访问其授权范围内的资源。可以通过抓包修改参数,例如身份id、属性id,验证是否存在越权。
- 会话管理 :检查会话超时设置,验证会话在注销或超时后是否彻底销毁,避免会话劫持。
2. 输入验证
- SQL注入 :测试所有用户输入是否经过正确的过滤和处理,防止SQL注入攻击。如输入某些特殊的SQL语句或SQL片断。' or 1=1- -
- 跨站脚本(XSS) :检查应用是否对用户输入进行编码,防止恶意脚本在浏览器中执行。在URL参数或表单中输入如下语句(如:<scrīpt>alert(document.cookie)</scrīpt>)来进行测试,当用户浏览 时便会弹出一个警告框,内容显示的是浏览者当前的cookie串,这就说明该网站存在XSS漏洞。
- 输入长度和格式验证 :确保输入字段的长度和格式正确处理,防止缓冲区溢出或意外的数据注入。
3. 数据加密
- 敏感数据传输 :验证所有敏感数据(如登录凭证、个人信息)是否通过加密的方式(如HTTPS)进行传输。
- 存储加密 :检查数据库和存储中的敏感信息(如密码、信用卡信息)是否经过加密处理,确保数据在存储时的安全性。
- 加密协议和算法 :确认应用使用的是最新和最安全的加密协议和算法,避免使用过时或已知存在漏洞的加密方式。
4. 支付业务逻辑
针对软件的支付/充值/兑换等跟钱相关的功能,对整个操作流程进行抓包,判断有无敏感信息可修改。敏感信息包括:金额、数量、运费、优惠等;
- 在整个支付流程(提交订单->确认订单->支付)中,修改金额、数量、运费、优惠,是否存在问题
- 获取未支付订单的状态,修改为已支付
- 跳过支付:网站支付成功后跳转的链接携带订单号;抓取支付信息,将未支付的订单号拼接到支付成功跳转的链接中
- 越权支付:网站如果有余额功能,在进行支付时,传参存在例userid=xx,尝试修改id值,是否可利用别人的余额来购买东西
5. 错误处理
- 通用错误信息 :检查错误信息是否对用户隐藏了敏感的系统或调试信息,防止攻击者利用这些信息了解系统结构。比如404,或500页面,是否给出了友好的错误提示信息比如“你访问的页面不存在”等,而并非曝露一些程序代码。
- 异常处理 :验证系统在发生异常时是否安全处理,确保不会泄露敏感信息或导致系统崩溃。
6. 文件上传与下载
- 文件类型限制 :检查文件上传功能是否严格限制文件类型,防止恶意代码通过上传文件注入系统。
- 文件路径处理 :确保文件下载功能没有路径遍历漏洞,防止用户访问未授权的文件。在URL中输入一定数量的“../”和“./”,验证系统是否ESCAPE掉了这些目录跳转符。