尽早、尽快、尽多的发现软件缺陷,促进软件质量和客户满意度的提升。
需求评审——测试计划——测试用例设计——环境搭建——测试执行(缺陷提交、回归验证)——测试报告。
1.what(做什么):测试范围
2.why(为什么做):测试目标
3.when(何时做)
4.where(在哪里):测试环境
5.who(谁来做)
6.how(如何做)
1.确定测试资源。
2.工作量估算,进度安排。
3.风险分析,测试策略。
4.编写计划书
设计一种条件,软件在该条件下能够正常运行,并达到期望效果。
1.测试用例编号:产品名
2.测试阶段测试项目:对应一个功能模块(细分功能)
3.测试标题:直接对测试点进行计划,输入内容+结果,同一功能不能重复,(来自测试点)。
4.重要级别:高·中·低
5.预置条件:需要满足一些前提条件,否则无法执行测试用例。
6.测试输入:需要加工的测试信息,根据具体情况来设计,(跟步骤结合起来,要有指导性意义)。
7.步骤描述:明确给出每个步骤的描述,执行人员可以通过该步骤完成操作。
8.预期结果:根据预期输出对比实际结果,来判断实际结果是否符合要求。(预期结果唯一,不能出现是否、可能) 测试结果、测试者/时间、备注。
1.测试过程:测试过程需要对测试人员、测试时间、测试地点、测试版本等信息进行描述。
2.测试环境:是指软件环境和硬件环境。
3.测试范围:是指所测模块上的所有功能点。
4.测试结果:指测试用例执行的情况汇总,执行结果通过率,BUG的问题汇总,BUG的分布情况等,其他有关联的测试结果都可以在这里描述。
5.系统存在的风险:系统中遗留的BUG会对软件造成什么风险。
6.测试结论:能否上线(通过)的结论。
7.附件清单:测试用例执行的清单和BUG清单。
最简单的开发模式,计划进度安排和正规开发过程几乎没有,几乎没有测试,所有精力都花费在开发软件和编写代码上。
摸着石头过河模型,典型的非正规说明书—编码、修改、反复,直到—最终产品;(没有计划和文档)
从最初构思到最终产品要经过一系列步骤,每一个步骤结束时,写好文档,项目小组组织审查,并决定是否进入下一步。如果项目没有准备好进入下一步,就停滞下来直到准备好。(有完整细致的说明,所有细节都有文档记录)
计划赶得上变化的模型,适合于大型复杂系统;测试人员最喜欢的模型,因为通过参与最早设计阶段,可以尽早的影响到产品。
敏捷开发提倡迭代式和增量式的开发模式,并强调测试在其中的作用;以用户为中心,以客户需求为导向的开发过程,客户是敏捷的关键环节,依赖客户的参与、测试驱动以及紧凑的迭代开发周期。
用户需求–>需求分析–>概要设计–>详细设计–>编码–>单元测试–>集成测试–>系统测试–>验收测试
V模型明确的将测试分为不同的阶段,测试策略包括:底层测试和高层测试,底层测试是为了源代码的正确,高层测试是为了整个系统满足用户的需求。
缺点:测试的对象是程序本身,忽视了测试对需求分析、系统设计等活动的验证和确认功能,直到后期的验收测试才被发现;过程是线性的、顺序的,不能反复和迭代。
左V: 需求分析–>概要设计–>详细设计–>编码实现(最底层)–>模块集成–>系统构建–>系统安装;
右V: 需求测试–>概要设计测试–>详细设计测试–>单元测试(最底层)–>集成测试–>系统测试–>验收测试;
优点:开发和测试同步,有利于尽早的发现问题;测试伴随整个软件开发周期,程序、需求、设计全部测试。
缺点:需求、设计、编码等活动保持线性前后关系,无法支持迭代开发模型。
测试级别之间不存在严格的次序关系,各阶段可以反复触发、迭代、增量。将测试完全独立出来,形成一个完全独立的流程,测试贯穿产品整个生命周期。
左边描述的是针对单独程序片段进行相互分离的编码和测试,通过频繁交接,最终集成为可执行的程序,再对这些可执行的程序进行测试。
理念:探索性测试,不进行实现计划的特殊类型测试,发散性测试。
优点:能发现更多测试计划之外的错误。
缺点:对测试人员要求极高,时间、人力、物力、等成本增加。
敏捷测试宗旨:测试驱动开发
核心价值观:沟通、反馈、尊重、学习、分享。
敏捷测试是协同测试的一种形式,程序员结对编程,程序员分饰测试员角色,敏捷测试是连续测试;侧重单元测试和验收测试,单元测试的过程是先设计单元测试用例,然后进行编码,之后执行测试。
强调客户参与,重点关注持续迭代的测试新开发的功能,建议尽早开始测试。单元测试通过之后代码集成到代码库中,再有客户进行验收测试。
HTML 是用来描述网页的一种语言。HTML 是一种在 Web 上使用的通用标记语言。HTML 允许你格式化文本,添加图片,创建链接、输入表单、框架和表格等等,并可将之存为文本文件,浏览器即可读取和显示。
新建一个test HTML文件,如下:
ZONGXP
我的第一个标题
我的第一个段落。
maxiaohei
css
csss
今天天气真不错,PM2.5也就500
常用选择器
锄禾日当午,汗滴禾下土。
锄禾日当午,汗滴禾下土。
锄禾日当午,汗滴禾下土。
锄禾日当午,汗滴禾下土。
锄禾日当午,汗滴禾下土。
锄禾日当午,汗滴禾下土。
链接也称超链接,是指从一个网页指向另一个目标的连接关系,所指向的目标可能是一个网页,相同网页的不同位置,图片、电子邮件地址、文件、应用程序等;
链接最容易出现的几个错误:错误链接,如URL地址错误,空链接、死链接、孤立页面。
表单是系统与用户交换最主要的界面,测试过程主要关注程序能否正确处理客户提交的信息,并将信息正确的反馈到客户端,测试重点: 文本输入框对长度是否有限制, 文本输入框对字符类型是否有限制,文本输入框模式匹配是否正确,各按钮实现的功能是否正确。
cookies是能够让网站服务器把少量数据存储到客户端的硬盘或内存,或是从客户端的硬盘读取数据的技术。cookie的用途:
1>自动登录,登录时选择记住用户名,下次登录时会自动带出用户名。
2>广告精准投放,主动推送浏览过的商品。
cookies的测试方面:
1>cookies的安全性,不要存储一些敏感信息,进行字段加密。
2>cookies过期时间是否正确。
3>cookies的变量名与值是否正确。
4>cookies是否必要,是否缺少:一是生成的cookies文件是否与创建的一致,不能多也不能少,二是对于不必要的cookies可以删除。
5>cookies的作用域是否正确合理,多个作用域之间关系的测试。
设计语言测试web设计语言版本的差异可以引起客户端与服务端的严重问题,如HTML的版本;不同脚本语言,如Java,JavaScript,ActiveX,VBScript或perl等,也要进行验证。不同的设计语言与平台有不同的兼容性。不同的脚本语言执行的时间也不同;嵌入其他语言的能力,要考虑当前脚本语言对其他语言的支持程度;数据库可能升级,测试时要注意脚本语言支持数据库的完善程度。
文件上传只能上传允许的附件类型,不能上传脚本或可执行文件;不能单纯以后缀名来判断文件类型,上传的文件应该提供接口查看;上传的文件不应该直接保存到数据库中,而是将文件保存到服务器端的硬盘,该文件的基本信息保存到数据库。该文件上传到服务器后应该重命名,防止文件名冲突。
链接速度速度测试,链接的响应速度时间不能太长,一般不超过5秒。
负载测试(load testing),测试系统能够承受的最大负载,如最大用户量,最大业务量,最大数据量等以及性能表现。
压力测试(stress testing)测试系统在一定压力下的性能表现,通常业务的错误率不能超过5%。
格式验证,验证web页面中一些空间默认的标准定义,如默认值,项目按顺序排列等。
导航条测试,各页面的导航条是否能正确的显示,各页面下导航条显示的内容是否正确,不同状态下(如登录与未登录),导航条显示的内容是否正确,导航条的每项内容链接是否正确。
拼写和语法测试,验证页面内容,菜单和链接、图片、表格内容的拼写和语法。
页面排版测试, 页面标题验证,页面图形验证,,页面版本信息验证,页面长度验证。
tab键测试,tab顺序正确跳转。
基本安全测试,各种登录模式的安全验证,对口令各种要求的测试。
用户权限测试
cookies和session的有效期验证,等特殊机制的验证。
敏感数据加密、数据存储安全性的验证。
认证测试,是否存在验证码,服务器不能对认证错误提供准确信息,如用户名错误,密码错误等;提供合理的锁定策略;预防认证被绕过,如SQL注入等。
会话管理测试,用户登录后,身份信息不再由客户端提交,而是以服务器端会话信息中所保存的信息为准。
权限管理测试,横向越权:攻击者尝试访问与他拥有相同权限用户的资源;纵向越权:一个低级别攻击者尝试访问高级别用户资源。
文件和目录测试,不存在不需要对外开放的敏感接口或者接口进行了完善的权限控制,禁止获取敏感的目录或文件信息,所有对目录的访问均不能打印出文件列表,禁止访问和下载文档的备份,不能越权获取到不该获取的文件。如dirbuster扫描。
为了发现错误和缺陷而运行数据库的过程,分为黑盒和白盒测试。
数据库黑盒测试,数据库表结构是否合理,数据结构(如数据类型、长度)是否正确定义,表与表之间的关系是否正确,主外键是否合理,索引的创建是否合理,存储过程功能是否合理,能否正确接收输入输出,能否正确增加,删除,更新数据,数据库操作权限定义是否合理,表级列级完整性约束条件是否满足,数据库的处理能力,可靠性,可维护性,性能是否满足要求。
1.黑盒测试(功能测试)
2.灰盒测试(接口测试)
3.白盒测试(单元测试)
1.需求变更不频繁
2.项目周期长
3.项目需要回归测试
QTP/Selenium/Jmeter(接口、性能)/Loadrunner(web/性能)/Robot farmework
selenium:用于web应用程序的测试工具;核心功能:可以在多个浏览器上进行自动化测试。
web自动化测试的优点:用例执行效率快、 脚本可重复执行、 减少人为的错误、 客服手工测试的局限性
Python环境搭建
XPath–元素定位
- Xpath基本语法公式://标签(可以用*表示)[@属性=“属性值”]
- 根据元素自身特征定位:
1>class //*[@class=“topbar-cart”]
2>id 如://input[@id=“search”]
- 根据元素层级关系定位
1>上下级关系
2>同级关系
- 属性值部分匹配—//*[contains[@属性,“部分属性值”]]
- 验证表达式—用控制台的搜素框(Ctrl+F)
功能模块测试
交叉事件测试
性能测试
安全测试
兼容性测试
安装/卸载测试
接口测试
网络测试
手机APP测试方法
运行测试,APP安装完成后的试运行,可正常打开软件,APP打开测试,是否有加载状态进度提示,APP打开速度测试,速度是否可观,APP页面切换是否流畅,逻辑是否正确。
注册:用户名密码长度,注册后的提示页面,前台注册页面和后台的管理页面数据是否一致,注册后在后台管理页面提示。
登录:使用合法的用户登录系统,系统是否允许多次非法登录,是否有次数限制。使用已经登录账号登录系统是否正确处理,使用禁用账号登录系统是否能正确处理,用户名、密码漏填是否能登录,删除、修改后的用户、原用户登录、登录超时处理。
注销:注销原模块,新的模块系统是否能正确处理,终止注销是否能返回原模块,原用户。注销原用户,新用户系统能否正确处理;使用错误的账号、口令、无权限的被禁用的账号进行注销。
应用的前后台切换,APP切换到后台,再回到APP,检查是否停留在上一次操作界面。APP切换到后台,再回到APP,检查功能及应用状态是否正常,前后台切换、锁屏的测试······
免登录
数据更新
离线浏览
PUSH(推送消息)测试
交叉事件测试:又称事件冲突测试,是指一个功能正在执行过程中,同时另外一个事件或操作对该过程进行干扰测试,如:APP在前后台运行状态时与来电、文件下载,等关键运用的交互测试。
性能测试,权限测试:在各种边界压力情况下,如内存满时安装APP、运行APP时手机断电,运行APP时断掉网络,验真APP是否能正确响应。
响应能力测试:APP各类操作是否满足用户响应时间要求;APP安装、启动、卸载的响应时间,APP中各种功能性操作的影响时间。
压力测试:反复/长期操作下,系统资源是否占用异常,APP反复进行安装卸载,系统资源是否占用异常;大数量的测试:在特定环境下,客户端一次性更新大量的数据时,客户端是否能正常处理,分为3种情况:
1>客户端第一次使用,第一次就更新大量数据。
2>客户端在平时更新中,更新大量的数据。
3>客户端已经在手机本地下载大多数据后,再次大量更新。
web设计语言版本的差异可以引起客户端或服务器端严重的问题,如使用哪种版本的HTML等;不同的浏览器内核引擎不同,会导致与不同的开发语言的兼容性情况不同。不同的脚本执行的时间也不同;数据库可能升级,要考虑脚本语言支持数据库的完善程度。
文件上传:只能上传允许的附件类型,不能上传脚本或可执行文件,不能单纯以后缀名来判断文件类型,上传的文件应该提供接口查看,文件上传到服务器端后应该重命名,防止文件名冲突、、、、、、
adb(Android Debug Bridge) 是Android sdk的一个管理工具
adb是用来连接安卓手机和PC端的桥梁,要有adb作为二者之间的维系,用户在电脑上对手机进行操作。
Android的初衷是用adb这样的工具来协助开发人员在开发Android的过程中更好的调试apk,因此adb具有安装卸载apk、拷贝推送文件、查看硬件信息、查看应用程序所占资源,在设备执行shell命令等功能。
客户端client:运行在你的电脑上,你可以用adb命令来调用起一个客户端,其他Android工具,如:ADT插件、DDMS等都可以创建出一个客户端。
服务器server:运行在电脑后台,负责管理client和daemon进行通讯。
守护进程daemon:运行在模拟器或安卓设备后台;验证,打开Windows命令行,输入adb命令。
adb --help 查看帮助手册
adb devices 检测连接到电脑的安卓设备
adb pull <手机路径> <本机路径>从手机中拉取信息放到本地电脑上
adb push <本机路径> <手机路径>从本地推送信息到手机
adb shell----登录设备 shell(命令行的人机界面) ll ls 命令都可以用,进入到Linux命令环境了,相当于执行远程命令。
adb logcat --打印日志
adb install xxx.apk -----为了获取apk的安装包所在地址,可以直接把apk拖到cmd 的窗口获取,返回success就说明安装成功了
adb install -r xxx.apk -----保留数据和缓存文件,重新安装apk
adb uninstall com.tencent.mobileqq–卸载应用
adb uninstall -k com.tencent.mobileqq–卸载应用,但保存文件和数据
adb shell dumpsys activity | find"mFocusedActivity"–查看前台应用activity名
adb connect/disconnect --通过WiFi远程连接手机进行调试
客户端浏览器告诉服务器一些信息
请求头名称: 请求头值
常见的请求头:
User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
可以在服务器端获取该头的信息,解决浏览器的兼容性问题
应用层:定义了各种应用协议,规范数据格式:HTTP协议、HTTPS协议、FTP协议、DNS协议、TFTP、SMTP等等。
表示层:翻译工作,提供一种公共语言,通信。
会话层:自动收发,自动寻址。
传输层:对发送数据进行封装,TCP协议、UDP协议、一个一个按顺序依次发送;两个应用程序,如QQ-QQ,定义端口的概念,寻找到对应程序,进行数据的处理。
网络层:判断是否在一个子网:IP协议,怎么选择最优路径,一组协议,路由协议:静态路由、动态路由协议。
数据链层:比特流进行处理,分组:八位为一组,一个字节,依次按照顺序进行发送,一帧。MAC地址,网卡、身份证、唯一的。
物理层:互联网物理链路,物理介质,网线、光纤、无线电波,基本连接。电信号(0101二进制)、比特流形式存在。
IP地址的组成:由32bit组成,分成四段并用“.”分隔,如:192.168.0.1
结构:IP地址=网络号+主机号
网络号:标识的是一个子网
主机号:标识的是子网中的某台主机
子网掩码:用来标识子网,必须跟IP地址一起存在。
192.168.1.87 255.255.255.0
192.168.2.77 255.255.255.0
如上,网络地址不一样,不在同一个子网,不能直接通信。
SYN:简写为S,同步标志位,用于建立会话连接,同步序列号;
ACK: 简写为.,确认标志位,对已接收的数据包进行确认;
FIN: 简写为F,完成标志位,表示我已经没有数据要发送了,即将关闭连接;
PSH:简写为P,推送标志位,表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队;
RST:简写为R,重置标志位,用于连接复位、拒绝错误和非法的数据包;
URG:简写为U,紧急标志位,表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理;
虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:
(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电。
(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响。
(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
1xx Information(信息状态码) 接受的请求正在处理
2xx Success(成功状态码) 请求正常处理完毕
3xx Redirection(重定向状态码) 需要进行附加操作以完成请求
4xx Client Error(客户端错误状态码) 服务器无法处理请求
5xx Server Error(服务端错误状态码) 服务器处理请求出错
2XX 的响应结果表明请求被正常处理了。
200表示请求在服务器端被正常处理了。在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。
204表示服务器接收的请求已经成功处理,但是在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。当浏览器在发送请求后接收到204响应,它的显示页面不会发生更新。
通常应用在只需要客户端往服务端发送信息,而服务端不需要发送新信息的情况下使用。
206表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文内包含由Content-Range指定范围的实体内容。
3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。
永久重定向,301状态码表示请求的资源已经分配了新的URI,以后请求该资源应该访问新的URI。也就是说,如果已经把资源对应的 URI保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存。
临时重定向,302表示请求的资源已经被分配了新的URI,希望客户端本次能使用新的URI访问。和301不同的是,这种资源的URI变更是临时的额,而不是永久的,因此不用去更新书签。
该状态码和 302 有着异曲同工之妙,表示由于请求对应的资源存在着另一个 URI,应使用 GET方法定向获取请求的资源。
如果浏览器原本是用POST方法去请求服务器,收到303状态码之后,会改用GET并访问资源新的URI。
304 状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。
PS:附带条件的请求是指采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一首部。
临时重定向,和 302 Found 状态码有相同的含义。区别在于 307 不会强制浏览器将 POST 方法改为 GET 方法,而是遵循浏览器自身的标准。
4XX 的响应结果表明客户端是发生错误的原因所在。
400 状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。
401 状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。第一次收到 401 状态码表示需要进行用户认证,第二次再收到 401 状态码说明用户认证失败。
403 状态码表明对请求资源的访问被服务器拒绝了,当未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP 地址试图访问)等列举的情况都可能发生 403 。
404 是我们最常见的状态码之一,它表示服务器上无法找到请求资源。此外,也可能是服务器端在拒绝请求且不想说明原因的时候使用。
5XX 的响应结果表明服务器本身发生错误。
500 状态码表明服务器端在执行请求时发生了错误。也有可能是 Web应用存在的 bug 或某些临时的故障。
503 状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
fiddler典型应用
TextView:以文本形式显示请求或响应的数据。
SyntaxView:同TextView,但有语法着色。
WebForms:请求部分以表单形式显示所有的请求参数和参数值;响应部分与TextView内容是一样的。
HEX:十六进制形式的数据。
Auth:显示认证信息,如Authorization。
Cookies:显示所有cookies。
Raw:显示Headers和Body数据。
JSON:请求或响应数据是json格式时,json形式显示请求或响应内容。
XML:请求或响应数据是xml格式,xml形式显示请求或响应内容。
bin目录
使用jmeter编写测试脚本—要素
总结:1>linux的目录中只有且只有一个根目录/
2>linux的各个目录存放的内容是规划好的,不能乱放文件。
3>linux是以文件的形式管理设备,因此Linux系统,一切皆为文件。
4>Linux的各个文件目录下存放的内容,至少有一个要认识。
1.切换目录命令:cd
使用tab键来补全文件路径
2.列出文件列表:ls ll
常用:(在Linux中 .开头的文件都是隐藏的文件)
3.创建目录和移除目录:mkdir rmdir