Gatling实战(一)
对Gatling早有耳闻,据说比jmeter的性能要好很多,我第一次试用的时候因为本机安装的jdk版本不对无法跑起来,试用失败后,因为没时间就一直没继续研究了。我当时是去java官网下载最新的jdk覆盖安装后仍然无法跑起来(这有点坑爹),所以大家使用Gatling前如果发现它跑不起来,则最好先卸载本机的jdk再安装新的。
今天抽时间找一台新机试用了一下,发现还是蛮有趣的,我只用了它的http(get、post)功能,发现和python的httplib用法有点像。Gatling是个绿色软件,网上介绍已经很多了,解压后找到“\user-files\simulations”,这里面就是测试用例了,我找了一个自带的例子,直接修改其代码来演示了,它的代码是scala,我没用过,不过看还是能看得明白的,而且貌似没有缩进要求,这点爽,呵呵。用例代码及注释如下
package computerdatabase import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._ class BasicSimulation extends Simulation { val httpConf = http //表示测试的数据格式以及被测目标等,设置压力的时候会用到
.baseURL("http://192.168.0.11") // 因为这个,我觉得和python的httplib用法有点类似
.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") // 数据包头,都是常见的,这里不赘述
.doNotTrackHeader("1")
.acceptLanguageHeader("en-US,en;q=0.5")
.acceptEncodingHeader("gzip, deflate")//我的用例不需要gzip
.userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0") val headers_1 = Map("Content-Type" -> "application/x-www-form-urlencoded") // 表示数据内容格式,可以定义多个,方便不同的用例请求使用,不过建议还是一个接口用例用独立一个文件来写吧
val headers_2 = Map("Content-Type" -> "multipart/form-data; boundary=----------------------------2bb6caed7d98") val scn = scenario("Scenario Name") // 场景,有点像python的测试集或者jmeter的线程组,一个用例可以有多个场景的,相应的要对每个场景设置不同的压力
.exec(
http("get's example") // GET请求例子,http只是起到一个声明(命名)的作用
.get("/api/heartbeat.json?mid=2096d4f158cb4d41a56592c816365786&ver=1.0")
)
//.pause(7) // Note that Gatling has recorded real time pauses,暂时没有试用 .exec(
http("post's example") // POST请求例子
.post("/api/getconf.json?mid=ebcd32d5f68e404db1ccc8ff2dacb360&ver=1.0")
.headers(headers_1)
.body(StringBody("""{
"audit_control_list" : [],
"ui" : [],
"ws" : [
"base_setting"
],
"xp_fix" : []
}""")).asJSON
//body 我当前项目中最常用的参数,用"""...."""这样body内的字符串可以换行,其中换行符实际是“\n”
//-------------
//.queryParam("name", "Beautiful Computer")//queryParam的效果等同于增加了URL的参数而已,即“POST /api/getconf.json?mid=ebcd32d5f68e404db1ccc8ff2dacb360&ver=1.0&name=Beautiful%20Computer”
//-------------
//.formParam("name", "Beautiful Computer") //formParam的例子,官方的,没什么特别
//.formParam("introduced", "2012-05-30") //如果这样连续写两行formParam,实际效果等于post了这个数据“name=Beautiful+Computer&introduced=2012-05-30”,空格居然是个+号,无语
) setUp(scn.inject(atOnceUsers(1)).protocols(httpConf))
}
注意如果用例中有中文字符则用例文件得改为UTF8编码。
没用过recorder,网上说是用来录制脚本的,我认为如果不是做界面测试尽量不要用录制方法,无论是它还是loadder runner,因为会有太多无关的代码被录制,影响效率。
后面我将继续介绍它的加压和变量使用等等。例如用某个随机数代替其中的某个请求参数。
Gatling实战(一)的更多相关文章
- Gatling实战(二)
在上一篇实战讲解了Gatling的用例,不过还没涉及到性能方面的内容,其实用例中的最后一句就和性能有关了 setUp(scn.inject(atOnceUsers(1)).protocols(http ...
- Gatling实战(三)
无论是性能测试还是自动化测试,有一个很重要的点就是变量(参数化),因为真实环境是很少同时产生并发很高而且所有参数都一模一样的请求的,就算有这样的接口,开发肯定用缓存来挡了,这种一般不会是瓶颈,真正瓶颈 ...
- SSH实战 · 唯唯乐购项目(上)
前台需求分析 一:用户模块 注册 前台JS校验 使用AJAX完成对用户名(邮箱)的异步校验 后台Struts2校验 验证码 发送激活邮件 将用户信息存入到数据库 激活 点击激活邮件中的链接完成激活 根 ...
- GitHub实战系列汇总篇
基础: 1.GitHub实战系列~1.环境部署+创建第一个文件 2015-12-9 http://www.cnblogs.com/dunitian/p/5034624.html 2.GitHub实战系 ...
- MySQL 系列(四)主从复制、备份恢复方案生产环境实战
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- 给缺少Python项目实战经验的人
我们在学习过程中最容易犯的一个错误就是:看的多动手的少,特别是对于一些项目的开发学习就更少了! 没有一个完整的项目开发过程,是不会对整个开发流程以及理论知识有牢固的认知的,对于怎样将所学的理论知识应用 ...
- asp.net core 实战之 redis 负载均衡和"高可用"实现
1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的"高可用"实现, 呵呵双引号的"高可用"并不是 ...
- Linux实战教学笔记08:Linux 文件的属性(上半部分)
第八节 Linux 文件的属性(上半部分) 标签(空格分隔):Linux实战教学笔记 第1章 Linux中的文件 1.1 文件属性概述(ls -lhi) linux里一切皆文件 Linux系统中的文件 ...
随机推荐
- 容器—stack
c++ stl栈stack介绍 C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构. c++ stl栈stack的头文件 ...
- [daily][emacs][go] 配置emacs go-mode的编辑环境以及环境变量问题
1. 安装go 安装go-mode 使用emacs编辑go代码的时候,你需要有正常可运行的go环境. 并且有emacs的go-mode package https://www.emacswiki.or ...
- Nginx(一)-windows下的安装配置
第一步 下载 官网下载地址 因为只是测试这里选择最新版本1.13.9 下载完成得到zip压缩包 解压后得到如下目录 第二步 启动nginx 注意不要直接双击nginx.exe,这样会导致修改配置后重 ...
- MongoDB - 2
Aggregation Framework: $project: a document stream by renaming, adding, or removing fields #alter Da ...
- 洛谷P4640 王之财宝 [BJWC2008] 数论
正解:容斥+Lucas+组合数学 解题报告: 传送门! 和上一篇题解的题差不多,,,双倍经验趴大概算 还是说下还是有点儿区别的来着$QwQ$ 两个小差别分别港下$QwQ$ 首先有$m-n$件是无穷个的 ...
- Git常用功能记录
1. git查看某个文件的修改历史 git log --pretty 然后使用下面的命令可列出文件的所有改动历史,注意,这里着眼于具体的一个文件,而不是git库,如果是库,那改动可多了去了- git ...
- iOS Version和Build的区别
iOS开发中,会面对一个问题,Version和Build的区别.这两种均是版本号,但是在开发中还是有一定的区别,而且用处很大. Version 是版本号,在info.plist中对应的key是 CFB ...
- 10个Python基础练习项目,你可能不会想到练手教程还这么有趣
美国20世纪最重要的实用主义哲学家约翰·杜威提出一个学习方法,叫做:Learning By Doing,在实践中精进.胡适.陶行知.张伯苓.蒋梦麟等都曾是他的学生,杜威的哲学也影响了蔡元培.晏阳初等人 ...
- 如何防止自己网站的图片被其他网站所盗用,从而导致自己网站流量的损失【apache篇】
站图片被其他网站盗用的问题我想在业务逻辑代码上解决恐怕是有点困难的. 而apache上只需要简单的配置就可以解决这个问题. 解决方法: 1.确定你的apache加载了mod_setenvif模块(li ...
- linux----------启动network的时候报错Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.
1.仔细阅读上面的话,意思是让你执行 journalctl -xe 查看更详细的日志. 2.我当时导致这个情况的原因是因为,虚拟机加载的文件被我换了位置,导致没加载到最原始的centos包.关闭虚拟 ...