软件测试介绍
前提
- 程序由前端和后端组成,前端负责与用户交互,后端负责处理前端用户提交的各种数据,并产生反馈
- 前端在处理用户提交的数据时,会通过编写一定的算法,后端处理业务逻辑也包含一定的算法来实现最终结果
什么是接口
- 接口是不同模块的一个交互通道
- 前端向后端提供参数,后端返回结果到前端
- url中的(键/参数) 是用户录入的数据
接口测试意义
- 跨过前端界面,直接访问后端接口,确认是否通过测试规范
接口测试作用
- 提高测试效率(例如在界面未完善的时候可以先通过接口测试业务流程)
- 更准确的定位到bug(更精确的像开发反馈)
- 可以发现很多前端界面测试不出来的bug(例如同时多次请求等)
接口测试流程
- 通过url定位接口资源
- 设计并填写测试数据
- 查看响应结果是否符合预期
测试用例
编写测试用例方法
- 从正向和逆向思维编写用例,模拟用户的各种操作(正确逻辑操作、错误格式操作、空数据操作、小众情况操作)
- 尽可能覆盖用户操作
- 从不同的方法入手编写测试用例
-
等价类
- 等价类分为有效等价(满足预期需求的)/无效等价(不满足需求的,非法操作)
-
边界值
-
考虑到限制的边界是否符合预期效果,考虑到要测试越界,结果应该提示或报错
-
例如:需求要求限制字数显示1≤x≤20 着重测试输入1和20时的反应
-
-
判定表
- 两个字段存在组合时,测试要考虑合法的组合、非法数据(两个不匹配)
- 例如:选择城市/省份 选择四川-自贡为正确的组合,再选择四川-重庆不合法匹配是否会报错,或填写为空是什么结果
-
错误推断法
- 利用自己的经验判定常出错的部分,然后列出清单,再编写测试用例
-
测试用例设计原则
- 覆盖所有必选参数(只要是必填的必须每个都测试到,还要测试有的必选字段录入,有的必选字段不录入的情况)
- 组合可选参数(考虑到最简单能包含所有可选参数的可能性的用例)
- 参数边界值(考虑到边界值的重点测试)
- 越界参数(也要注意这种超出需求的越界测试)
- 枚举值(常量):例如性别等,固定可选择的值一定要考虑到,全覆盖到
- 录入空数据或者空格(看他的报错结果,是否和预期相同)
- 录入非法字符(特殊字符)@#¥%…………等
- 录入错误的数据(各种错误:格式错误、逻辑错误)
http与https介绍
http与https概念
- http是互联网上最广泛的的一种网络协议,用于从www服务器传输超文本到浏览器的传输协议,可以使浏览器更加高效,使网络传输减少
- http属于明文传输,优化方式可以通过数据传输时进行加密算法(例如转换成字符串)
- https是以安全为目标的http通道,等于是http的安全版
- https一般用于有加密内容(加密后的数据就需要解密)
http与https比较
- 二者端口号区别,http默认是80,;https默认是443
- https优点:https相比http更安全些,只是相比安全,但不保证绝对安全
- https缺点:效率相比更低,请求时间更长
软件测试工具
JMeter介绍
- 主要用于性能介绍
- 断言:让程序代替人工判断是否和预期效果一致
安装注意事项
- 安装成功后注意在根目录下指定文件更改编码类型(去掉字段#,把编码类型改为utf-8)
JMeter使用流程
- 创建测试计划-添加线程-线程组-添加取样器(http请求)-添加监听器-查看结果树-运行查看结果
- 填写请求时要注意填写名称,协议,服务器名称或ip,端口号,请求方式,路径,内容编码,和一些特定的相关参数。
JMeter中的参数化
- 动态的获取、设置生成数据
编写可被复用的测试脚本流程
- 打开jmeter(更改名称)保存
- 添加注释(例:实现参数化)
- 测试计划下添加线程组
- 线程组添加http请求-设置名称-协议(http/https)-设置ip或域名-设置端口号-请求方式(get/post)-填写路径-填写内容编码(utf-8)-复制消息体数据(api文档中的json串)-修改消息体数据测试数据-
- 测试计划-添加配置原件-添加http信息头管理器(固定写法 名称:Content-Type 值:application/json;charset=utf-8)
- 测试计划-添加查看结果树-执行前先启动本地资源/项目(项目目录下进入命令行调用-python run_server.py)-再运行结果树(可调整显示格式)
- 创建成功反馈(创建成功一条结果和测试数据)
关联脚本与数据文件
- 把测试数据文档复制到脚本文件夹中(因需求可自行放位置)
- 选中之前创建的脚本http请求-添加配置原件-csv数据文件设置
- csv文件设置填写-备注可根据需求填写
- 选中已保存好的测试数据文件
- 文件编码选择utf-8
- 设置变量名称-为测试数据每条测试字段取名,方便根据名字调用相应字段(例:xyid,xyname,yzname,kh)可根据需求随意取名
- 回到http请求-更改消息体数据-使用固定格式(${xyid}.......)填写更改设置的变量名
- 选中线程组-设置循环字数(35与测试数据条数相符合)
- 运行结果树
自动化测试(断言组件实现流程(天气预报接口))
- 新建测试计划(断言组件)-保存
- 测试计划-添加线程组
- 线程组添加-http请求-设置相关数据
- 测试计划-添加查看结果树
- 选定http请求-添加断言-响应断言-选择响应文本-equals(等价,仅仅)substring 是否包含(例:查看关键词北京是否包含在内)-通过时和平时没差别、未通过才会报错提示
判断实际结果是否符合预期
- 工具栏选择函数参数化
- 选择counter(计数器)-传参数true-生成函数调用格式
- 复制函数-粘贴在http请求需要显示的位置
- 再次运行结果树-最后生成编号
接口业务测试概念
- (除了单个接口测试外,还存在整套业务测试,可能就是多个接口,并且上个接口结果可能是下个接口需要的参数)
- 证书:token是用户身份标记(每个新用户都有一个唯一的token给用户-之后每次用户的请求都会携带此token)
- session服务器的存储空间;cookie客户存储空间
- 服务器与用户关系:一对多
- token图解
测试流程
测试1(查询信息,百度搜索关键词)
-
框架搭建
- 新建测试计划-添加线程组-添加取样器(两个http请求)一个查询所有学员信息另一个百度搜索-添加查看结果树-找到学院请求清单-填写相关信息-添加百度搜索相关信息- (保证一启动学生管理系统)
-
选中http请求查询所有信息-添加后置处理器-表达式提取器-填写引用名称(随意定义-myxyname)-填写正则表达式-复制需要字段模板(在响应结果中复制对应字段)-(.*?任意格式的字符串)-添加模板($1$)-匹配数字-缺省值(如果未匹配上任何数字就显示此结果)
-
选中http请求百度搜索-下方添加参数-wd=${myxyname}-运行结果树
测试2(登录收藏文章)
- 流程:访问黑马头条服务器,获取验证码;根据手机验证码完成登录;登录成功后收藏指定文章 操作流程
- 新建测试计划(接口业务测试黑马头条)-添加线程组-http请求获取短信验证码(在路径上填写自己测试手机号)—查看结果树(会提示短信发送成功)
- 在测试计划http请求添加http信息头
- 添加取样器http请求登录-在消息体数据提交json数据(手机号、验证码)-登录时注意把获取验证码接口暂时禁用
- 在http请求登录中添加正则表达式提取式
- 添加http请求收藏文章-设置消息体数据-收藏文章编号
- http请求收藏文章-添加http信息头管理器
- 运行结果树
性能测试概念
- 模拟上线前的各种正常/峰值的负载场景,看是否达标
性能测试作用
- 技术选型,项目立项初期(针对功能点使用不同的编程语言进行性能测试,判定选择哪种编程语言)
- 测试当前程序能支持的最大负载(怎么测试最大负载)
- 测试方法:(性能指标:测试过程中保证功能正常运行,多用户访问时控制在5s内)
- 创建100个虚拟用户访问时服务器不崩溃,不崩溃的情况下不断叠加用户,阶梯升压方式
- 发现程序中的性能瓶颈
- 预计能支持1000用户,实际只能达到100个用户,排查问题,更准确的去优化
- 提升用户体验
测试流程
测试1
- 创建测试计划(性能测试高并发)-线程组-取样器http请求-在线程组中设置线程数100(100个虚拟用户,可自行添加)
- 启动学生管理系统-测试计划添加查看结果树-http请求中添加定时器(同步定时器-可以让多个线程同时访问,实现并发)-设置组为100-运行结果树
- (为了避免程序挂起,可以设置超时时间,可以自动释放3000ms/3s)
- 在测试计划-添加监听器-汇总添加聚合报告-运行(方便查看响应时间/错误率)
测试2 QPS
Qps 查询率(每秒查询数 query per sencods)
- 新建测试计划-线程组-http请求-添加聚合报告
- 线程组添加循环次数300(循环次数*持续时间)
- http请求添加定时器 (常量吞吐定时器,设置每分钟取样器的次数)-设置(注意单位换算-换算分钟)
性能测试-分布式
- 场景:模拟虚拟用户量较大的情况
- 概述:多台测试机以集群的方式共同完成测试任务
- 优点:性能测试时,高效的完成测试任务(团结就是力量)
- 角色划分
- 控制机(制定任务下发任务,结果汇总)
- 执行机(接受任务,完成任务,反馈到控制机)
实现流程
- 控制机编写任务脚本(虚拟用户分配)
- 将脚本下发给执行机
- 执行机运行脚本
- 脚本运行结果返回给控制机
测试流程
- 添加测试计划(分布式)-线程组-取样器(http请求)-聚合报告
- 设置线程数(总的线程数除以执行机的台数)
- 选择导航栏运行-远程启动所有