很久没更新博客了,荒废了很久了,今天更新一下博客,主要记录一下子最近遇到的问题和解决方法:blonde_woman:
这篇文章主要记录的是jmeter批量跑接口中遇到的各种疑难,主要涉及到的问题如下
运行的接口有多个(>=2)其中有一个前提是必须登录才能进行其他接口的操作,但是登录不想每次都运行,该怎么解决呢,请往下看~
批量执行接口的过程中,需要不同的参数运行接口,使用到了csv参数化
接口结束之后,需要对响应结果中的一部分信息保留进行数据对比
进入正题,先来解决第一个问题,登录接口只需要运行一次即可,然后其他接口可以使用登录响应结果中的token值进行接口操作。这里jmeter提供了setUp线程可以解决这个问题。
首先在jmeter计划中添加一个线程setUp,把登录接口放置到setUp线程中,然后使用json提取器获取到token信息,并把token信息保存为jmeter变量,如图
登录的响应结果信息如下
{ "access_token":"dc1dcb1f-725e-4b17-9f47-e1d97477ba11", "token_type":"bearer", "refresh_token":"307cee12-973e-44af-8022-63949b2c3bd5", "expires_in":899, "scope":"READ WRITE" }这里主要使用json提取器来获取token的变量信息
根据响应结果,使用json提取器,主要用$.access_token提取变量。
然后使用Beanshell后置处理器,将变量保存为jmeter系统变量,代码如下
${__setProperty(all_token,${access_token},false)}如图
跨线程的其他线程组怎么使用这个变量access_token呢,可以使用http信息头管理器来实现,在http信息头管理器中,添加Authorization来实现,如图
Authorization Bearer ${__property(all_token,,)}至此第一个问题已经解决了,那么接下来就是第二个接口的参数化操作了。
这里主要使用了csv进行参数化
csv文本参数信息如图
参数化文本已经准备好了,接下来就是在jmeter中添加csv数据文件设置,如图
说明:
文件名称:参数化的csv文件
文件编码:默认可以不填,这里因为有中文,所以使用gb2312,可以根据实际情况设置utf-8或其他
变量名称:这里设置的变量名称在接口中会使用这个变量信息,所以一定要慎重
如图上所标识,这里的变量名称必须一致。
到这里,已经完成了csv的参数化,那么我们如果获取响应的结果呢?
先来看一下相应的结果的结构是什么吧~
[ { "properties":{ "cal_name":"云耳", "e_type":"food", "end_index":12, "food_id":8457, "kcal_unit_weight":37.95, "name":"云耳", "start_index":10, "time_stamp":1566544101 }, "sub_properties":{ "grams":30, "is_default":true, "quantifier_id":57, "quantity":1, "unit":"朵" }, "type":"Entity" }, { "properties":{ "cal_name":"黑木耳", "e_type":"food", "end_index":9, "food_id":8456, "kcal_unit_weight":37.95, "name":"黑木耳", "start_index":6, "time_stamp":1566544101 }, "sub_properties":{ "grams":30, "is_default":true, "quantifier_id":57, "quantity":1, "unit":"朵" }, "type":"Entity" }, { "properties":{ "cal_name":"木耳", "e_type":"food", "end_index":2, "food_id":5593, "kcal_unit_weight":37.95, "name":"木耳", "start_index":0, "time_stamp":1566544101 }, "sub_properties":{ "grams":30, "is_default":true, "quantifier_id":57, "quantity":1, "unit":"朵" }, "type":"Entity" } ]当然还可以使用json提取器,来获取变量信息的,使用$[*].properties.cal_name;$[*].properties.name,两个变量之前使用;分开,如图所示
根据之前的使用BeanShell断言判断请求返回的Json相应结果(不同json格式整理)了解到可以使用BeanShell来获取响应结果的变量。
好了,那么接下来就是如何保保存响应结果中需要的信息到csv文本中了。