测试开发 | 电商业务性能测试: Jmeter 参数化功能实现注册登录的数据驱动

1. 前置条件

此例使用的是 GitHub 上一个开源的电商项目 mall,需要的可以去 GitHub 上下载部署,有详细的部署教程:

GitHub地址:https://github.com/macrozheng/mall

部署教程:https://macrozheng.github.io/mall-learning/#/README

2. 场景抽离

首先我们需要对测试的场景进行抽离,明确场景的接口、参数和比例。通过查看API文档,我们抽离除了如下注册的业务流程:

总结如下:

  • 业务流程:验证码->注册->登录,
  • 接口比例:这三个接口场景的比例为1:1:1关系
  • 数据传递:获取的鉴权信息需保存后未后续的请求做数据支持

3.实操演示

3.1 IP + 端口的数据驱动

在每一个接口请求中,都需要输入请求的ip和端口,这样费事费力。因此jmeter提供了CSV Data Set Config来将数据从外部文件读取, HTTP Request Defaults设置请求默认值,这两种方法配合使用便可完成IP + 端口的数据驱动

CSV Data Set Config从外部文件读取数据

1、如下图位置选择

2、设置CSV Data Set Config

首先创建好需要导入的数据文件,这里需要的是 IP 和端口:

设置CSV Data Set Config

设置说明:

  • Filename:填入你需要导入的文件地址
  • File encoding:选择编码方式,特别是有中文的时候记得要选UTF-8
  • Variable Names:设置变量名,要和数据文件中的格式一一对应
  • Ignore first line:是否忽视第一行,有时候我们数据文件的第一行可能是个说明title,并不是我们实际需要的数据,这个时候就可以在此选择true,将其忽略
  • Delimiter(use '\t' for tab):如果你的数据文件的数据之间使用tab进行分割的,这里就填\t用来说明是tab分割,如果是用逗号,分割的,那么就直接填入逗号,即可

HTTP Request Defaults设置请求默认值

1、选择HTTP Request Defaults

2、设置HTTP Request Defaults参数化

将请求的ip和端口进行参数化,格式是${参数};参数要与CSV Data Set Config中设置的保持一致,这样设置好以后,后面所有的请求都可以不用再填写ip和端口了

3.2 前置处理器JSR223 PreProcessor

查看项目API文档,知道了获取验证码的接口需要传电话号码作为参数,而性能测试需要很多并发,所以电话号码肯定是通过参数传递进入,且不可重复;

为了解决上述问题,我们可以引入前置处理器JSR223 PreProcessor,他可以在其中写入Java代码运行,这样就很方便造数据了:

另外在login接口返回值需要获取token,将获取的token存入指定文件中,以备后面的请求使用

3.3 返回值获取传递

JSON Extractor

在上述接口中,会返回验证码用于注册;同样的在登录接口中会返回token用于鉴权;那么就可以利用JSON Extractor来完成

1、添加JSON Extractor

2、设置变量名和json路径

3.4 结果调试

有时候想看下脚本对不对,可以利用Debug Sampler来进行调试

可以看到所有的变量值,最终完成脚本调试,顺利通过。

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

相关推荐
进击的野人1 小时前
深入理解 Async/Await:现代 JavaScript 异步编程的优雅解决方案
javascript·面试·ecmascript 6
小欣加油2 小时前
leetcode 1018 可被5整除的二进制前缀
数据结构·c++·算法·leetcode·职场和发展
前端一课3 小时前
第 28 题:async / await 的原理是什么?为什么说它是 Promise 的语法糖?(详细版)
前端·面试
前端一课3 小时前
第 28 题:手写 async/await(Generator 自动执行器原理)
前端·面试
前端一课3 小时前
第 33 题:浏览器渲染流程(Reflow 重排、Repaint 重绘、Composite 合成)*
前端·面试
前端一课3 小时前
前端面试第 34 题:事件循环(Event Loop)—— 必考高频题
前端·面试
前端一课3 小时前
第 26 题:Vue2 和 Vue3 的响应式原理有什么区别?为什么 Vue3 要用 Proxy 替代 defineProperty?
前端·面试
前端一课3 小时前
第 30 题:模块化原理(CommonJS vs ESModule)
前端·面试
前端一课3 小时前
第 31 题:Tree Shaking 原理与常见失效原因(高频 + 难点 + 面试必考)
前端·面试