测试小实训

第一单元

1.软件的分类

单机版软件:红警

分布式软件: b/s架构:客户端为浏览器 ,如百度、hao123等

                   c/s架构:客户端需安装专门软件,如QQ 微信等

2、软件测试的定义:

通过人工或自动化的方式来验证软件的实际结果与用户需求是否一致的过程

3、软件测试的原则
原则一:尽早进入软件测试
原则二:穷尽测试是不可行的
原则三:程序员应避免检查自己的程序
原则四:充分注意测试中缺陷的群集现象
原则五:严格执行测试计划,排除测试的随意性
原则六:应当对每一个测试结果做全面的检查
原则七:妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便
原则八:设计测试用例时,应当包括合理的输入数据和不合理的输入数据
原则九:测试用例应由测试数据和与之对应的预期输出结果这两部分组成

开发模型:瀑布模型 快速原型模型  增量模型 敏捷开发

测试模型:V模型 W模型

V模型:用户需求--需求分析--概要设计--详细设计--软件编码--单元测试--集成测试--系统测试--验收测试

W模型:需求分析--概要设计--详细设计--编码--模块集成--系统构建--系统安装
            需求测试--概要设计测试--详细设计测试--单元测试--集成测试--系统测试--验收测试

软件测试的流程:

阶段名                      工作内容                                                                产出物
测试准备阶段           项目立项、需求分析、需求评审需求文档、          产品PRD
测试计划阶段           编写测试计划、计划评审                                       测试计划
测试设计阶段           提取测试点、编写测试用例、用例评审                 测试用例
测试执行阶段           冒烟测试、执行测试用例、提bug、回归测试        缺陷报告
测试完成阶段           验收测试、编写测试报告、项目上线                     测试报告

软件测试的分类

1、按技术划分:
黑盒测试、白盒测试、灰盒测试
•黑盒测试:不需要了解程序的源代码,通过使用整个软件功能来验证程序是否满足需求的测试方法
•白盒测试:是一种按照程序内部逻辑结构和编码结构设计测试数据并完成测试的测试方法
•灰盒测试:一种基于程序运行时的外部表现同时又结合程序内部结构来设计测试数据的测试方法

2、按阶段划分
单元测试、集成测试、系统测试、验收测试
•单元测试:对一个模块、一个函数或者一个类来进行正确性检验的测试方法
•集成测试:单元测试后,将单独的模块按照设计要求组装成为子系统或系统,作为整体进行测试的测试方法
•系统测试:集成测试后,将硬件、软件看作一个整体,对系统的功能及性能的总体测试
•验收测试:系统测试后以用户测试为主,或有测试人员共同参与检验软件质量的测试方法
3、按内容划分
功能测试、性能测试、兼容性测试
功能测试:
界面测试、冒烟测试、回归测试、业务逻辑测试、易用性测试
•功能测试:根据产品操作描述和需求文档,测试一个产品的特性和可操作行为是否满足用户需求的测试方法
•界面测试:测试用户界面的功能模块的布局是否符合客户使用习惯,界面操作便捷性、导航简单易懂性的测试
•冒烟测试:验证系统的核心功能是否能够正常运行的测试方法
•回归测试:指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误的测试方法
•业务逻辑测试:在基本的功能点都已合格的基础上,准备多种测试数据,来驱动各种约束条件下业务流程,确定最终输出的结果是否符合预期的测试
•易用性测试:指用户使用软件时是否感觉方便的测试
性能测试:压力测试、负载测试、并发测试
•性能测试:通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行校验的测试方法
•压力测试:通过逐步增加系统负载,测试系统性能的变化,并确定在什么条件下系统性能处于失效状态
•负载测试:通过逐步增加系统负载,测试系统性能的变化,在满足性能指标的情况下,系统所能承受的最大负载量的测试
•并发测试:是一个负载测试和压力测试的过程,即逐渐增加并发用户数负载直到系统的瓶颈,通过分析资源监控指标等来确定系统并发性能
兼容性测试:分辨率兼容 操作系统兼容 浏览器兼容
4、按其他划分
冒烟测试、随机测试、安全性测试、探索性测试、回归测试、Alpha测试、Beta测试
•随机测试:随机测试主要是根据测试者的经验无需测试用例对软件进行功能和性能抽查的测试方法
•安全性测试:通过不同的测试方法,检验程序、网络、数据库安全性的测试方法
•探索性测试:碰到问题时能随机应变,强调测试人员的主观能动性明确整体的测试计划的测试方法
•Alpha测试:俗称内测,α测试。内部环境下的测试;开发人员或测试人员在现场
•Beta测试:俗称外测、公测,β测试。生产环境下的测试;开发人员和测试人员都不在现场

第二单元(测试计划)

1、定义:
是制定测试目的、范围、方法、时间进度及软件测试重点的过程

二、测试计划模板内容

概括 测试目的 测试资源(人力资源 系统资源 ) 测试范围 人员分工
 风险分析(人员不足、技术有限、软件依赖环境不完备、工具不足、需求变更)
测试策略(都需要进行哪些测试) 测试准则(启动准则、暂停准则、再启动准则、结束准则)
时间进度 提交测试文档

第三单元(测试用例)

1.测试用例模板核心要素有哪些?
用例编号 所属模块 用例标题 优先级 前提条件 操作步骤 测试数据 预期结果 实际结果 通过否 bugId 编写人员 编写时间 测试人员 测试时间 备注

2.测试用例的设计方法有哪些?
等价类划分法  边界值法  错误推测法  因果图法  正交表法  场景法  判定表法

缺陷报告: 缺陷编号 严重程度 优先级 所属模块 缺陷状态 测试环境 指派人 缺陷类型 缺陷标题 重现步骤 提交人
提交时间  测试用例 附件

测试报告:  概述(测试目的 测试人员 测试环境 )  测试过程(测试进度 用例执行情况 缺陷统计)  缺陷分析(缺陷级别分析 缺陷模板分析 缺陷类型分析) 测试总结(测试结论 风险分析 遗留问题)
阶段性测试报告 整体测试报告

bug流转过程
第一种情况:测试发现创建bug->开发人员/项目经理确认->开发修复BUG->测试进行验证->测试验证成功->测试关闭bug
第三种情况:测试发现创建bug->开发人员/项目经理确认->项目负责人确认不是BUG->指回测试->测试关闭bug
第二种情况:测试发现创建bug->开发人员/项目经理确认->开发修复BUG->测试进行验证->测试验证失败->开发人员/项目经理确认->开发修复BUG->测试进行验证->测试验证成功->测试关闭bug

第四单元(网络协议)

http和https区别
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的默认端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

http请求的组成
指从客户端到服务器端的请求消息,信息由4部分组成请求行、请求头、空行 请求正文

http响应格式
指从服务器端到客户器端的响应信息,信息由4部分组成:响应行、响应头、空行 响应正文

状态码解释
100-199  信息状态码,表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。100(continue)继续发送
200-299 成功状态码,表示成功接收请求并已完成整个处理过程,常用200(OK)成功接收
300-399  重定向状态码,例如,请求的资源已经移动一个新地址,常用302、307和304
400-499 客户端的请求有错误,常用404(Not Found),403(Fobidden)
500-599  服务器端出现错误,常用 500

get和post请求的区别
get使用url和cookie传参,而post将数据放在body中
get的url有长度限制2kb post非常大
post比get更安全 数据在地址栏中不可见
get请求用来获取数据 post用来发送数据

接口测试用例模板
用例编号 所属模块 用例标题 优先级 前提条件 操作步骤 请求方法 参数名 参数类型 测试数据 预期结果 实际结果

第五单元(抓包)

charles移动端抓包

1.获取本地ip地址:win+r在运行中输入cmd,在打开的命令行中输入 ipconfig回车
2.在打开的charles中点击  proxy->proxy settings...在打开的proxy settings对话框勾选enable transparent http proxying并设置端口号为:8888
3.使手机连接到与代理服务器pc在同一网络下,组成局域网
4.设置手机代理为手动,代理服务器信息为pc端ip地址以及相应的8888端口
5.用手机访问项目地址进行抓包,查看charles抓到的内容

1.将电脑配置成代理服务器:在charles的代理菜单中,对代理设置,将端口号设置为9999
2.获取电脑ip地址:win+r在运行中输入cmd,再打开命令行窗口输入ipconfig回车
3.使手机连接代理服务器:在手机的网络设置中,使代理设置为手动,并配置代理服务器的ip地址和端口号

fiddler抓包

1.查询本地ip地址:win+r输入cmd回车,在弹出的命令行界面输入ipconfig获取
2.在打开的fiddler界面中,选择“工具”菜单->“选项”,在打开的对话框中选择“connections”选项卡 设置代理端口号为 8888 ,(打开允许远程计算机连接),确定并重启fiddler
3.在手机端无线网(wlan)设置界面,长按选择“修改网络”,在修改网络页面选择”高级设置“,代理服务器选择手动,输入代理服务器地址和端口号,保存
4.手机访问项目地址,在fiddler中查看抓到数据包的内容

第六单元(数据库)

常见数据库
Oracle是最挣钱的数据库,出自甲骨文公司,市场占有率非常高,功能非常强大,被一些大型企业,电信,银行,证券公司、金融公司所使用,市场占有率第一。

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。MySQL目前最流行的开源数据库,被甲骨文公司所占用,威胁着老大Oracle的地位,开源,免费,支持多平台,简单易学易操作,市场占有率第二。

SQLServer是微软开发的数据库,针对服务器,仅支持Windows操作系统,号称是windows上最好用的数据库。数据库的天下不仅仅是MySQL和Oracle的,SQLServer也正在慢慢崛起,微软网罗了不少数据库的专家,推出了不少重磅功能。

MongoDB,最好用的文档型数据库,是NOSQL类型数据库的领导者之一,也是当前最成功的NoSQL类型数据库,数据存储格式采用JSON形式,非常灵活。

Redis,最好的内存级数据库,查询效率极高,并且在Redis 3.0之后,支持多种数据类型,String,Set,List,Hash等类型,开始支持集群,弥补了自身短板。是目前做缓存最流行的数据库

Neo4J,最好的图形化数据库,流行话较低,但是图形化数据库的绝对领导者。

SQLite,最流行的嵌入式数据库,占领手机行业的绝对领导者地位,Android和IOS两大手机系统,都内嵌了SQLite数据库,SQLite是一个完整的关系型数据库,支持标准SQL,支持事务操作,程序包非常小,是嵌入式设备的最佳选择。

各个数据库软件的使用差别大同小异,但是因为MySQL是开源的,成为各大公司使用的主流,面试也主要以MySQL为主。


DDL语句和DML语句

3.1.3. 数据库语句操作

在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下:

CREATE DATABASE 数据库名;

//创建第一个数据库 mydb1create database mydb1

在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失。语法:

//删除创建的数据库drop database mydb1;

在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库

//选择数据库user mydb1

注意:所有的数据库名,表名,表字段都是区分大小写的。所以你在使用SQL命令时需要输入正确的名称。

查看数据库创建细节
show create database mydb1

创建一个使用gbk字符集的数据库
create database mydb2 character set gbk

表结构语句操作

选择数据库

usemydb1
创建MySQL数据表需要以下信息:
表名、表字段名、定义每个表字段
//创建表create tablestudent(idint,namevarchar(20),sexvarchar(20),ageint,saleryfloat(6,2),birthday date)
//删除表drop table student  //查看所有表show tables  //查看表的创建细节show create table student;  //展示表结构desc student  // 在原有的学生基础上添加address列alter table student add addressvarchar(20)  //在原有的学生基础上删除address列alter table student drop address

定义表的约束

create tablestudent(idintprimary key auto_increment,namevarchar(20)unique not null,sexvarchar(20),ageint,saleryfloat(6,2),birthday date)

如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。

AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。

PRIMARY KEY关键字用于定义列为主键。为了标识数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引。 您可以使用多列来定义主键,列间以逗号分隔。

UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的
ENGINE:设置存储引擎
CHARSET: 设置编码

3.2 DML - 数据库操作语言

3.2.1. 概念及作用

DML:data manipulation language 数据库操作语言,用以操作数据库。

3.2.2. 插入数据

//插入数据insertintostudentvalues(1,’zhangsan’,’nan’,19,389.10,’1999-10-10’);//查询select*fromstudent

问题一:插入中文会报错

insertintostudentvalues(2,’李四’,’男’,19,389.10,’1999-10-10’);

解决:

//通知服务器客户端使用的编码是gbksetcharacter_set_client=gbk;//通知服务器客户端查看结果集使用的编码是 gbksetcharacter_set_results=gbk;insertintostudent(id,name,sex,age)values(3,’王五’,’男’,19);

问题二:数据库命令框如果有中文就乱码

charset gbk;

3.2.3. 删除数据

//删除单条数据deletefromstudent where id=1;//删除所有数据,不删除结构,会放到日志中,事务提交后才生效deletefromstudent;//摧毁表,删除表中所有数据,不删除结构,立即生效truncate table student;

注意:delete from student;与truncate table student;都能删除该表中所有数据,区别:前者删除后自增主键还在,后者主键会从1开始。

3.2.4. 修改数据

//设置所有人的年龄加10岁update studentsetage=age+10//修改zhangsan 为张三update studentsetname=’张三’wherename=’zhangsan’//修改王五的salery和出生日期update studentsetsalery=100.01,birthday=’1999-10-10’whereid=3;

3.3 DQL-数据库查询语言

3.3.1.概念及作用

Data Query Language 数据库查询语言

3.3.2.数据查询

//删除studentdrop table student//创建数据库表-学生成绩表create tablestudent(idintprimary key auto_increment,namevarchar(20)unique notnull,chinesefloat,englishfloat,mathfloat);//添加几条数据insertintostudentvalues(1,’张三’,90,80,80);insertintostudentvalues(2,’李四’,90,87,60);insertintostudentvalues(3,’王五’,70,60,69);insertintostudentvalues(4,’赵六’,99,90,87);//查询所有学生信息select*fromstudent;//查询id为1的学生信息select*fromstudentwhereid=1;//查询id为1的学生姓名selectnamefromstudentwhereid=1;//查询数学成绩大于80的同学成绩select*fromstudentwheremath>80//查询所有学生成绩,并输出效果为 姓名 语文 英语 数学 效果,见下图:selectnameas姓名,chineseas语文,englishas英语,mathas数学fromstudent//查询所有成绩及数学分+10分select*,(math+10)fromstudent//统计每个学生的总分selectname,(math+english+chinese)as总分fromstudent//查询总分大于230分的同学select*fromstudentwhere(math+english+chinese)>230//查询数学成绩在80-90之间的同学select*fromstudentwheremath between80and90//查询数学语文英语都大于80的同学成绩select*fromstudentwheremath>80and english>80and chinese>80;//查询数学成绩在 80 60 90内的同学,即数学成绩有60、80、90的。select*fromstudentwheremathin(80,60,90);//模糊查询// _  代表一个,%代表多个(0 - 无限)//查询所有姓名中包含张的同学select*fromstudentwherename like ‘%张%’

排序查询

MySQL中 升序为asc,降序为desc

例如:
升序:select  *  from  表名 order by  表中的字段 asc(MySQL中默认是升序排列,可不写) ;
降序:select  *  from  表名 order by  表中的字段 desc ;
若要进行同时一个升序一个降序 例如:
order by 升序字段 asc,降序字段 desc ;

//按照数学成绩从小到大查询 select*fromstudent order by math;
//按照数学成绩从大到小查询 select*fromstudent order by math desc;

分页查询

limit是mysql的分页查询语法:
select * from table limit m,n
其中m是指记录从m+1开始,,N代表取n条记录。
//取出第3条至第6条,4条记录select*fromstudent limit2,4//查询出数学成绩由高到低前两名select*fromstudent order by math desc limit0,2;

分组查询
分组查询得到结果是第一次查到的某个组别。

//创建一个订单表create tableemployee(idint,namevarchar(20),sexvarchar(20),ageint);insertintoemployeevalues(1,'sunsan','男',18);insertintoemployeevalues(2,'lisi','男',18);insertintoemployeevalues(3,'wangwu','女',19);insertintoemployeevalues(4,'zhaoliu','男',15);//分组查询select*fromemployeegroupby sex;//分组查询加条件select*fromemployeegroupby sex having age>18;

(1) having 条件表达式:用来分组查询后指定一些条件来输出查询结果

(2) having作用和where一样,但having只能用于group by

 报表查询

count  个数
sum    总数
avg        平均数
max    最大值
min    最小值

//统计班级里边有多少学生selectcount(*)fromstudent;//统计总成绩大于250分的人数selectcount(*)fromstudentwhere(math+english+chinese)>250;//统计班级里边各科总成绩selectsum(math),sum(english),sum(chinese)fromstudent//统计所有科目的总成绩selectsum(math+english+chinese)fromstudent;//统计一下语文平均成绩selectsum(chinese)/count(*)fromstudent;selectavg(chinese)fromstudent;//统计一下班级语文最高分和最低分selectmax(chinese)fromstudent;selectmin(chinese)fromstudent;//报表查询订单根据名称合并后,总价格>10000的商品select*fromordersgroupby product havingsum(price)>7000

 内连接查询

内连接,inner join on 查询两张表,设定条件,将两张表中对应的数据查询出来
不会产生笛卡尔积,不会产生临时表,性能高

select*fromcustomer c innerjoinorders o on c.id=o.customer_id;select*fromcustomer,orderswherecustomer.id=orders.customer_id;select*fromcustomer c,orders owherec.id=o.customer_id;

 左外连接

左外连接  left join on 设定条件,将两张表对应的数据查询出来,同时将左表自己没有关联的数据也查询出来
注意:join前面是左,后面是右
select*fromcustomer c leftjoinorders o on c.id=o.customer_id;

 右外连接

右外连接 right join  on 设定条件,将两张表对应的数据查询出来,同时将右表自己没有关联的所有数据查询出来
select*fromcustomer c rightjoinorders o on c.id=o.customer_id;

你可能感兴趣的:(测试小实训)