本次记录首次使用Jmeter设计Web接口测试的过程,相关设置参考自官方文档
,Jmeter版本为当前最新版本5.2.1。
1. 首先介绍一下背景
看到这篇文章的应该已经知道JMeter是做什么的,一款压测工具。功能强大,性能优异,诸多优点不再赘述。这里介绍几点基本概念,便于读者对Jmeter在Web接口测试的使用有个大致全面的了解。
说明:本文只是作为建立最基本的Web接口测试计划,并不是全面探讨JMeter所有功能的,所以涉及的操作也只是为了Web接口测试能够运行。本文中尽量使用官方文档中的概念,如果描述不清或有误,请留言讨论,或自行查阅官方文档。
使用JMeter我们是用来建立测试计划,JMeter中以测试计划(test plan)为构建测试的基本单位,每个界面中只能显示一个测试计划,我们暂且将一个项目的测试都放到一个计划中。一个测试计划中会有很多条测试流程,JMeter中流程对应的就是线程组(Thread Group)。线程组是可以设置很多属性的,

流程之间的顺序是可以互不干扰的,当然也可以是顺序执行的。每个流程之内的步骤顺序执行的。例如:登录->查询->下单->发货->收货->评价->商家回复。登录>收货>登出。 流程可长可短。
流程中关键的步骤,登录/查询等都是一个个http(s)请求,这个在JMeter中对应的是采样器中的Http请求。
而每个请求的请求参数、类型、请求头、cookie等是不一样的。这些在JMeter中可以使用配置元件来设置。可以添加多个,如果有多个配置,后面的会覆盖前面的。
在每个请求前后可能还要进行参数的处理,JMeter中提供了前置处理器(Pre Processors)和后置处理器(Post Processors)来完成这些操作。前置处理器中常用的就是 JSR223前置处理器,这个处理器是用来替换BeanShell PreProcessors的。官方文档中有如下建议,因此我们使用JSR223处理器来执行脚本。脚本语言为groovy。
Since JMeter 3.1, we advise switching from BeanShell to JSR223 Test Elements (see JSR223 section below for more details), and switching from __Beanshell function to __groovy function.
从JMeter 3.1开始,我们建议从BeanShell切换到JSR223测试元素(有关更多详细信息,请参见下面的JSR223部分),并从__Beanshell函数切换到__groovy函数。
这里可以执行脚本来设置JMeter属性和变量等。而后置处理器常用的有JSON提取器(JSON Extractor)、正则表达式提取器(Regular Expression Extractor)、JSR223后置处理器等。
在设置值的过程中会发现可能很多请求很有相同的请求头参数,token等。这个在JMeter中可以使用JMeter属性(JMeter properties)和JMeter变量(JMeter variables)
来统一储存和使用。在组件中使用${USER}来引用变量的值,在脚本中则使用来设置和获取用户变量。
vars.get("HOST");
vars.put("MSG","Successful");
官方文档中这么说:
Some test plans need to use different values for different users/threads. For example, you might want to test a sequence that requires a unique login for each user. This is easy to achieve with the facilities provided by JMeter.翻译过来:一些测试计划需要针对不同的用户/线程使用不同的值。例如,您可能需要测试一个序列,该序列要求每个用户都具有唯一的登录名。使用JMeter提供的功能很容易实现。
例如:使用csv文件存储用户名和密码。使用配置元件中的CSV Data Set Config读取并保存为JMeter变量
JMeter variables are local to a thread, but can be used by all test elements (not just Beanshell).
中文:JMeter变量是线程本地的,但可以用于所有测试元素(不仅限于Beanshell)。
共享变量 如果想在线程组之前共享变量可以使用JMeter Properties储存。
If you need to share variables between threads, then JMeter properties can be used:
如果需要在线程之间共享变量,则可以使用JMeter属性
请求外层可以添加条件判断,循环执行等,JMeter提供逻辑控制器实现(Logic Controller)。
以上就是JMeter的基本用法,使用以上组件即可编排常规的Web接口测试计划。
2. 下载运行
在官方网站
上下载二进制文件包,
解压后,运行bin/jmeter.bat 可以直接运行GUI界面程序。默认在此之前系统已经设置好了jdk相关环境变量,如果没有请自行百度jdk安装及环境变量设置。
注意:解压的目录不要包含空格和中文,否则影响后续使用。官方文档中有说明“There can be problems (especially with client-server mode) if the directory path contains any spaces.
中文:如果目录路径包含任何空格,则可能会出现问题(尤其是在客户端-服务器模式下)。” 虽然没有说中文问题(毕竟人家是英语国家开发的),但在使用过程中发现在首次创建使用模板时会出错。
3. 举个栗子
3.1 从模板创建测试计划
以下的步骤仅保证使用的连续性,不保证实际数据的连续性。图片中所填写的值都是示例,组合在一起并不能实际运行,毕竟这是测试计划,最终需要依赖具体的项目的,请谅解。当然在最后我会将最终的成果截图展示,可以比照着建立你自己的测试计划。
从模板创建测试计划不是必须的但是如果工作中需要频繁创建的话,使用模板是个不错的选择。除了默认的一些模板外,JMeter也支持自定义模板。本次测试使用Advanced Web Test Plan。

选择图中小图标或菜单 File → Templates…后会弹出文本框,在下拉列表中可以选择具体的模板。

创建完后是这个样子:

根据前文,我们知道这里在测试计划最前面创建了5个配置元件(Config Element) ,分别是:
- HTTP Request Defaults:用来为之前的http请求设置默认参数。
红框对应的值分别为:协议、主机(host)、端口、路径、字符集编码。

- User Defined Variables:用户定义的变量。储存在
vars中。可以通过${host}取出host属性的值或者在脚本中vars.get(”host“)取出。在配置元件中可以使用${}引用这里定义的变量。

- HTTP Cookie Manager:管理cookie。一般登录凭证依赖cookie的需要使用。由于我们项目仅在请求头中加token,需要这个,所以可以删除。
这里提一点,所有的组件都是可以随时禁用启用的,也就是说想临时改变流程中的某些步骤,不用删除。禁用之后就不再生效。

- HTTP Header Manager:请求头管理,这里默认有5个值,我们可以添加需要的值。

- Login Data: CSV Data Set Config,读取csv文件中保存的用户密码。路径可以使用前面的用户自定义变量中的值。

下面是个一个线程组:这里模拟的是用户登录,这里也有一个请求参数元件,设置此流程下的参数。

流程为:首页(HomePage)->THinkTIme(模拟停留页面时间)->Changes请求->THinkTIme(模拟停留页面时间)->BugDetailPage请求->Login登录(默认登录请求组件是禁用状态)。

最后在View Results Tree中查看执行结果

以下截图展示我自己实际写的一个例子吧。
好吧,刚刚我发现我之前写的例子因为没有改名称被刚刚为了演示新创建的测试计划覆盖了。。。
重新写。。。
下面是完整测试计划的截图。












上图就是我创建的小例子的所有结构。看了前面的文章应该能看懂。有问题请留言。
本文介绍了如何使用JMeter进行Web接口测试,包括测试计划的创建、线程组设置、配置元件的应用,如HTTP请求默认参数、用户定义变量、HTTP Header Manager等。通过实例展示了从模板创建测试计划的过程,强调了JMeter在接口测试中的基本用法和组件功能。


1万+

被折叠的 条评论
为什么被折叠?



