一. 软件测试理论部分
1.测试概念(了解)
软件测试分为几个阶段
单元测试:完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码
集成测试:通过测试发现模块接口有关的问题
系统测试:对软件全部功能进行测试,验证软件实现的功能能否满足需求文档规范的功能
回归测试:发生修改之后 重新测试先前的测试用例 以保证修改的正确性
验收测试:根据测试计划和结果对系统进行测试和接收。
测试方法
-
黑盒测试:
- 黑盒测试(系统测试)。源代码不可见,界面可见。在完全不考虑程序内部结构和内部特性的情况下,对程序接口进行测试。
- 优点:比较简单,自动化测试比较方便,从用户角度出发,容易知道用户会用到那些功能,遇到那些问题
- 缺点:不能覆盖所有代码
-
白盒测试:
- 白盒测试(单元测试)是针对被测单元内部是如何进行工作的测试,全部代码可见,页面不可见 。
- 优点:增大代码覆盖,提高代码质量,发现代码隐藏问题
- 缺点:程序运行会有很多不同的路径,不可能测试所有运行路径,会漏掉功能需求。
- 常用白盒测试方法:
- 静态测试:不用运行程序的测试;
- 动态测试:需要执行代码,通过运行程序找到问题;
-
灰盒测试:
- 不仅关注输入、输出的正确性,同时也关注程序内部情况。通过表征性的现象、事件、标志来判断内部运行状态
- 优点:进行基于需求覆盖测试和基于程序路径覆盖测试
- 测试结果对应到程序的内部路径
- 保证设计的黑盒测试用例完整
- 缺点:
- 投入时间长
- 没有白盒深入
-
冒烟测试
- 每日构建版本建立后对系统的基本功能进行简单的测试。主要签到程序的主要功能进行验证,不会对具体功能进行更深入的测试。
- 优点:执行时间短,高产出比
- 缺点:不全面,不能发现程序中所有的缺陷
常用的黑盒测试方法:
建议大家总结自己对测试方法的理解,自己多写写测试用例
等价类划分法,边界值法,判定表发,因果图法,正交实验法
-
等价类划分法
-
共同特征的数据集合进行划分
-
有效等价类(一个):满足需求的数据集合
-
无效等价类(两个):不满足需求的数据集合
重点:有效等价和单个无效等价各取一个即可
应用场景:大量数据输入(输入框,下拉列表,单选复选框)
案例:
-
-
边界值分析法
- 上点:正好等于
- 离点:刚好大于,小于
- 内点:区间范围内的点
通常和等价类划分法一起写
案例:
-
因果图法
- 描述系统输入输出之间的因果关系、约束关系。
-
场景法
-
正交实验法
- 是多因素实验,寻求最优水平组合的一种高效率设计方法。通过正交表挑选部分有代表性的水平组合实验替代全面实验。
- 应用场景:最优配置问题、最优组合问题,优先使用正交实验法
-
判定表法
- 表格形式表达多条件逻辑判断工具(不同的条件导致对应的结果)
- 组成:
- 条件桩:列出所有条件
- 动作桩:问题中可能采取的操作
适用场景:多条件之间有依赖关系,4个以内条件依赖关系
对项目业务进行设计测试点
案例:
Alpha测试和beta区别
- Alpha:系统开发接近完成时对应用系统的测试。测试后仍会有少量的设计变更
- Beta:开发和测试基本完成时所作的测试,最终的错误和文帝在最终发行前找到
都是由最终用户完成;在一个或多个用户开发环境下测试
用例设计规则
- 功能性
- 安全性
- 可靠性
- 可移植性
- 兼容
- 易用性
- 疲劳测试
- 压力测试
缺陷按优先级分为哪些类型?
- 缺陷必须立即解决
- 缺陷要求正常排队等待修复
- 缺陷可以在方便时被纠正
- 下一个版本修复
- 不修复
缺陷标准
- 少功能
- 功能错误
- 多功能
- 缺少隐形功能
- 易用性
缺陷产生原因
- 需求文档
- 架构设计
- 编码错误
- 环境
缺陷报告
提交缺陷注意事项
- 可重现
- 规范性:符合公司或者项目要求
- 唯一性:一个缺陷上报一个问题
测试用例的内容是什么?(重点)
-
测试编号:项目、模块、编号
-
用例标题:预期结果
-
模块/项目:所属项目或模块
-
优先级:P0-P4(P0最高)
-
前置条件
-
测试步骤
-
测试数据
-
预期结果
测试结束的标准是什么?
- 全部测试用例都被执行完成
- bug基本修复
- 测试覆盖率和缺陷率达到标准
- 其他要求都达到质量标准
项目处于试运行或上线阶段在测试计划中定义结束的标准:
在一定性能下平稳运行多少天、本版本没有严重bug,普通bug数量在多少个以下,bug修复百分之多少以上;
实际测试达到上述要求,由项目、开发、测试经理共同签字,认同测试结束,版本即可发布。
测试流程、软件测试生命周期
- 需求分析:了解熟悉业务,分析需求测试点,确认功能
- 测试计划:规定目标,规范,
- 测试设计,开发:设计方法
- 测试执行:测试环境搭建,执行测试用例
- 测试评估:写测试报告,缺陷报告
软件生命周期(重点)
可行性研究,需求分析,概要设计,详细设计,编码,测试,运行与维护
缺陷的生命周期(重点)
- 软件测试人员提交缺陷报告;
- 测试负责人审核后将缺陷分配给相关开发人员修复
- 缺陷被修改后有测试人员根据缺陷报告中修改记录进行返测
- 返测通过的缺陷由负责人关闭;
- 返测未通过的缺陷直接返回给开发人员重新修改,然后再由测试人员返测,直到测试和开发达成一致处理意见。
app测试性能指标
- 内存
- cpu
- 流量
- 启动速度
app测试有那些方面
权限测试、安装、运行、卸载测试、UI测试、功能测试、性能测试、中断测试、兼容测试、安全测试、回归测试、升级更新测试、用户体验测试
测试工具
接口测试工具:postman
性能测试工具:JMeter
项目管理工具:禅道(缺陷管理),jira
抓包工具:fidder
测试分类
- 功能测试
- 系统测试(包含性能测试)
- 验收测试
web测试和app测试不同点(熟悉)
系统架构方面:
web项目:
- 一般都是b/s架构,基于浏览器的
- 只要更新了服务器端,客户端就会同步会更新。
app项目:
- 是c/s的,必须要有客户端,用户需要安装客户端。
- 需要客户端和服务器都更新。
性能方面:
web页面主要会关注响应时间
app则还需要关心流量、电量、CPU、GPU、Memory等。
兼容方面:
web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统方面的兼容
app测试则要看分辨率,屏幕尺寸,操作系统、网络。
web测试是基于浏览器的所以不必考虑安装卸载。
而app是客户端的,则必须测试安装、更新、卸载。
除了常规的安装、更新、卸载还要考虑到异常场景: 包括安装时的中断、弱网、安装后删除安装文件 。
二.接口测试
接口测试的目的
测试接口的正确性和稳定性(持续集成是接口测试的核心)
接口测试的原理
模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的一个过程。
接口测试的重点
检查数据的交换,传递和控制管理过程,还包括处理的次数
接口常见问题
-
通过性验证,就是传递正确的参数,是否返回正常的结果
-
参数组合, 参数有必传和非必传,参数的类型和长度,以及传递时可能业务上的一些限制,所以在设计用例时,就要排列组合这些情况,保证所有情况都能覆盖到
接口的安全性,这个又分为几种情况:
-
绕过验证,比如提交订单时,在传递商品价格参数时,修改商品价格,就要看后端有没有验证了。或者我支付时,抓个包将订单金额一改,如果能以我改后的金额支付,那这个借口就有问题了。
-
绕过身份验证,就是某个功能只有有特殊权限的用户才能操作,那我传递一个普通的用户,是不是也能操作呢
-
参数是否加密,这个关系到一些账户的安全,比如我们在登录一些网站时,它要将我们的登录信息进行加密,如果不加密我们的信息就会暴露,危害性极大。
-
密码安全规则,设置密码时复杂程度的校验。
依赖性接口测试:上下游接口依赖性(重点)
将数据设置成全局变量,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数。可以使用json,正则表达式,cookie来存储。
依赖于第三方数据的接口如何进行测试最正确的回答是mock,当然我们简单点去搞也
1、获取上一个接口的返回值
2、将返回值设置成环境变量或者全局变量
3、设置下一个接口的参数形式
依赖于登录的接口如何处理?
登录接口依赖token的,可以先登录后,token存到一个json的配置文件里面后面所有的请求去拿这个数据就可以全局使用了,如果是cookies的参数,可以用session自动关联
接口测试用例的举例:登录
参数是否必填、参数间是否存在关联、参数取值范围 业务规则
phoneNumber和password参数正确,登陆成功
phoneNumber参数正确,password类型不为String, 登陆失败
phoneNumber参数正确,password参数缺失, 登陆失败
password参数正确,phoneNumber超过11位,登陆失败
password参数正确,phoneNumber不为String,登陆失败
password参数正确,phoneNumber参数缺失,登陆失败
fiddler抓包使用
- web:打开fiddler工具后,再去浏览器打开网页,fiddler会自动抓包,抓取请求响应数据。他会自动设置为本地代理,还可以设置抓取https协议的包。
- 手机:在手机上的网络设置里,设置代理服务器。就是把fiddler作为代理服务器(fiddler自身要设置为支持远程连接),手机连接fiddler工具,所以手机代理服务器设置页面要输入打开fiddler工具的电脑的ip地址和fiddler的端口号8888,好让手机能连接fiddler,通过fiddler来访问互联网。
postman接口测试步骤
获取接口测试的url
可以使用抓包工具查看接口的使用方法GET/POST
POST方法需要
-
判断是JSON还是表单,可以在抓包工具中找content—type,写入postman请求头中
-
写body,在抓包工具中查看,将参数写入body
什么是性能测试
系统在一定的压力情况下,查看cpu,内存,磁盘,网络带宽,TPS、响应时间、并发用户数、等各项指标,通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求,就是在特定的运行条件下验证系统的能力状况。
什么是负载测试
负载测试主要是考察软件系统在既定负载下的性能表现。就是站在用户的角度去观察一定条件下软件系统的性能表现。期望结果是用户的性能指标需求得到满足。性能指标一般体现为响应时间、并发量等。
三. linux基础命令(了解)
pwd | 所在目录绝对路径 |
ls | 列出给目录下所有子目录与文件 |
cd | 改变工作目录 |
man | 查看联机手册 |
grep | 查找文件中符合条件的字符串 |
find | 在指定目录下查找文件 |
chomd | 设置文件访问权限——r:4读、w:2写、x:1执行权限。777表示:用户所有者权限7,同用户组的权限是7,其他非本地用户组权限是7 |
ps | 系统正在运行的进程 |
kill | 删除执行中的程序或工作 |
tail | 查看文件内容(默认显示文件最后10行信息) |
netstat | 查看端口 |
date | |
echo | 打印常量,变量,指令 |
ping | 检测是否与主机连接 |
mkdir | 创建空目录 |
rmdir | 删除空目录 |
touch | 新建空文件 |
rm | 删除文件或目录 |
mv | 移动文件或将文件改名 |
cp | 复制文件或目录 |
cat | 查看文件的内容 |
vi | 编辑文件内容 (:wq 保存 ) |
其中 cat, ls,more,head, tail 都可以查看文件内容
区别:
cat:可以合并文件
more:根据窗口大小进行分页显示,还可以提示文件的百分比
ls:用法很多,建议初学者常用
head:显示文件内容的前多少行
tail:显示文件内容最后多少行
四.计网
TCP/IP
什么是TCP/IP协议?
- 是一种面向连接的、可靠的、基于字节流的传输层通信协议。
- 由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
TCP/UDP的区别
TCP应用场景:
文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录,视频。
UDP应用场景:
qq聊天、直播、网络语音电话、广播通信(广播、多播)
session
Session是一种记录客户状态的机制,保存在服务器上。
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。
cookie
- 实际是由服务器发送给客户端的特殊信息
- 信息以文本的方式存放在客户端
- 客户端向服务器发送请求时会带上这些特殊的信息
- 服务器在接收到cookie以后会验证cookie的信息,以此来辨别身份
总结cookie和session的特点是:
cookie像是个人身份证,session像是档案表。
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息(账号密码、sessionID),也是实现Session的一种方式。
Session是在服务端保存的一个数据库,用来跟踪用户的状态,这个数据可以保存在缓存集群、数据库、文件中。
- cookie不安全
- session会在一定时间内保存在服务器上,当访问增多,比较占用服务器性能
3. Http、Https
- Http
- Http传输的数据都是未加密的,明文的,应用层协议
- Https
- 数据在传输过程是加密的
- 需要CA申请证书,需要缴费
区别:
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTP 页面响应比HTTPS快(主要是因为HTTP使用TCP三次握手建立连接,客户端和服务端需要交换三个包;而HTTPS除了TCP的三个包 还需要加上SSL的9个包,一共是12个包)
4. Post
- 负责向服务器提交数据。数据包含在请求体中
- 没有大小限制
5. Get
- 主要从服务器获取数据
- URL中添加请求参数 有长度限制,显示地址栏
6. 体系结构
OSI,TCP/IP,五层协议的体系结构,以及各层协议
OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(5层):物理层、数据链路层、网络层、运输层、 应用层。
每层作用
-
物理层:传输二进制比特流
-
数据链路层:负责将上层数据封装成帧
-
网络层:负责路由寻址和广播 ;广播:发送消息和接收消息
-
传输层:负责建立一个可靠的端到端的连接;端到端:发送到接收 ;过程:建立、维护、撤销(拆除)
-
会话层:负责建立维护拆除会话,为端应用之间提供控制功能(可靠性)
-
表示层:完成对传输数据格式转换:格式化;发:加密;接:解密;发:压缩,接:解压缩
-
应用层:对应用软件提供网络支持
7. 常见状态码
100系列:请求已收到继续处理;
200系列:表示成功
- 200:正常,服务器正确响应了请求
300系列:资源重定向;
- 301:永久重定向;请求的网页已永久移动到新位置
- 302:临时重定向;被请求文档已经临时移至别处,此文档新的url在location响应头中给出
- 303:浏览器对于POST的响应进行重定向至新的url
- 307:浏览器对于GET的响应重定向至新的url
400系列:客户端错误:
- 400:错误请求;服务器不理解请求的语法。
- 401:未授权;如请求参数、方法、格式等
- 403:拒绝访问;服务器理解客户的请求,但拒绝处理它(没有权限)
- 404:请求资源不存在
500系列:服务器端出错
-
500:服务器内部错误
-
501:尚未实施;服务器不具备完成请求的功能
-
502:服务器网关错误
-
503:服务器由于维护或者负载过重未能应答
-
504:请求超时
8. 三握四挥
三次握手
(面试时用自己的语言表达就可)
把它想象成打电话
A:客户端 B:服务器
第一次:A->B 你能听到我说话吗
第二次:B->A 我可以听到,你能听到我说话吗
第三次:A->B 我可以听到,那我们聊天吧
第一次、第二次握手不可以携带数据
两次握手
B不清楚A是否能听到它讲话
当来自服务端的 ACK 消息延迟太多,双向握手会带来潜在的问题。
此时客户端认为发生连接超时(Timeout),会向服务端发送另一个带有新序列号(例如Z)的 SYN 消息。
但是,如果服务端之前发送了一个 ACK(在收到X之后稍微延迟发送给客户端但是在Z之前),它将丢弃这个带有新序列号(例如Z)的 SYN 消息。
反过来,客户端接收到延迟的 ACK 并假设它引用了最后发送的 SYN 消息。这是错误发生的地方:
客户端将发送序列号为 Z 的消息,而服务端期望消息遵循序列号X。
四次挥手
同理
A:客户端 B:服务器
A->B:我不想聊了,可以不说了吗
B->A:可以呀,我还有想说的,那我说吧
------------B巴拉巴拉(B此时可以给A传输数据)------------
B->A:我说完了,可以挂电话吗
A->B:可以呀
------------通话结束------------
9. 打开网页的过程
开始 | |
---|---|
DNS解析 | 用户输入网址,按下回车,浏览器得到域名,DNS将域名转换为IP地址 |
负载均衡 | 当一台服务器无法支持大量的用户访问时,将用户分摊到两个或者多个服务器上的方法叫做负载均衡。Nginx |
web服务器 | web服务器接收到请求,产生响应,并将网页发送给Nginx负载均衡服务器。 |
浏览器渲染 | 根据页面内容生成DOM Tree,根据CSS生成规则树。两者生成Render Tree(呈现树),根据呈现树渲染网页 |
结束 |
五. 数据库(掌握增删改查)
Select 查询
- select * from 表名
- select A,B,C from 表名
Insert
- insert into c values(A,B,C)
update
- update c set age=50;
删除
-
delete
- 每次从表中删除一行,删除操作作为事务记录在日志中保存,以便进行回滚
- delete from c where id=6;
-
truncate
- 删除表中所有数据,不记录日志
- truncate table 表名;
-
drop
- drop table if exists a;
delete 、 truncate、drop 区别
- 速度上:truncate>delete
- 如果保留表 将所有数据删除,自增长字段恢复从1开始,用truncate
- truncate ,delete 只删除数据; drop删除整个表(结构和数据)
select * form 表名 where 条件 group by 字段 order by 字段 limit start ,count ;
字段约束
0,null作为自增长字段占位符
truncate ,delete 对自增长字段影响
-
delete
-
truncate
字段的别名——as(可省略)
消除重复记录——distinct
过滤select查询结果中的重复记录
select distinct 字段,字段 from 表名;
模糊查询——like
排序——order by
select * from A where age >10 order by class;
聚合函数
聚合函数不能用到where后面的条件里
count——总记录数
select count(*) from student;
select count(distinct class)from student;
MAX——最大值
MIN——最小值
sum——求和
select sum(age)from student;
avg
数据分组
having
having和where区别
- where过滤数据行,having过滤分组
- where不可以使用聚合函数,having可以使用
- where分组前过滤,having分组后过滤
- 建议使用where
数据分页
limit
select * from 表名 limit, start , count;
连接查询
http://t.csdn.cn/KG5zf
Mysql内置函数
http://t.csdn.cn/Nq7ws
存储过程
视图
本质是对查询的封装
视图可以理解为一张只读的表,只能用select,不能用delete和update
- 删除 drop
事务
运用于订单系统、银行系统
事务是多条更改数据操作的sql语句集合
一个集合数据有一致性,要么就都失败,要么就都成功
回滚事务,表示放弃更改
事务中途中断,例:执行6,7条语句——默认会执行rollback,重新打开navicat内容不改变。
commit提交事务,让修改生效
索引
通过目录索引,快速找到内容对应页,加快数据查询效率
创建索引
creat index 索引名称 on 表名(字段名称(长度));
索引降低更新表的速度,更新表时,不仅要保存数据,还要保存索引文件