本文目录一览:
接口测试用例的编写要点有哪些?
1)必填字段:请求参数必填项、可选项
2)合法性:输入输出合法、非法参数
3)边界:请求参数边界值等
4)容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理
5)响应数据校验:断言、数据提取传递到下一级接口...
6)逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况
7)性能:对接口模拟并发测试,逐步加压,分析瓶颈点
8)安全性:构造恶意的字符请求,如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)之前的黑马程序员软件测试公开课里面讲过,你也可以搜索黑马程序员视频库进行免费学习。
如何进行Web渗透测试
什么是渗透测试?
渗透测试,是渗透测试工程师完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标网络、主机、应用的安全作深入的探测,发现系统最脆弱的环节。
如何进行Web渗透测试?
完整web渗透测试框架当需要测试的web应用数以千计,就有必要建立一套完整的安全测试框架,流程的最高目标是要保证交付给客户的安全测试服务质量。
1、立项:项目建立,时间安排,人力分配,目标制定,厂商接口人确定;
系统分析威胁分析:针对具体的web应用,分析系统架构、使用的组件、对外提供的接口等,以STRIDE为威胁模型进行对应的安全威胁分析,输出安全威胁分析表,重点关注top3威胁;
制定测试用例:根据威胁分析的结果制定对应的测试用例,测试用例按照模板输出,具备可执行性;
测试执行漏洞挖掘:测试用例执行发散测试,挖掘对应的安全问题or漏洞;
问题修复回归测试:指导客户应用开发方修复安全问题or漏洞,并进行回归测试,确保安全问题or漏洞得到修复,并且没有引入新的安全问题;
项目总结评审:项目过程总结,输出文档评审,相关文档归档。
2、Web应用的渗透测试流程
主要分为3个阶段,分别是:信息收集→漏洞发现→漏洞利用,下面仔细分析一下各个阶段流程:
一、信息收集
在信息收集阶段,我们需要尽量多的收集关于目标web应用的各种信息,比如:脚本语言的类型、服务器的类型、目录的结构、使用的开源软件、数据库类型、所有链接页面,用到的框架等
脚本语言的类型:常见的脚本语言的类型包括:php、asp、aspx、jsp等
测试方法:
1 爬取网站所有链接,查看后缀
2 直接访问一个不存在页面后面加不同的后缀测试
3 查看robots.txt,查看后缀
服务器的类型:常见的web服务器包括:apache、tomcat、IIS、ngnix等
测试方法:
1 查看header,判断服务器类型
2 根据报错信息判断
3 根据默认页面判断
目录的结构:了解更多的目录,可能发现更多的弱点,如:目录浏览、代码泄漏等。
测试方法
1 使用字典枚举目录
2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取
3 查看robots.txt是否泄漏
使用的开源软件:我们如果知道了目标使用的开源软件,我们可以查找相关的软件的漏洞直接对网站进行测试。
测试方法
指纹识别(网络上有很多开源的指纹识别工具)
数据库类型:对于不同的数据库有不同的测试方法。
测试方法
1 使应用程序报错,查看报错信息
2 扫描服务器的数据库端口(没做NAT且防火墙不过滤时有效)
所有链接页面:这个跟前面的获取目录结构类似,但是这个不只是获取网站的所有功能页面,有时候还可以获取到管理员备份的源码。
测试方法
1 使用字典枚举页面
2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取
3 查看robots.txt是否泄漏
用到的框架:很多网站都利用开源的框架来快速开发网站,所以收集网站的框架信息也是非常关键的。
测试方法
指纹识别(网络上有很多开源的指纹识别工具)
二、漏洞发现
在这个阶段我们在做测试的时候要对症下药,不能盲目的去扫描,首先要确定目标应用是否使用的是公开的开源软件,开源框架等、然后在做深一度的漏洞扫描。
关于开源软件的漏洞发现
开源的软件:常见的开源软件有wordpress、phpbb、dedecms等
开源的框架:常见的开源框架有Struts2、 Spring MVC、ThinkPHP等
中间件服务器:常见的中间件服务器有jboss、tomcat、Weblogic等
数据库服务:常见的数据库服务mssql、mysql、oracle、redis、sybase、MongoDB、DB2等
对于开源软件的测试方法
1 通过指纹识别软件判断开源软件的版本信息,针对不同的版本信息去开放的漏洞数据库查找相应版本的漏洞进行测试
2 对于默认的后台登录页、数据库服务端口认证等入口可以进行简单的暴力破解、默认口令尝试等操作
3 使用开源的漏洞发现工具对其进行漏洞扫描,如:WPScan
关于自主开发的应用
手动测试:这个阶段,我们需要手工测试所有与用户交互的功能,比如:留言、登入、下单、退出、退货、付款等操作
软件扫描:使用免费的软件扫描,如:appscan、wvs、netsparker,burp等
可能存在的漏洞
Owasp关键点
代码安全之上传文件
代码安全之文件包含
代码安全之SSRF
逻辑漏洞之密码重置
逻辑漏洞之支付漏洞
逻辑漏洞之越权访问
平台安全之中间件安全
三、漏洞利用
针对不同的弱点有不同的漏洞利用方式,需要的知识点也比较多。一般这个阶段包括两种方式,一种是手工测试,一种是工具测试
手工测试
手工测试是通过客户端或服务器访问目标服务,手工向目标程序发送特殊的数据,包括有效的和无效的输入,观察目标的状态、对各种输入的反应,根据结果来发现问题的漏洞检测技术。手工测试不需要额外的辅助工具,可由测试者独立完成,实现起来比较简单。但这种方法高度依赖于测试者,需要测试者对目标比较了解。手工测试可用于Web应用程序、浏览器及其他需要用户交互的程序。
这种方式对于有特殊过滤等操作,或者网络上没有成型的利用工具的时候可以使用。
工具测试
网络上有很多好用的免费利用工具,比如针对sql注入的sqlmap、针对软件漏洞的matesploit等。
H5用户登录测试用例
输入已注册的用户名和正确的密码,验证是否登录成功;
输入已注册的用户名和不正确的密码,验证是否登录失败,并且提示信息正确;
输入未注册的用户名和任意密码,验证是否登录失败,并且提示信息正确;
输入未激活的、已锁定的、被注销的用户名和正确密码,验证是否登录成功;
用户名和密码两者都为空,验证是否登录失败,并且提示信息正确;
用户名和密码两者之一为空,验证是否登录失败,并且提示信息正确;
第一次登录失败,再次输入正确的用户名和密码,验证是否登录成功;
如果登录功能启用了验证码功能,用户名、密码、验证码都输入正确,验证是否登录成功;
如果登录功能启用了验证码功能,用户名、密码正确,验证码输入错误,验证是否登录失败,并且提示信息正确;
点击验证码图片是否可以更换验证码,更换后的验证码是否可用;
刷新页面是否会刷新验证码,刷新后的验证码是否可用;
如果验证码具有时效性,需要分别验证时效内和时效外验证码的有效性;
无网络模式下登录,是否给出“网络未连接”或“网络异常”的提示;
第一次登录请求超时后(服务器出问题,随后恢复正常),再次请求登录能否登录成功。
页面默认焦点是否定位在用户名的输入框中;
快捷键 Tab 和 Enter 等,是否可以正常使用;
用户名和密码是否大小写、空格敏感;
使用中文、英文键盘输入字母传给后端的字符长度是否一致;
前端页面是否根据设计要求限制用户名和密码长度,且前后台都需要限制;
页面上的密码框是否加密显示,是否需要设置明暗码切换按钮;
输入栏是否设置快速删除按钮;
忘记用户名和忘记密码的功能是否可用;
修改密码后,是否重定向到登录页面;
修改密码后,原密码是否作废不可用;
在其他终端修改密码后,PC端是否自动下线,若下线后,使用原密码能否继续登录;
使用默认密码第一次登录成功时,是否提示修改密码;
第一次登录成功,是否会同步其他终端用户信息;
用户登录成功但是会话超时后,继续操作是否会重定向到用户登录界面;
不同级别的用户,比如管理员用户和普通用户,登录系统后的权限是否正确;
输入错误密码的限制次数:
分别测试最大值-1、最大值、最大值+1 时的输错密码情况;
超过最大次数限制后,是否采取强制手段限制登录或对账号暂时冻结处理;
超过最大次数限制后,分别输入正确的密码和错误的密码再次登录。
用户名、密码、验证码输入框是否不支持复制和粘贴;
密码输入框内输入的密码是否都可以在页面源码模式下被查看;
用户密码后台存储是否加密;
用户密码在网络传输过程中是否加密;
密码是否具有“有效期”,密码有效期到期后,是否提示需要修改密码;
是否可记住密码,记住的密码保存是否加密;
记住密码是否有“有效期”,若有“有效期”,过期之后是否会清空密码;
登录成功后的session时效设置;
登录错误后的提示是否有安全隐患;
退出登录后再次登录,使用记住的密码,是否登录成功;
不登录的情况下,在浏览器中直接输入登录后的 URL 地址,验证是否会重新定向到用户登录界面;
用户登录过程中log中是否有个人信息明文打印
用户名和密码的输入框中分别输入典型的“SQL 注入攻击”字符串,验证系统的返回页面;
用户名和密码的输入框中分别输入典型的“XSS 跨站脚本攻击”字符串,验证系统行为是否被篡改;
连续多次登录失败情况下,系统是否会阻止后续的尝试以应对暴力破解;
登录后输入登录URL,是否还能再次登录?如果能,原登录用户是否变得无效;
同用户同终端的多种浏览器上登录,验证登录功能的互斥性是否符合设计预期;
同用户不同终端,先后登录,验证登录是否具有互斥性;
同用户同浏览器已经登录,再次打开一个标签页时,是否需要重新登录;
不同用户在同终端同浏览器登录,验证登录信息token的正确性;
不同用户在同终端同浏览器登录,被踢后,页面是否会跳转到登录页;
是否支持第三方登录,如微信、QQ、微博;
是否允许第三方工具平台存储密码;
是否可以使用登录的API发送登录请求,并绕开验证码校验;
是否可以用抓包工具抓到的请求包直接登录;
截取到的token等信息,是否可以在其他终端上直接使用,绕开登录。token过期时间校验;
性能压力测试用例:
单用户登录的响应时间是否小于 3 秒;
单用户登录时,后台请求数量是否过多;
高并发场景下用户登录的响应时间是否小于 5 秒;
高并发场景下服务端的监控指标是否符合预期;
高集合点并发场景下,是否存在资源死锁和不合理的资源等待;
长时间大量用户连续登录和登出,服务器端是否存在内存泄漏。
兼容性测试用例:
不同浏览器下,验证登录页面的显示以及功能正确性;
相同浏览器的不同版本下,验证登录页面的显示以及功能正确性;
不同移动设备终端的不同浏览器下,验证登录页面的显示以及功能正确性;
不同分辨率的界面下,验证登录页面的显示以及功能正确性;
网络延迟或者弱网或者切换网络或者断网时正常登录是否正常
测试面试题1:一个"用户登录"的测试用例怎么写
1.输入已注册的用户名和正确的密码,验证是否登录成功
2.输入已注册的用户名和不正确的密码,验证是否登录失败,并且提示信息正确
3.输入未注册的用户名和任意密码,验证是否登录失败,并且提示信息正确
4.用户名和密码两者都为空,验证是否登录失败,并且提示信息正确
5.用户名和密码两者之一为空,验证是否登录失败,并且提示信息正确;
6.如果登录功能启用了验证码功能,在用户名和密码正确的前提下,输入正确的验证码,验证是否登录成功
7.如果登录功能启用了验证码功能,在用户名和密码正确的前提下,输入错误的验证码,验证是否登录失败,并且提示信息正确。
1.用户名和密码是否大小写敏感
2.页面上的密码框是否加密显示
3.后台系统创建的用户第一次登录成功时,是否提示修改密码
4.忘记用户名和忘记密码的功能是否可用
5.前端页面是否根据设计要求限制用户名和密码长度
6.如果登录功能需要验证码,点击验证码图片是否可以更换验证码,更换后的
7.验证码是否可用刷新页面刷新验证码
8.如果验证码具有时效性,需要分别验证时效内和时效外验证码的有效性
9.用户登录成功但是会话超时后,继续操作是否会重定向到用户登录界
10.不向级别的用户,比如管理用户和普通用户,登录系统后的权限是否
11.页面默认焦点是否定位在用户名的输入框
12.快捷键Tab和 Enter等,是否可以正常使用
1.用户密码后台存储是否加密
2.用户密码在网络传输过程中是否加密
3.密码是否具有有效期,密码有效期到期后,是否提示需要修改密码
4.不登录的情况下,在浏览器中直接输入登录后的URL地址,验证是否会重新定向到用户登录界面;
5.密码输入框是否不支持复制和粘贴;
6.密码输入框内输入的密码是否都可以在页面源码模式下被查看
7.用户名和密码的输入框中分别输入典型的"SQL注入攻击”字符串,验证系统的返回页面
8.用户名和密码的输入框中分别输入典型的"XSS跨站脚本攻击”字符串,验证系统行为是否被篡改;
9.连续多次登录失败况下系统是否会阻止后续的尝试以应对暴力破解
10.同一用户在同一终端的多种浏览器上登录,验证登录功能的互斥性是否符合设计预期
11.同一用户先后在多台终端的浏览器上登录,验证登录是否具有互斥性。
1.单用户登录的响应时间是否小于3s
2.单用户登录时,后台请求数量是否过多
3.高并发场景下用户登录的响应时间是否小于5S
4.高并发场景下服务端的监控指标是否符合预期
5.高集合点并发场景下,是否存在资源死锁和不合理的资源等待
6.长时间大量用户连续登录和登出,服务器端是否存在内存泄漏
1.不同浏览器下,验证登录页面的显示以及功能正确性
2.相同浏览器的不同版本下,验证登录页面的显示以及功能正确性
3.不同移动设备终端的不同浏览器下,验证登录页面的显示以及功能正确性
4.不同分辨率的界面下,验证登录页面的显示以及功能正确性
登录功能,怎么设计测试用例?
具体需求:
有一个登录页面,有一个账号和一个密码输入框, 一个提交按钮。
此题的考察目的:
1、了解需求(测什么都是从了解需求开始);
2、是否有设计 Test Case 的能力
3、是否熟悉各种测试方法;
4、是否有丰富的 Web 测试经验;
5、是否了解 Web 开发;
了解需求:
1、登录界面应该是弹出窗口式的,还是直接在网页里面;
2、账号长度和密码的强度(比如需要多少位、大小写敏感、特殊字符混搭等);
3、界面美观是否有特殊要求?(即是否要进行 UI 测试);
4、····
用例设计:
测试需求分析完成后,开始用例设计,主要可以从以下几个方面考虑:
功能测试(Function Test)
1、输入正确的账号和密码,点击提交按钮,验证是否能正确登录。(正常输入)
2、输入错误的账号或者密码, 验证登录会失败,并且提示相应的错误信息。(错误校验)
3、登录成功后能否跳转到正确的页面(低)
4、账号和密码,如果太短或者太长,应该怎么处理(安全性,密码太短时是否有提示)
5、账号和密码,中有特殊字符(比如空格),和其他非英文的情况(是否做了过滤)
6、记住账号的功能
7、登录失败后,不能记录密码的功能
8、账号和密码前后有空格的处理
9、密码是否加密显示(星号圆点等)
10、牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使用者),刷新或换一个按钮是否好用
11、登录页面中的注册、忘记密码,登出用另一帐号登录等链接是否正确
12、输入密码的时候,大写键盘开启的时候要有提示信息。
13、什么都不输入,点击提交按钮,看提示信息。(非空检查)
界面测试(UI Test)
1、布局是否合理,2 个 Testbox 和一个按钮是否对齐
2、Testbox 和按钮的长度,高度是否符合要求
3、界面的设计风格是否与 UI 的设计风格统一
4、界面中的文字简洁易懂,没有错别字。
性能测试(Performance Test)
1、打开登录页面,需要几秒
2 、输入正确的账号和密码后,登录成功跳转到新页面,不超过 5 秒
安全性测试(Security Test)
1、登录成功后生成的 Cookie 是否有 HttpOnly(降低脚本盗取风险)
2、账号和密码是否通过加密的方式,发送给 Web 服务器
3、账号和密码的验证,应该是用服务器端验证,而不能单单是在客户端用 javaScript 验证
4、账号和密码的输入框,应该屏蔽 SQL 注入攻击
5、账号和密码的输入框,应该禁止输入脚本(防止 XSS 攻击)
6、错误登录的次数限制(防止暴力破解)
7、考虑是否支持多用户在同一机器上登录;
8、考虑一用户在多台机器上登录
可用性测试(Usability Test)
1、是否可以全用键盘操作,是否有快捷键
2、输入账号,密码后按回车,是否可以登录
3、输入框是否可以以 Tab 键切换
兼容性测试(Compatibility Test)
1、主流的浏览器下能否显示正常已经功能正常(IE6~11, FireFox, Chrome, Safari 等 )
2、不同的平台是否能正常工作,比如 Windows, Mac
3、移动设备上是否正常工作,比如 iPhone, Android
4、不同的分辨率
本地化测试 (Localization Test)
1、不同语言环境下,页面的显示是否正确。
软件辅助性测试 (Accessibility Test)
软件辅助功能测试是指测试软件是否向残疾用户提供足够的辅助功能
1、高对比度下能否显示正常(视力不好的人使用)