一、测试基础
测试原则
所谓的测试原则指的就是我们在执行测试工作时必须遵守的一些原则。如
1.测试只能证明软件存在缺陷
2.不能执行穷尽测试
3.缺陷存在群集现象
4.某些测试需要依赖特殊的环境
5.测试应尽早介入
6.杀虫剂现象(同样一个测试用例不能重复执行多次,因为软件会对它产生免疫)
7.不存在缺陷谬论
1.1项目类型
B/S:
Browser/Server
通过浏览器访问,就是B/S
C/S:
Client/Server
通过客户端访问的,就是C/S
1.2软件开发模型
软件开发模型,也叫软件的生命周期
软件测试与软件的开发模式有很紧密的关系,作为软件测试人员我们要对软件的开发模式有充分的理解
在软件测试经过发展周期,开发模型大致分为三种
瀑布模型,快速原型、螺旋模型
瀑布模型特点
线性模型:这个开发模型占据地位重要,模型的基础以文档为驱动,每个阶段执行一次。按照线性顺序进行开
发。
瀑布模型的优点
开发的各个阶段比较清晰
当前阶段完成后,只关注后续阶段
每个成员只关注自己的部分
瀑布模型的缺点
依赖于需求分析。不适应需求变化往往会在后期显露风险,失去尽早纠错的机会
如果没有及时发问题,到最后测试阶段才发现则需要推倒重来
一般只适用于大型的或者复杂的项目上,比如银行 、保险、建筑
软件测试模型 :所谓软件测试模型,就是前辈们总结的测试经验
作用 :通过经验总结得到测试模型,旨在提高软件开发测试过程中的效率和效果
第一种模型:V模型
优缺点
优点:V模型既包含了底层测试又包含了高层测试
缺点:
依赖于需求分析。不适应需求变化往往会在后期显露风险,失去尽早纠错的机会
如果没有及时发问题,到最后测试阶段才发现则需要推倒重来
一般只适用于大型的或者复杂的项目上,比如银行 、保险、建筑
第二种模型:W模型
W模型也称为双V模型
W模型的优缺点
优点
1.强调测试伴随着整个开发周期,而且测试的对象不仅仅是程序,还包括需求和设计
2.更早的介入测试,能尽早的发现缺陷
缺点
因为是站在更高的角度看问题,所以对于测试技术要求高,实践起来比较困难
1.3软件测试的分类
1.4测试用例的设计方法
常见的黑盒测试方法:
等价类划分:确定无效与有效等价类,设计用例尽可能多的覆盖有效类,设计用例只覆盖一个无效类。
边界值分析:处理边界情况时最容易出错,选取的测试数据应该恰好等于、稍小于或稍大于边界值。
常见的白盒测试方法:
语句覆盖:语句覆盖是指选择足够多的测试用例,使得运行这些测试用例时,被测程序的每个语句至少执行一次。【最弱覆盖】
判定覆盖:判定覆盖又称为分支覆盖,它的含义是,不仅每个语句至少执行一次,
而且每个判定的每种可能的结果(分支)都至少执行一次。
条件覆盖:条件覆盖的含义是,不仅每个语句至少执行一次,而且使得判定表达式中的每个条件都取得各种可能的结果。【条件不一定包含判定,反之亦然】
判定/条件覆盖:同时满足判定覆盖和条件覆盖的逻辑覆盖。
路径覆盖:它的含义是,选取足够多的测试用例,使得程序的每条可能执行到的路径都至少经过一次(如果程序中有环路,则要求每天环路路径至少经过一次)
补充:缺陷管理
1.bug和缺陷关系
bug不等于缺陷
bug仅仅是缺陷中的一部分
2.缺陷的判定标准
1. 软件未达到软件规格说明书中的要求【缺少功能】
2. 软件的功能超出了规格说明书中的要求【多了功能】
3. 软件出现了规格说明书中明确指定不能出现的错误
4. 软件出现了规格说明书中未明确指定的错误
5.软件用户体验不好【ui丑陋、使用复杂、运行速度慢】
3.缺陷的状态
new:新建,表示刚刚创建的缺陷
open:打开
inprogress:进行中
fix:已修复
close:关闭
reopen:重新打开,表示bug没能通过回归测试
reject:拒绝,开发认为测试提交的不是bug,所以拒绝处理
delay/postpone:延期处理
4.如何提交高质量的软件缺陷(Bug)记录?
1.和BUG对应的软件版本
2.开发的借口人员,测试人员
3.BUG的优先级
4.BUG的严重程度
5.BUG可能属于的模块
6.BUG的标题
7.BUG的描述
8.BUG的截图
9.BUG的状态
10.BUG的错误类型
缺陷跟踪
1. Bugzilla
这款缺陷跟踪软件在开源项目当中很受欢迎,已被Mozilla、Eclipse、Apache和红帽等组织以及Linux内核项目所使用。它可跟踪软件缺陷和代码变化,让开发人员可以提交并审查补丁,支持团队沟通,并帮助管理质量保证。
支持的操作系统:Windows、Linux和OS X
2. GNATS
GNATS是Gnu项目的缺陷跟踪系统。Gnatsweb为命令行工具提供了Web界面,另外还提供几种第三方界面。
支持的操作系统:与操作系统无关
二、前端基础
1.前端
1.1前端:指的是一个网站可以展现给人类能够看懂的页面。 网页:图片 、文字、视频、音频、
超链接。
前端代码:HTML+CSS+JS
HTML:网页的骨架 没有任何的样式
CSS:给骨架添加各种样式 变得好看
JS:控制网页的动态效果
前端框架:BOOTSTRAP、JQuery、Vue
提前给你封装好了很多操作 你只需要按照固定的语法调用即可
1.2HTTP协议
"""
超文本传输协议 用来规定服务端和浏览器之间的数据交互的格式...
该协议你可以不遵循 但是你写的服务端就不能被浏览器正常访问 你就自己跟自己玩
你就自己写客户端 用户想要使用 就下载你专门的app即可
"""
四大特性
1.基于请求响应
2.基于TCP/IP作用于应用层之上的协议
3.无状态 不保存用户的信息
eg:一个人来了一千次 你都记不住 每次都当他如初见
由于HTTP协议是无状态的 所以后续出现了一些专门用来记录用户状态的技术
cookie、session、token...
4.无/短链接
请求来一次我响应一次 之后我们两个就没有任何链接和关系了
长链接:双方建立连接之后默认不断开 websocket(后面讲项目的时候会讲)
# 请求数据格式
请求首行(标识HTTP协议版本,当前请求方式)
请求头(一大堆k,v键值对)
/
请求体(并不是所有的请求方式都有get没有post有 存放的是post请求提交的敏感数据)
# 请求方式
1.get请求
朝服务端要数据
eg:输入网址获取对应的内容
2.post请求
朝服务端提交数据
eg:用户登陆 输入用户名和密码之后 提交到服务端后端做身份校验
# 响应数据格式
响应首行(标识HTTP协议版本,响应状态码)
响应头(一大堆k,v键值对)
响应体(返回给浏览器展示给用户看的数据)
# 响应状态码
用一串简单的数字来表示一些复杂的状态或者描述性信息 404:请求资源不存在
1XX:服务端已经成功接收到了你的数据正在处理,你可以继续提交额外的数据
2XX:服务端成功响应了你想要的数据(200 OK请求成功)
3XX:重定向(当你在访问一个需要登陆之后才能看的页面 你会发现会自动跳转到登陆页面)
4XX:请求错误
404:请求资源不存在
403:当前请求不合法或者不符合访问资源的条件
5XX:服务器内部错误(500)
前端参考博客:前端基础_wx6049bc4ca0b6c的技术博客_51CTO博客
1.3标签的分类1
<h1> </h1> 设置一级标题
<h2> </h2> 设置二级标题
1.4标签的分类2
段落标签
1.5标签的分类3
图片标签
案例
1.6 form表单
text:类型是文本类型,你输入什么内容,就会显示什么内容
password:类型是密码类型,不会直接显示输入的内容
可以实现半个空格
格式
<form>
</form>
案例
标题标签 h1 h2 h3 ...
段落标签 p
图片标签 img
a标签 a
表单标签 form - input
头部标签 head - title
2.web软件
apache:经典的、稳定的web服务软件,可以跨平台
nginx:轻量级、高性能,可以跨平台
tengine:是阿里基于nginx做的二次开发版,可以跨平台
iis:微软,仅仅可以运行在windows
tomcat:可以跨平台,主要是运行java
2.1网络通信:
所有的网络通信过程,都是基于IP地址
ip地址两类:
动态ip ip地址是基于DHCP协议来自动获取的
动态ip地址是有租约:
静态ip
三、MySQL
安装看小白之前发的博客
MySQL对数据的基础操作
四类操作:增删改查
增:添加新的行
删:删除表中的行,表本身,或者是数据库
该:修改表中的数据
查:查看指定的内容或者查看有哪些表,有哪些库
对库的操作
查看数据库
show databases;
使用库
use database;
查看当前使用的是那个库
select database();
创建数据库
create database 数据库名 charcter set "utf8" collate "utf8_general_ci";#charcter设置编码格式 ,collate设置排序规则
删除数据库
drop database 数据库名
对表的操作
CREATE TABLE 表名 (字段名 类型 属性.. , 字段名 类型 属性.. , 字段名 类型
属性.. );
查看当前库有哪些表
show tables;
新建表
create table 表名(
id int unsigned primary key auto_increment not null,#表中数据的字段和要求
name char(10) not null
)
删除表
drop table 表名;
查看表结构
desc 表名;
案例
第一步:在在db1中,创建一个新表
表名tb004,字段信息如下 id 主键 整数 非负 不允许为空 自增 name 字符类型,最多30个字符,不允许为空 age 整数 非负 可以空 gender 枚举类型 可以为空 addr 字符类型 最多100个字符 设置默认值hebei
第二步:查看表是否存在
第三步:查看表结构
use db1;
create table tb004(
id int unsigned not null auto_increment primary key,
name char(30) not null,
age int unsigned,
gender enum("m","f"),
addr varchar(100) default "hebei"
);
show tables;
desc tb004;
在表中插入数据
desc 表名;先查看表的结构根据表的结构来插入数据
insert into 表名 values(值1,值2,值3...);里边的值要按照表的结构顺序来写
指定给那个字段添加内容
insert into 表名(字段) values(值);
查询表中的数据
select * from 表名;*表示所有数据
删除数据
delete from 表名
delete from 表名 where 条件
一个表中的id如果删除之后 他不会从新计数,所以这时候就需要截断表来删除数据
truncate 表名
修改数据
修改表中的全部的记录
update 表名 set 字段=值
修改表中的符合条件的记录
update 表名 set 字段 = 值 where 条件
查询(重要)
单表查询
select 查询的内容 from 表名 where 条件;
“*”表示所有的内容
一个或者多个字段名表示查询一个或者多个字段,之间用逗号隔开
select 后面的那个查询内容是用于控制显示结果中,有几个字段,它无法控制显示结果中有几条记
录 通过where后面的条件,可以控制显示几条记录
案例:查看下老师的姓名和性别
select name,gender from student;
where 条件:
> 大于
>= 大于等于
< 小于
<= 小于等
<> 不等于
!= 不等于
between ... and ... 判断范围
is null 是空
is not null 不是空
like 模糊查询
in 判断某个字段是否在给定的集合中
组合条件
and 需要同时满足条件1 和2
select * from 表名 where 条件1 and 条件2;
or 满足其中一个就可
排序
order by 字段 根据指定的字段进行排序
asc:升序 默认是升序
desc:降序
select id from tb1 order by id asc;根据id进行升序排序
select id from tb1 order by id desc;根据id进行降序排序
聚合函数
sum()求和
select sum(age) from students;
avg()平均值
select avg(age) from students;
max()最大值
select max(age) from students;
min()最小值
select min(age) from students;
count()统计记录总数
select count(*) from students where gender='F';
分组
group by 字段
select count(gender),gender from students group by gender;
按照性别进行分组,分别统计m 和 f有多少个学员
having 加条件
select classid,count(classid) from students group by classid having count(classid)>3;
多表查询
也叫链接查询 就是把两个或多个表联合起来进行查询
交叉连接
表中的每一行,分别和其他表的每一行,组成一个新的行。
新表的行数是是两个表的行数相乘,列数是两个表的列数相加。
得到笛卡尔积表,这个表中有大量无用的数据
select * from 表1,表2; # 笛卡尔积表,行数是两个表的行数相乘,列数是两个表
的列数相加
自然连接【内链接、等值链接】
将多个表中,符合条件行进行链接
select * from 表1,表2 where 表1.字段=表2.字段;
字段别名,表别名
给字段取一个新的字段 通过as来实现
select t1.id from tb1 as t1,tb2 as t2 where t1.id=t2.id;表tb1改为了t1,tb2改为了t2
select id as i from tb1 ;把id改为了
注意:如果用了新的名字,那么必须使用,否则报错
左外连接,右外连接
左:显示结果以左表为准
也就是说,左表中的数据会全部出现,右边中的数据,有就显示,没有的显示为空
select id from tb1 left join tb2 on 条件
右:显示结果以右表为准
右表中的数据会全部出现,左边中的数据,有就显示,没有的显示为空
select id from tb1 right join tb2 on 条件;
子查询
一个语句使用另外一个语句的结果
案例:查询tb2中的年龄比tb2中最大的年龄大的人数
select max(age) from tb1;
select count(*) from tb2 where age>(select max(age) from tb1);
视图
视图:view
视图也可以认为是一张表
但是这个表存在与内存中的虚表,断电后会消失
作用:
通过视图,可以让用户只能访问数据库中的一部分数据【给用户授权】
create view 视图名 as select 语句
案例:创建用户user1,授权可以访问hellodb库中的所有表
grant all on hellodb.* to "user1"@"localhost" identified by "123";
flush privileges;
索引
索引(对于我来说了解一下)
概念:
类似于书前面的哪个目录,通过索引可以实现快速的在数据库中找到目标数据
通过使用索引,在查询数据的时候,就变得更快了;但是,索引会导致写速度变慢
注意:
索引是针对某一列数据做的,比如针对id左索引、针对name做索引
存储过程
在测试工作中,经常需要向数据库中填充进去大量的测试数据,同存储过程,可以将一部分有逻辑的代码批量填充到我们的数据库中【快速的生成测试数据】
快速向数据库写入大量的测试数据
delimiter // # 存储过程的开头,定义一个符号,标识
存储过程的结尾
create procedure 存储过程名(参数) # 定义存储过程的名字
begin # 存储过程中要执行的代码从这里开始
sql语句
end // # 存储过程的结尾
调用/使用存储过程格式
call 存储过程名()
事务
将多个sql语句,组合成一个整体,这个整体就是一个事务,事务中的所有的语句要么都执行,要么都不执行事务中的语句,如过只有部分执行成功,那么就需要将这个事务进行回滚操作
回滚:将数据恢复到执行操作之前的状态
通过使用事务,可以保证数据的一致性
事务的操作
回滚事务 回复到执行语句之前的状态
提交事务 让事务中的语句真正生效如果使用了事务,那么在事务提交之前,其他用户是看不到事务中的操作
begin 启动事务
commit 提交事务,提交之后,事务自动结束
rollback 回滚事务,回滚之后,事务自动结束
一般情况下,在mysql客户端中,每个sql语句,都是一个单独的事务,而且事务会自动提交
但是,在后期的python程序中,需要手动去提交/回滚事务的
四、liunx
稍后更新