Gatling教程系列一实现GET请求动态参数(三)

NoSQL专家
• 阅读 13694

一般在测试中我们都希望能动态的传递参数进行请求,这样才更加贴近实际。本篇主要针对动态参数请求的脚本编写进行介绍。

Gatling参数处理

Gatling对参数的处理称为Feeder[供料器],支持主要有:

1.数组

val feeder = Array(
  Map("foo" -> "foo1", "bar" -> "bar1"),
  Map("foo" -> "foo2", "bar" -> "bar2"),
  Map("foo" -> "foo3", "bar" -> "bar3")).random

参数选取的形式,下面几个参数方式都可适用

queue // 顺序调用,加入我们循环执行请求100次,但是参数只有5个,当5个跑完后gatling测试就会报错终止
random // 随机调用
circular // 顺序循环调用
Gatling教程系列一实现GET请求动态参数(三)

2.CSV

val csvFeeder = csv("foo.csv")//文件路径在 %Gatling_Home%/user-files/data/

3.json

val jsonFileFeeder = jsonFile("foo.json")
//json的形式:
[
  {
    "id":19434,
    "foo":1
  },
  {
    "id":19435,
    "foo":2
  }
]

4.JDBC

jdbcFeeder("databaseUrl", "username", "password", "SELECT * FROM users")

5.redis

本篇主要针对前两种进行介绍,其它的我也没有用过,暂时就不卖了,可参看官方文档http://gatling.io/docs/2.1.7/session/feeder.html#feeder

参数Code实战

新建一个Scala类,注意继承Simulation。直接上代码了

import io.gatling.core.Predef._
import io.gatling.core.scenario.Simulation
import io.gatling.http.Predef._
import scala.concurrent.duration._
/**
  * region请求接口测试
  * Created by 青芒 on 16/4/21.
  */
class DynamicTest extends Simulation {
  val httpConf = http.baseURL("http://127.0.0.1:7001/test")
  //地区 feeder
  val regionFeeder = csv("region.csv").random
  //数组形式
  val mapTypeFeeder = Array(
    Map("type" -> ""),
    Map("type" -> "id_to_name"),
    Map("type" -> "name_to_id")).random
  //设置请求地址
  val regionRequest =
    exec(http("region_map").get("/region/map/get"))
      //加载mapType feeder
      .feed(mapTypeFeeder)
      //执行请求, feeder里key=type, 在下面可以直接使用${type}
      .exec(http("province_map").get("/region/provinces?mType=${type}"))
      //加载地区 feeder
      .feed(regionFeeder)
      //region.csv里title含有provinceId和cityId,所以请求中直接引用${cityId}/${provinceId}
      .exec(http("county_map").get("/region/countties/map?mType=${type}&cityId=${cityId}&provinceId=${provinceId}"))
  //声明scenario name=dynamic_test
  val scn = scenario("dynamic_test")
        .exec(during(180){ regionRequest
        })
  //在2秒内平滑启动150个线程(具体多少秒启动多少线程大家自己评估哈,我这里瞎写的)
  setUp(scn.inject(rampUsers(150) over (2 seconds)).protocols(httpConf))
}

我的csv文件给大家截个图
Gatling教程系列一实现GET请求动态参数(三)
Gatling教程系列一实现GET请求动态参数(三)

小贴士:在发起一次请求的时候我们用到csv多个字段,入参的值是当前随机的同一行。
举个例子,当我请求/region/countties/map?mType=${type}&cityId=${cityId}&provinceId=${provinceId},刚好随机或者顺序到 北京市,北京市,朝阳区的时候,那么cityeId,provinceId也都是该行的,不会说每次取变量都再随机一次。

最后

参数的传入已经介绍完毕,后面的json,jdbc,redis等的处理详细页大同小异,如果哪位朋友遇到什么问题可以一起交流下,或者和我分享下^_^。

点赞
收藏
评论区
推荐文章
徐小夕 徐小夕
5年前
《前端实战总结》如何在不刷新页面的情况下改变URL
由于公司最近有个需求是想让我们的get请求的参数都直接显示在浏览器url上,这样我们就可以直接通过复制url来显示对应的界面数据了。背景介绍由于我们常用的http请求一般是基于XHR对象的实现或者fetch实现,这种请求操作并不会触发浏览器url的变化,这样虽然也能正常请求数据并渲染到页面,但是如果用户在当前页面操作了某个get请求并得到了某条数据,想
Easter79 Easter79
4年前
vue axios get请求参数为json对象 而非字符串形式
axiosget请求方式传递给后台的参数都是字符串下形式,无法传递json对象或数组对象等post请求方式则可以实现,但若后台接口要求必须用get方式传递对象给后台,需要装插件
Easter79 Easter79
4年前
springMVC笔记系列(8)——RequestParam注解
前面的文章介绍过注解@PathVariable,它能够为Rest风格的URL用占位符的方式传递一个参数,但是这个参数并不是真正意义上的请求参数。请求参数怎么处理是本文的主要内容。SpringMVC通过分析处理方法的签名,将HTTP请求信息绑定到处理方法的相应人参中。SpringMVC对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任
Wesley13 Wesley13
4年前
ThinkPHP5 ajax使用
一句话总结:页面端使用$.get()方法传递ajax请求,服务器端判断是不是ajax请求,是的话接受参数,进行逻辑处理之后向客户端返回值。1、页面端如何传递ajax请求?$.get()方法即可22<script23$('my_ajax_test').click(function(){24
Easter79 Easter79
4年前
SpringMVC(五):@RequestMapping下使用@RequestParam绑定请求参数值
在处理方法入参使用@RequestParam可以把请求参数传递给请求方法,@RequestParam包含的属性值:\value:参数名称\required:是否必须,默认为true,表示请求参数中必须包含对应的参数,否则抛出异常。\defaultValue:当请求参数缺少或者有请求参数但值为空时,值采用该设置值。示
Stella981 Stella981
4年前
POST请求的query参数和body参数共存怎么处理?
今天发布一个接口被前端同事咨询怎么传参,特此记录一下:!(https://static.oschina.net/uploads/space/2018/0227/100723_i1oh_999023.png)!(https://static.oschina.net/uploads/space/2018/0227/100808_xNdZ_9990
Wesley13 Wesley13
4年前
Loadrunner测试json接口实例以及 web_custom_request 函数详解
1\.loadrunnerjson说明使用lr测试json接口,向服务端发送json格式请求,接收处理返回响应数据。主要用到函数:  1)web\_custom\_request  2)web\_reg\_save\_param(此函数常用户处理动态参数,该方法在LoadRunner中
Wesley13 Wesley13
4年前
Java乱码
1.Javascript传参乱码:在浏览器端对要传递的中文参数进行编码处理.代码如下:xmlhttp.open("POST",url,true);//请求参数初始化xmlhttp.setRequestHeader("ContentType","application/xwwwformurlencoded");//因为请求方式为PO
liam liam
2年前
优化你的 JavaScript 项目:Axios request 封装指南
在开发中,为了提高效率,通常对进行封装,简化了请求的发送和对响应的处理。同时,统一错误处理机制有助于维护代码的清晰和一致性。本文介绍了一些高效封装Axios请求的方法。封装理念通过创建一个请求函数,我们可以隐藏Axios的直接调用,将请求的配置作为参数传入
liam liam
1年前
Postman 请求参数传递技巧:详解 Query、Path 和 Body 的用法
作为一个功能强大的工具,极大地简化了API测试和调试的过程,提供了发送请求和检查响应的直接方法。本文将着重介绍如何在Postman中高效地处理请求参数,以提高API测试和开发的便利性。解析请求参数首先,我们需要明白什么是请求参数。简单来说,请求参数是传递给