软件测试目的与意义:
发现缺陷:软件测试的首要目标是发现软件中存在的缺陷和错误。通过测试,可以发现并修复软件中的潜在问题,以确保软件在生产环境中的稳定运行。 ;
提高软件质量:软件测试有助于提高软件的质量和可靠性。通过不同类型的测试,可以确保软件在各种情况下都能正常运行,并且符合用户需求和预期。 ;
降低风险:软件测试可以帮助降低软件开发和维护过程中的风险。通过测试,可以尽早发现和解决问题,避免在生产环境中出现严重的故障或漏洞,从而减少潜在的经济损失和声誉损害。 ;
提高用户满意度:通过对软件进行全面和有效的测试,可以确保软件的功能和性能符合用户的需求和期望。这将提高用户的满意度,并增加他们对软件的信任和忠诚度;
支持决策和验证需求:软件测试提供了对软件功能和性能的客观评估,可以帮助项目管理人员和决策者做出明智的决策。测试结果可以验证软件是否满足需求规格,是否达到预期的质量标准,从而为项目进展和上线提供可靠的依据。
标准定义 (IEEE,电气与电子工程师协会) :使用
人工或自动
手段,
运行或测试
某个系统的过程,目的在于检验它
是否满足规定的需求
或弄清
预期结果与实际结果的差别
。测试可以运行程序也可不运行该项目。
自动化测试不能替代新功能测试,业务逻辑清晰,但是不确定接口,业务需求是否发生改变,
回归测试可以用自动化测试,一般时间是固定的,校验点一般固定,
自动化测试为什么不能替代人工测试:(1)相对手工测试,
自动化测试对测试团队的技术有更高的要求。 (2)自动化测试无法完全替代人工测试找到Bug,也不能实现100%覆盖。 (3)自动化测试脚本的开发需要花费较大的时间成本,错误的测试用例会导致资源的浪费和时间投入。 (4)产品的快速迭代。
按阶段分类:
单元测试 :开发自测,
单元测试是针对软件的最小单元(如函数、方法等)进行的测试。它主要关注单元的功能是否按照设计要求正确执行,通常由开发人员编写和执行。是一个白盒测试。对条件、判定等语句测试。
有输入框和按钮进行相应测试。对密码进行加密测试,到前端解密。
集成测试 :
集成测试是将多个单元或模块组合在一起进行测试,验证它们之间的接口和交互是否正常。集成测试旨在检测模块之间的集成问题和接口错误。后端接口测试,输入参数和输出参数。
测试这个接口是否可以调通,对查询接口进行校验。
系统测试 :
系统测试是对整个软件系统进行的测试,验证其是否按照需求规格和用户期望的方式工作。它主要关注系统的功能、性能、安全性和稳定性等方面。 端到端测试。定位问题。前端和调用接口是否正确正常。前台传参,进行端到端测试。还涉及安全性校验。用户A可以查询B的数据吗?涉及到安全性测试,用户并发需要进行测试,可以为负吗
验收测试 :
验收测试是由用户或客户执行的测试,验证其是否符合用户需求。验收测试通常在软件开发的后期进行,以确保软件可以交付给用户并满足其要求。由用户客户,产品测试,管前端,不用管接口怎么调用,
按是否运行分类:
静态测试 :
静态测试是在不运行软件的情况下进行的测试。它主要关注软件的静态属性,如代码、文档、设计等。静态测试方法包括代码审查、文档检查、静态分析等。静态测试可以帮助发现潜在的问题和错误,提高代码和文档的质量。
动态测试 :
动态测试是在运行软件的情况下进行的测试。它通过模拟实际使用场景,测试软件在不同输入条件下的行为和性能。动态测试方法包括功能测试、性能测试、安全性测试等。动态测试可以验证软件是否按照预期工作,并发现运行时的错误和问题。
按是否查看源代码:
黑盒测试:
黑盒测试由于测试目的是站在用户角度看程序是否能正确执行实现所需要的功能,因此不考虑内部实现方法,而是从需求角度进行测试。黑盒测试可以测试功能完整性,正确性,是否能正确执行正确终止。
白盒测试 :
白盒测试主要面向代码逻辑,是在能看到全部代码的前提下进行的测试。白盒测试分为静态测试和动态测试。 常见的覆盖情况:语句覆盖、判定覆盖、条件覆盖、判定/
条件覆盖、条件组合覆盖、路径覆盖。
性能测试 :正常范围,正常最大范围
数据量最大20w,响应时间10ws以内,最小数据吞吐量5000,假设17w是系统响应超过10ws,用二分法,从15w和17w之间找数据定位问题。
受到每秒接收发送
1、负载测试:通过模拟实际用户使用情况,向系统施加
正常或预期最大负载的压力
,以测试系统在这些负载下的性能表现。主要关注
系统的响应时间、吞吐量、并发用户数
等指标;
2、压力测试:通过将系统暴露在
超出正常负载
的情况下,持续施加重负荷或极限负载,以评估系统在负载超出容量极限时的性能和稳定性。目的是确定
系统的瓶颈和极限
;一般测试到最大值的120%,看cpu是否还是正常运行,
3、容量测试:旨在确定系统在
给定硬件和软件配置
下的性能极限,并确定系统在这些极限下的可扩展性和稳定性。通过逐步增加负载,测试系统在不同负载下的性能表现,以
确定系统的容量和资源需求
。
4、可靠性测试:通过
持续运行
系统,观察系统在长时间运行或持续负载下的稳定性和可靠性。主要
关注系统的错误处理、资源管理、日志记录和恢复机制
等方面。
MTBF
:错误发生的平均时间间隔(
Mean Time Between Failure)用来衡量系统的稳定性。
例如,我们购买了手机以后,很少有人拆开手机观察其内部的结构,大多数情况下,我们只是使用该手机的功能,从某种意义上说,此时这部手机就是我们的测试对象,所采用的测试方法就是黑盒测试。
功能测试、接口测试、性能测试、安全测试、兼容性测试、用户界面测试、安装测试、易用性测试,请举例。
易用性测试是由用户测试进行发现的,定制化的内容。
def check_condition(A, B):
if A > 10 and B < 5:
return True
else:
return False
语句覆盖(if判断条件)
判定覆盖(if else两个返回语句都要走到)
条件覆盖(防止两个都为true,)
判定
/
条件覆盖(要确定四个状况都能走到:true+false,)
条件组合覆盖
路径覆盖
用工具代替
/
辅助人工完成软件测试活动的过程,泛指所有能用工具辅助进行的有关测试活动。
测试自动化的目标是对被测试系统进行自动测试。总的来说,测试自动化的目标是通过
较少
的开销,得到
更彻底
的测试,并
提高产品的质量
。
自动化测试不能取代手工测试
手工测试比自动测试发现的故障要多,测试新功能,产品稳定后才会进行自动化测试
自动化测试不具有想象力
前端:
后端:
测试基本原则:
测试只能显示错误的存在
–
通过测试可以证明软件的错误
–
通过测试却无法证明软件没有错误
–
通过充分的测试可以减少在测试软件中未被发现错误的可能性
–
即使在测试过程中未发现软件的错误,这也不能证明被测软件是没有错误的。
穷举测试(
exhaustive testing
)是不可能的
即使一个大小适度的软件系统,一个考虑到所有的输入和它们所有不同的组合形式的穷举测试几乎是不可能的。同样考虑到对运行路径的每一种组合的穷举测试也几乎是不可能的。
测试总是一个
抽样的检查过程
,所以应该根据风险和优先级来控制测试的开销(测试的时间,人员分配等)
•
谬误:
“
不存在缺陷的系统就一定是有用的系统
”
•
发现并且消除缺陷远不等于系统就是用户所需的,满足了用户的期望
•
用户早期介入到开发过程以及半成品的使用过程是避免问题的有效措施
•
测试活动应尽早的介入
–
在系统或软件生命周期内,测试活动应该尽可能早的进行并实现规定的目标
–
通过早期的测试能及早地发现缺陷,减少测试即项目成本。
缺陷的集群(
defect clustering
)现象
人们经常发现,一个测试对象的大部分的错误起因都是在某几个部分被发现,错误并不是均匀分布在测试对象上的
通常在发现很多失效的地方往往还能找到更多的缺陷
重复不会有效率(杀虫剂悖论
(pesticide paradox)
)
• 不断重复相同的测试用例不能发现更多的错误、不能带来新的信息
•
在开发测试过程中(组件测试、集成测试和系统测试),为了克服杀虫剂悖论保证测试效率,应该经常检查测试用例并且生成新的测试用例或对旧的不常用的测试用例以及常用但不能发现缺陷的测试用例进行改写
•
为了能找到更多的错误,应该对那些到目前没被检查的软件部分或在输入时未被考虑的情况进行测试
测试流程:
第二轮测试主要是针对上轮出现的bug,是bug修复的测试,编写测试用例。
第三轮测试才是全部回归测试,包括已通过的测试,
测试点细分成测试项。
测试用例:
为什么要写:
团队交流
重复测试
跟踪统计
用户自测
什么时候写:
需求计划,测试计划完成后
谁写:
测试人员
依据:
需求分析
测试方法: • 等价技术 • 边界值技术 • 业务流程图技术 • 其他(eg.决策表技术)
等价类划分是一种黑盒测试技术,它不考虑程序的内部结构,只是根据软件的需求说明来对输入的范围进行细分,然后再从分出来的每一个区域内选取一个代表性的测试数据。如果等价类划分的好,这个代表性的测试数据的作用就等价于其区域内的其它值。
等价类:是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。
等价类分为有效等价类(合理的输入数据集合)和无效等价类(无意义的输入数据集合),
题
1
:有一个
C
语言程序,其功能为计算两个
1~100
之间(包括1
和
100
)的整数的和。请构建其等价类划分。
划分为3个子区间:<1的整数;无效 1~100的整数;有效 >100的整数;无效
(1)先考虑输入数据的数据类型。
---
合法类型
&
非法类型。
(2)合法类型中的合法区间和非法区间。
(3)画出示意图,区分等价类。
(4)为每一个等价类编号。
(5)从一个等价类中选举一个测试数据构造测试用例。
边界值是最容易出现错误的地方,也是我们测试的重点。
测试边界值时,一般测试边界值和正好超出边界值一个单位的值。
在编程的时候我们要画算法流程图,将这一思想应用到黑盒测试领域。黑盒测试的流程图针对整个系统业务功能流程的。
(1)详细了解需求。
(2)根据需求说明或界面原型,找出业务流程的各个页面以及流转关系。
(3)画出业务流图,或路径图。
(4)编写测试用例,覆盖所有的路径分支。
题
3
:画出淘宝网站购物业务流程,并依据此业务流程编写测试用例,进行测试?
在实际测试中,我们往往需要综合各种测试技术。
1.
我们首先应用流程图法画出被测软件的总体业务流程;
2.
然后针对具体某个页面或是模块,再应用等价类的思想来划分输入范围(重点测试边界值);
3.
如果涉及多个输入条件的组合情况,再应用决策表来考虑所有情况的排列组合。
代码管理工具
- git
Git
是当前最先进、最主流的
分布式
版本控制系统,免费、开源!核心能力就是版本控制。它是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起来,意味着可以恢复到到以前的任意时刻状态。支持跨区域多人协作编辑,是团队项目开发的必备基础。工作区、暂存区、版本库是Git
最基本的概念。
工作区:
就是在电脑里能看到的代码库目录,是我们搬砖的地方,新增、修改的文件会提交到暂存区。
暂存区:
用于临时存放文件的修改,实际上上它只是一个文件(.git/index),保存待提交的文件列表信息。
版本库/
仓库:
Git
的管理仓库,管理版本的数据库,记录文件
/
目录状态的地方,所有内容的修改记录(版本)都在这里。
前端测试工具- F12
调出开发者工具 :
浏览器页面上
①
F12
键
(
笔记本电脑
Fn + F12)
②
右键选择 检查
(N)
③
快捷键
Ctrl + Shift + i
开发者工具最常用的四个功能模块:
①
元素(ELements)
②
控制台(Console)
③
源代码(Sources)
④
网络(
Network
)
1
、查看元素的代码
点击左上角的箭头图标进入选择元素模式,从页面中选择需要查看的元素,可以在开发者工具元素(Elements)
一栏中定位到该元素源代码的具体位置。
查看元素的属性:定位到元素的源代码之后,可以从源代码中读出该元素的属性
修改元素的代码与属性 :点击元素,然查看右键菜单, 可以看到 chrome
提供的可 对元素进行的操作:包括编辑元素代码、修改属性等。
选择
Edit as HTML
选项时,元素进入编辑模式,可以对元素的代码进行任意的修改。
「注意:」 这个修改也仅对当前的页面渲染生效,不会修改服务器的源代码,故而这个功能也是作为调试页面效果而使用。
Console
(控制台)
1、执行JS语句
2、查看控制台日志:在测试界面时,如果出现 Bug 问题,一般情况会在这栏展示,查看调试日志信息或者异常错信息,然后前端开发工程师根据具体问题来调试进行解决问题。
在源代码(Source)页面可以查看到当前网页的所有源文件 包括:样式、css、图片、
js
文件等。在左侧栏中可以看到源文件以树结构进行展示。
Network
查看前后台数据传输请求
单击选中可以在右侧看到本次请求的详细信息:
Web Performance
提供了可以通过的函数(performance 属性提供)测试当前网页或者
web
应用的性能,获取更为精确的原始数据,以毫秒为单位。一般放在window.
onload
事件
中读取各种数据,有些值必须在页面完全加载之后才能得出。通过 performance 对象详解网页各项资源耗时及内存占用情况(精确到每个资源的
DNS
解析时间,
TCP
连接时间等)。
用谷歌浏览器打开任意网页,进入调试模式(快捷键
F12
)。在谷歌浏览器
Console
选项中输入
performance
回车,可以看到一系列的参数。
performance
方法
1
、
performance.getEntries()
:
查看所有资源具体消耗时间。
2
、
performance.getEntriesByType(type)
:
根据资源类型来查看某种类型的资源耗时右侧展开的属性里有个 entryType 属性为
“resource”
。则可以使用performance.getEntriesByType("resource")
查询所有静态资源。
3
、
performance.getEntriesByName(name, type)
:
查询指定的静态资源耗时。
YSlow
是
Yahoo
发布的一款插件,这个插件可以分析网站的页面,并告诉你为了提高网站性能,如何基于某些规则而进行优化。
常见支持的浏览器包括:FireFox
、
Chrome
、
Safari
、
Opera
等。
YSLOW
工具的使用主要有三个部分:
Grade(
等级
)
、Components(组件
)
、
Statistics(
统计
)
。
1.Grade
等级结果,表示对整个网站分析后得到的综合评分,综合评分的结果分为
6
等级,分别使用
A-F
来表示,
A
表示最优化,
F
表示最差。如果某一测试规则与该页面无关,则在前面出现N/A
标识,如下图:
2.Components
每个组件的信息包含:组件类型、组件大小
(
组件大小能小则小
)
、压缩后的大小、
COOKIE
大小、
HEADERS
请求头的详细信息、
URL
、EXPIRES过期日期、
RESPONSE TIME
响应时间、
ETAG
标签。
显示所有的组件个数,以及组件的大小。如果从组件数的大小的角度来说,我们希望组件数越少越好,组件总的大小越小越好。在组件标签页中会列出站点所有的组件数,一般的组件类型包括:doc
、
image
、
js
、
css
等。
3.Statistics
标签页
显示使用缓存和不使用缓存时,请求的组件数和组件文件大小的情况。该统计以饼状图的形式,显示了在清空缓存和缓存加载两种清空下,页面打开的信息情况
后端测试工具JMeter
定义:
JMeter
ache
组织开发的基s's于
Java
的压力测试工具,用于对软件做压力测试,它最初被设计用于
Web
应用测试,但后来扩展到其他测试领域。 JMeter
是通过线程组来驱动多个线程运行脚本对被测试的服务器发起负载,每一个负载121·2121211 机上都可以运行多个线程组
JMeter
测试计划要素是什么
?
1
、一个脚本中
测试计划
只能有一个(右图所示)
2
、一个测试计划中至少要有一个
线程组
3
、至少要有一个
取样器
4
、至少要有一个
监听器
2
、线程组:
测试计划右键
>>
添加
>>Threads>>
线程组
3
、
sampler(
取样器
)
:
线程组
>>
添加
>>sampler>>http
请求(以http
请求为例)
4
、监听器:
线程组
>>
添加
>>
监听器
>>
聚合报告
/
查看结果树(以查看结果树为例)
Postman
:是一款支持
http
协议的接口调试与测试工具,其主要特点就是功能强大,使用简单且易用性好 。无论是开发人员进行接口调试,还是测试人员做接口测试,postman
都是我们的首选工具之一 。
第一个请求:
数据库管理工具
- n a v i c a t e
Navicate
:
是一套可创建多个连接的数据库管理工具,用以方便管理
MySQL
、
Oracle、
PostgreSQL
、SQLite、
SQL Server
、
MariaDB
和
MongoDB
等不同类型的数据库
Jenkins
:
是一个开源的、提供友好操作界面的持续集成
(CI)
工具,主要用于持续、自动的构建
/
测试软件项目、监控外部任务的运行。Jenkins
用
Java
语言编写,可在
Tomcat
等流行的
servlet
容器中运行,也可独立运行。
测试框架对比
安全测试工具
- N e s su s
NESSUS:
是一款使用非常广泛的系统漏洞扫描与分析软件,该软件诞生于
1998
年,是一款非常成熟的漏洞扫描软件。该软件具有以下特点:
1
、提供完整的电脑漏洞扫描服务,并随时更新漏洞库。
2
、可以在本机或者是远端上进行遥控,进行系统的漏 洞扫描分析。
3
、可自行定义插件。
4
、其运作效能会随着系统的资源而进行调整,当系统拥有的CPU
或者内存资源很多时,
NESSUS
的效率也会随之提高。
5
、完整支持
SSL
。
6
、安全测试支持
NASL
。
安全测试工具
----OWASP-ZAP
OWASP ZAP
:
攻击代理(ZAP)是世界上最受欢迎的免费安全审计工具之一,由数百名国际志愿者积极维护。它可以帮助你在开发和测试应用程序时自动查找Web
应用程序中的安全漏洞。
ZAP
是一个中间人代理。它能够获取你对
Web
应用程序发出的所有请求以及你从中收到的所有响应。
OWASP-ZAP
主要拥有以下重要功能:
本地代理
主动扫描
被动扫描
Fuzzy
暴力破解
他最强大的功能还是
主动扫描
,可以自动对目标网站发起渗透测试,可以检测的缺陷包括路径遍历、文件包含、跨站脚本、sql
注入等等。
点开具体漏洞描述,结合业务逻辑和基本安全知识,分析判断漏洞并酌情考虑修复
下载扫描报告到本地,保存结果,用于后续分析验证
安全测试工具
-----Burp Suite
Burp Suite
:
是用于攻击
web
应用程序的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。它可以共享一个 HTTP
消息,能够在各种模块之间交换信息。
主要有以下功能和模块:
Proxy
(代理模块)
Intruder
(攻击入侵模块)
Repeater
(中继器模块)
Sequencer(
会话
)
Decoder(
编解码
)
Comparer(
对比
)
Extender(
扩展
)
Burp
代理模块
-
实时拦截请求过程
:
1
)
Proxy-Open Browser
,打开内置浏览器,访问
web
系统;
2
)选择
Intercept is on
,实时拦截访问请求,修改测试参数信息,点击
Forward
,查看服务器返回的响应
Acunetix Web Vulnerability Scanner
(AWVS)
:
是用于测试和管理
Web
应用程序安全性的平台,能够自动扫描互联网或者本地局域网中是否存在漏洞,并报告漏洞。可以扫描任何通过Web
浏览器访问和遵循
HTTP/HTTPS
规则的
Web
站点。
可以通过检查
SQL
注入攻击漏洞、
XSS
跨站脚本攻击漏洞等漏洞来审核
Web
应用程序的安全性。
1)新建任务,然后保存
2
)默认选项后,若不需要特殊设置,直接点击
scan
即可开始扫描
3
)默认选项后,直接点击
Create Scan
;
4)
点击
Generate Report
可生成测试报告。