性能测试用例编写:
根据测试点逐条进行细化:
· 性能测试数据,有明确要求,需要达到一定的业务量
· 从接口维度来描述测试步骤
· 如果两个接口强绑定(结算、下订单),放在一个用例中间测试
性能测试脚本开发
常用的测试元件
线程组
线程组是任何测试计划的起点,所有的逻辑控制器和采样器都必须放在线程组下。其他的测试元件(例如监听器)可以直接放在测试计划下,这些测试元件对所有的线程组都生效。
每一个JMeter线程都会完成的执行测试计划,而且它们之间都是完全独立运行的。这种多线程机制被用来模拟服务器应用的并发连接
2、控制器
JMeter有两种类型的控制器:采样器和逻辑控制器,二者结合起来驱动了测试进程。采样器用来向服务器发送请求。逻辑控制器用来控制JMeter的测试逻辑,特别是何时发送请求。逻辑控制器可以改变其子测试元件的请求执行顺序
3、监听器
监听器提供了对JMeter在测试期间收集到的信息的访问方法
所有监听器都保存相同的数据,区别是展示方法不同
监听器可以在测试的任何地方添加,它们仅收集测试树中相同或者更低级别测试元件的数据
4、定时器
默认情况下,jmeter线程在发送请求之间没有间隙。可以为线程组添加定时器,设定请求之间应该间隔多长时间。
定时器会让作用域内的每一个采样器都在执行前等待一个固定时长。如果为线程组添加了多个定时器,那么jmeter会将这些定时器的时长叠加起来,共同影响作用域范围内的采样器。
5、断言
断言可以检查从服务器获取的响应内容。判断响应是否正确。
断言会影响作用域内的所有采样器,如果只影响一个采样器,可以将这个断言作为采样器的子项
查看断言结果可以添加断言结果监听器
失败的断言可以在“查看结果树”和“用表格查看结果”两种监听器中显示。在“Summary Report”和“聚合报告”中还回以错误百分率的形式统计
6、配置元件
配置元件与采样器关联很紧密,可以添加或修改请求
配置元件只对其所在测试分支有效
7、前置处理器
前置处理器会在采样器发送请求之前做一些特殊操作
如果前置处理器在某个采样器下,那就只在该采样器运行前执行
一般用于修改采样器的某些设置或更新某些变量的值
8、后置处理器
后置处理器会在采样器发送请求之后做一些操作。
如果后置处理器在某个采样器下,那就只在该采样器运行后执行
一般用于处理服务器的响应数据,特别是服务器响应中提取数据
编写脚本的要点:
JMeter脚本的基本结构:
- 创建测试用例结构
- 设置HTTP请求默认值
- 用户定义的变量
- 添加监听器-察看结果树
- 添加监听器-聚合报告
单接口测试脚本:
(1)登录脚本
· 添加HTTP请求默认值:设置HTTP请求中的默认部分(协议、域名、端口、编码格式)
· 添加HTTP信息头管理,设置HTTP请求的头域
· 添加线程组 - 登录
· 添加HTTP请求 - 登录,填写路径和请求参数
· 在HTTP请求下添加断言:
· 如果做接口测试,必须断言 响应中的业务数据,可以加上 状态码和描述信息
· 如果做性能测试,可以只 添加状态码和描述信息 断言
(2)进入首页、搜索商品、获取商品详情
进入首页:
· 请求:
· 断言:状态码、errmsg
搜索商品:
· 请求:
断言:
· 状态码、errmsg
· 如果是接口测试脚本,必须针对响应中的商品数量进行断言(数据库)
获取商品详情:
· 请求:
断言:
· 状态码、errmsg
· 如果是接口测试脚本,需要针对响应中的商品的详细数据进行对比(数据库)
(3)加入购物车的脚本
· 添加请求1:登录
· 添加JSON提取器,提取token
· 将token设置在HTTP信息头管理器中
· 添加请求2:加入购物车
添加断言:
· 状态码、errmsg
· 如果是接口测试脚本, 需要再查询我的购物车,检查我的购物车返回的数据是否与加入购物车返回的数据一致
(4)查看我的购物车、结算下订单、查看我的订单
查看我的购物车:
· 请求:先发送登录请求,提取token信息,添加查看购物车请求,将token信息赋值为X-litemallToken头域,填写请求路径和参数
响应:
· 状态码、errmsg
· 如果脚本为接口测试脚本,需要断言响应报文中的购物车中的商品总数量或者商品总价值
提交订单:
· 请求:
(1)先发送登录请求,提取token信息,
(2)添加结算请求,将token信息赋值为X- litemall-Token头域,填写请求路径和参数
(3)添加下订单请求,将token信息赋值为X-litemall- Token头域,填写请求路径和参数(注意地址ID必须与用户ID匹配)
· 响应: 状态码、errmsg
· 如果脚本为接口测试脚本,需要断言响应报文中的订单数据,与数据库中订单表中我的订单数 量一致
业务流程的测试脚本:
· 将业务流程中的所有单接口的脚本组装在一起
` 注意所有的脚本组装在一起时,数据是否一致