一、测试理论基础
1.软件的三个要素:程序(实行特定功能的代码) 文档(支持代码运行) 数据(支持程序运行一切有关).
2.软件测试的目的:1)验证软件是否满足 软件开发合同 或者项目开发计划,系统/子系统设计文档,软件需求规格说明,软件产品说明等规定的软件质量要求 2)通过测试,发现软件缺陷 3)为软件产品的质量测量和评价提供依据.
3.软件测试的标准4个过程,以及对应的解释 1)测试策划:只要是进行测试的需求分析 和 测试计划的编写 2)测试设计: 依据测试需求,分析并选用,已由的测试用例或者设计新的测试用例,在进入下一个阶段工作之前,应该通过,测试就绪评审 3)测试执行,执行测试用例,获取测试结果 分析并判定 设计结果 4)测试总结:整理和分析 测试数据 ,评价 测试效果和被测软件项,描述 测试状态 最后完成软件测试报告并通过测试评审.
4.测试用例设计的基本原则:1)基于测试需求的原则 2)基于测试方法的原则 3)兼顾 测试充分性 和 效率的原则 4)执行用例的可再现性原则.
5.软件的内部质量 ,可以从哪六大特性进行解释?
六大特性:
功能性:当软件在指定条件下使用时,软件产品 提供 满足 明确的和隐含的能力,包括适合性,准确性,互操作性,安全保密性,依从性
可靠性:在指定条件下使用时 软件产品维持规定的性能级别的能力;包括,成熟性,容错性,易恢复性,依从性
易用性:在指定条件下使用 软件产品被理解被学习 使用和 吸引用户的能力 包括 易学性 易操作性 吸引性 依从性
效率性:在规定条件下 软件产品执行其功能时使用合适数量和类别资源的能力;包括 资源利用性 和效率依从性 、
维护性:软件产品 可以被修改的能力可能包括 纠正 改进 软件对环境 需求 和功能规格说明变化的适应 包括,易分析性,易改变性,稳定性,易测试性,依从性
可移植性:软件产品 从一种环境迁移到另外一种环境的能力,包括,适应性,易安装性,共存性,易替换性,可移植性的依从性。
6.软件按照生命周期可以分为哪些测试? 单元测试,集成测试,配置项测试(也叫作软件合格性测试或确认测试),系统测试,验收测试。
回归测试可以分布在上述每个测试类别中,贯穿整个软件生命周期,所以单独分类描述。
7. 回归测试的目的是什么?
1) 测试软件变更之后,变更部分 的正确性 针对变更需求的 复合型
2)测试软件变更之后 软件原有的 正确的功能 性能和其他规定的要求的 不损害性。
8.每一个阶段测试基于的文档是什么? 单元测试:软件设计文档。 集成测试:软件结构设计文档。配置项测试:需求规格说明书(接口需求规格说明)。系统测试:用户需求(研制合同或系统需求)。验收测试:软件研制合同(用户需求或系统需求).
9.什么是静态测试 什么是动态测试?
1)静态测试:又称为静态分析结束,其基本特征是 不执行被测软件,根据检查列表,对需求分析说明书,软件设计说明书,源程序做结构检查,流程图分析等找出软件错误,静态测试一般采用人工分析(针对文档),也可以用静态分析测试工具来进行(代码扫描)
2)动态测试:其基本特征是执行被测试程序。通过执行结果,分析软件可能出现的错误 ,一般由人工设计程序测试用例,也可以由测试工具做检查和分析。
10.什么是黑盒测试,什么是白盒测试?
1)黑盒测试:又称为功能测试,数据驱动测试,或者基于规格说明的测试,这种测试不必要了解 对象的内部逻辑结构,而是根据需求说明书中的功能来设计测试用例
2)白盒测试:又称,结构测试。逻辑测试或者基于程序的测试,这种测试 应了解软件程序的内部构造,并且根据内部构造 来设计测试用例。
一般单元测试采用白盒测试, 配置项或系统采用黑盒测试。
二、测试用例设计
1.等价类划分:某个输入域的集合,在这个集合中每个输入条件都是等效的,如果其中一个的输入不能导致问题发生,那么集合中其它输入条件进行测试也不太可能发现错误。
1)有效等价类:有效等价类是程序规格说明有意义,合理的输入数据。
比如用正确的用户名和密码来登录系统就是有效等价类。
2)无效等价类:无效等价类是程序规格说明无意义,不合理的输入数据。
比如用不存在的用户名和密码来登录系统就是无效的等价类。
3)等价类法设计测试用例的步骤:
为每个输入划分等价类,得到等价类表,为每个等价类规定一个唯一编号。
设计一个测试用例,使其尽可能多的覆盖所有尚未覆盖的有效等价类。重复这一步骤,使得有效等价类均被测试用例所覆盖设计一个测试用例,使其只覆盖一个无效等价类。重复这一步骤使得所有无效等价类均被覆盖。
2.边界值分析:边界值分析方法的理论基础是假定大多数的错误是发生在各种输入条件的边界上,如果在边界附近的取值不会导致程序出错,那么其它的取值导致程序错误的可能性也很小。
1)边界值分析法设计用例的步骤
分析输入参数的类型:从测试规格中分析得到输入参数类型
等价类划分(可选):对于输入等价类划分方法进行等价类的划分
确定边界:运用域测试分析方法确定域范围的边界(上点、离点与内点)
相关性分析(可选):如果存在多个输入域,则需要运用因果图、判定表方法这些输入域边界值的组合情况进行进一步分析
3.决策表:决策表是分析和表达多种输入条件下系统执行不同动作的工具,它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确 。
1)决策表法设计用例的步骤
列出所有的条件桩和动作桩
填入条件桩、条件项
填入动作桩、动作项
化简,合并相似规则
将每条规则转化为用例
三、测试流程
1.需求分析阶段:只要就是对业务的学习,分析需求点。
2.测试计划阶段:测试组长就要根据SOW开始编写《测试计划》,其中包括人员,软件硬件资源,测试点,集成顺序,进度安排和风险识别等内容。
3.测试设计阶段:测试方案一般由对需求很熟的高资深的测试工程师设计,测试方案要求根据《SRS》上的每个需求点设计出包括需求点简介,测试思路和详细测试方法三部分的方案。《测试方案》编写完成后也需要进行评审。
4.测试方案阶段:主要是对测试用例和规程的设计。测试用例是根据《测试方案》来编写的,通过《测试方案》阶段,测试人员对整个系统需求有了详细的理解。这时开始编写用例才能保证用例的可执行和对需求的覆盖。测试用例需要包括测试项,用例级别,预置条件,操作步骤和预期结果。其中操作步骤和预期结果需要编写详细和明确。测试用例应该覆盖测试方案,而测试方案又覆盖了测试需求点,这样才能保证客户需求不遗漏。同样,测试用例也需要评审。
5.测试执行阶段:执行测试用例,及时提交有质量的Bug和测试日报,测试报告等相关文档。
6.测试目标:指定完整且具体的测试路线和流程,为快速、高效和高质量的软件测试提供基础流程框架。最终目标是实现软件的测试规范化和标准化
四、功能测试
1.功能测试:又称黑盒测试;顾名思义就是一个盒子内部是黑色的,我们只能看见它的外部(表面);功能测试就是不考虑内部结构,仅对外部功能进行测试。
2.功能测试的全流程
1)测试计划 :描述了要进行的测试活动的范围、方法、资源和进度的文档;是对整个信息系统应用软件组装测试和确认测试。它确定测试项、被测特性、测试任务、谁执行任务、各种可能的风险。测试计划可以有效预防计划的风险,保障计划的顺利实施。
格式:概述、测试范围、测试组网图、资源需求、测试条件、测试进度、测试准则、测试风险分析、测试策略、测试功能点、工作交付图。
2)测试用例:是软件测试的核心,是一组条件或变量,测试者根据它来确定应用软件或软件系统是否正确工作。确定软件程序或系统是否通过测试的方法叫做测试准则。
格式:产品名称、所属模块、子模块、用例编号、用例名称、前置条件、操作步骤、预期结果、实际结果、测试人员、用例等级、用例类型、修改说明。
3)测试执行:结果分为四类:通过(Pass)、失败(Fail)、跳过(Skip)、受阻(Block)
“通过”的测试用例表明该测试用例可以执行,而且没有发现软件缺陷;
“失败”的测试用例表明该测试用例可以执行,而且发现了软件缺陷;
”跳过“的测试用例表明该测试用例不适用于本轮测试而没有执行;
“受阻”的测试用例表明本测试用例无法正常执行。
4)提Bug: 软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节、或与需求文档存在差异的功能实现等。
Bug类型:功能问题、设计缺陷、界面优化、性能问题、配置相关、安装部署、安全相关、标准规范、测试脚本、文档错误、兼容问题、用户体验、其它。
Bug等级:1、致命错误(1级提BUG需慎重) 2、严重错误 3、一般错误 4、细微错误
5)测试报告:把测试的过程和结果写成文档,对发现的问题和缺陷进行分析,为纠正软件的存在的质量问题提供依据,同时为软件验收和交付打下基础。
格式:简介、测试资源描述、测试时间统计、测试用例分析、缺陷情况分析、版本质量分析、测试活动评估、测试过程改进。
五、接口测试
1.fiddler介绍:Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出"Fiddler的数据(指cookie,html,js,css等文件)。
2.使用:Fiddler支持断点调试技术,当你在软件的菜单-rules-automatic breakpoints选项选择before request,或者当这些请求或响应属性能够跟目标的标准相匹配,Fiddler就能够暂停Http通讯,并且允许修改请求和响应。
3.HTTP协议
1)请求:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
2)响应:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
3)报头:
包括普通报头、请求报头、响应报头、实体报头。
六、安全测试
1.sql注入:是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。
2.xxs注入:XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的. 比如获取用户的Cookie,导航到恶意网站,携带木马等。
3.网络安全测试、数据库安全测试、URL安全测试等。
七、DOCKER环境搭建
1.概念:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
2.CentOS 7操作系统下yum安装
执行命令:yum install -y docker
详细的可以参考Centos7下安装Docker(详细安装教程)_u014069688的博客-CSDN博客_centos7 docker安装
3.启动 docker服务,并将其设置为开机启动
执行命令:systemctl start docker.service
systemctl enable docker.service
八、性能测试
1.jmeter 介绍 :JMeter是开源软件Apache基金会下的一个性能测试工具,用来测试部署在服务器端的应用程序的性能。JMeter因为其使用简单,现在也被社区作为接口测试工具。
2.录制脚本:
1)第一步:在JMeter中添加线程组,命名为AddBugByJMeter
2)第二步:在线程组下添加HTTP请求默认值
添加->配置元件->HTTP请求默认值,设置服务器IP和端口号(JMeter默认使用80端口号,我的禅道配置的是81端口)
3)第三步:添加HTTP代理服务器
1、添加非测试原件->HTTP代理服务器,并设置端口号(可以通过netstat -ano查看电脑中未使用的端口号)、选择目标控制器(选中前面的线程组)
2、点击HTTP代理服务器的启动按钮,启动后可以通过JMeter右上角的log查看按钮查看启动情况
3、打开Google Chrome浏览器设置代理
4)第四步:开始录制
用Google Chrome浏览器访问禅道主页,可以看到打开首页时JMeter就已经记录下对应的请求信息了。
3.增强脚本:性能测试的脚本增强技术:参数化、关联、事务、检查点、思考时间和集合点。
1)参数化:在Jmeter中,实现参数化的方式很多。
本质上来说,参数化的实现方式有两种:
文件方式:一般建议通过配置元件--CSV DATA SET CONFIG组件来实现。
函数方式:一般通过调用Jmeter内置的、第三方插件、自定义的函数来实现。
一般通过函数助手来生成调用的字符串。
调用方式:在jmeter中,任何鼠标点击可以输入的地方(输入字符串),都可以实现参数化操作,在Jmeter中,参数、变量、函数的调用方式是固定的:${参数名} ${变量名} ${函数名}
2)关联:
关联是用来解决请求之间的依赖关系的。
在工具层面,工具需要解决的问题其实是两个:
先存:先保存服务器响应的数据
后用:在后续的请求中调用所保存的数据。
在Jmeter中,关联一般都是通过后置处理器组件来实现。
常用的是:正则表达式提取器、JSON Extractor。
3)事务:
引入事务的目的是为了度量响应时间和TPS。
在Jmeter中,对于事务的处理是分两种情况:
事务只是一个请求:只需要修改请求的名称,使其具有唯一性。不需要其它额外的操作。
事务包含多个请求:则需要使用逻辑控制器--事务控制器。
PS:建议勾选Generate parent sample,这样得到的时间会更加准确。
4)检查点:
在Jmeter,检查点通常都是通过断言组件来实现的。
常用的断言组件就是:响应断言。
5)思考时间:在Jmeter中,常用的思考时间组件有两个:
固定定时器:单位是毫秒
高斯随机定时器:作用就是:用来模拟:固定延迟+-2×偏差值。
最小值等于0.
6)集合点:在Jmeter中,集合点是通过定时器--Synchronizing Timer组件实现。
Number of Users:一次集合的人数。
默认值为0,表示集合人数等于线程组中的线程总数。
Timeout:超时时间,是指第一个到达集合点的线程的等待时间,如果时间到达,则所有到达集合点的线程都会释放执行后续的请求。
默认值为0,表示不超时,即必须等到足够的线程才会释放。
4.性能测试的简单介绍
指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试
5.线程组
1)线程组元件是任何一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程下。所有的任务都是基于线程组。
2)通俗的讲,一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。多个用户同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。
6.聚合报告
1)对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量.
2)我们先来看看聚合报告中的主要名称的含意:
Label:每个请求的名称
#Samples:各请求发出的数量
Average:平均响应时间(单位:毫秒)。默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间
Median:中位数
90%Line:百分位数;官网原话:“ 90% 的请求耗时没有超过这个时间,剩余的请求耗时至少在这个时间之上。”。通俗说,90%用户的响应时间小于该值
95%Line:95%用户的响应时间小于该值
99%Line:99%用户的响应时间小于该值
Min:最小响应时间
Max:最大响应时间
Error%:请求的错误率 = 错误请求的数量/请求的总数
Throughput:吞吐量。默认情况下表示每秒完成的请求数,一般认为它为TPS。(注意单位的变化,如上图中,当TPS很低时,jmeter中默认会统计成每分钟的值,这时我们需要换算成以秒为单位)
KB/sec:每秒从服务器端接收到的数据量。
7.点击率报告
每秒点击率 hps 这个概念不仅仅是针对某个工具说的 而是一个衡量负载大小的概念,它就是指的单位时间获得返回的请求数量
8.TPS报告
1)TPS,执行一次事务(包括请求、请求服务器、等待服务器返回等等,比如一个TPS事务,可能触发3个QPS请求)
TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出,加上一次用户数据库访问。(业务TPS = CAPS × 每个呼叫平均TPS)
2)TPS是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。系统整体处理能力取决于处理能力最低模块的TPS值。
九、接口自动化
1.添加用户自定义变量
1)我们可以添加用户自定义变量用以Http请求参数化,右键点击“线程组” -> “添加” -> “配置元件” -> “用户定义的变量”:
2)新增一个参数wd,存放搜索词"自动化测试"
3)并在Http请求中使用该参数,格式为:${wd}
2."CSV 数据文件设置"
1)新建一个csv文件,保存如下数据:注意使用notepad编辑,将其转换为utf-8编码方式,否则中文在jmeter中显示乱码
2)右键点击“线程组” -> “添加” -> “配置元件” -> “CSV 数据文件设置”:
3)在Http请求中使用该参数,格式为:${keyword} ,并运行可以在结果树中查看到如下结果,则表示已从csv文件中读取对应的参数