性能测试实战 30 讲
高楼
前 HP 高级性能专家,7DGroup 创始人
45941 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 37 讲
性能测试实战 30 讲
15
15
1.0x
00:00/00:00
登录|注册

08丨案例: 手把手教你编写最简单的性能脚本

TCP连接超时
长短连接的问题
添加断言
编写JMeter脚本
服务端代码逻辑说明
TCP连接超时
长短连接的问题
添加断言
编写JMeter脚本
服务端代码逻辑说明
思考题
TCP连接超时
长短连接的问题
添加断言
编写JMeter脚本
服务端代码逻辑说明
POST请求
GET请求
总结
TCP脚本
HTTP脚本
性能脚本编写
性能脚本编写知识关系脑图

该思维导图由 AI 生成,仅供参考

通常我们会遇到要手写脚本的时候,就要针对一些接口编写脚本。这时候,我们需要知道接口规范和后台的数据是什么。而有些性能测试工程师写脚本时,并不知道后端的逻辑,只知道实现脚本,事实上,只知道实现脚本是远远不够的。
在这一篇文章中,我不打算讲复杂的内容,只想针对新手写一步步的操作,描述最简单的脚本编写。如果你已经具有丰富的脚本编写经验,会觉得本文很简单。
我没有打算把 JMeter 的功能点一一罗列出来,作为一个性能测试的专栏,不写一下脚本的实现似乎不像个样子。在脚本实现中,我们最常用的协议就是 HTTP 和 TCP 了吧,所以在今天的内容里,我简单地说一下如何编写 HTTP 和 TCP 脚本,以应测试主题。
我先画个图说明一下。
这样的图做性能的人一定要知道,相信很多人也画的出来。
我们知道 HTTP 是应用层的协议之一,现在很多场景都在用它,并且是用的 HTTP1.1 的版本,对应的是 RFC2616,当然还有补充协议 RFC7231、6265。
HTTP 中只规定了传输的规则,规定了请求、响应、连接、方法、状态定义等。我们写脚本的时候,必须符合这些规则。比如为什么要在脚本中定义个 Header?Header 里为什么要那样写?这些在 RFC 中都说得明明白白了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了编写最简单的性能脚本的操作步骤,包括HTTP和TCP脚本的编写方法,重点讲解了JMeter脚本的创建过程。文章强调了业务成功需要根据业务逻辑来判断,并提出了加入断言的必要性。通过对Spring Boot示例的服务端代码逻辑说明和JMeter脚本编写过程的详细解释,读者可以快速了解并掌握编写最简单性能脚本的方法。此外,文章还介绍了如何手工编写TCP脚本以及添加断言的重要性。同时,文章还涉及了解决TCP连接超时的问题以及编写LoadRunner脚本的方法。总体而言,本文通过详细的操作步骤和示例代码,为读者提供了编写最简单性能脚本的实用指南。文章强调了业务逻辑对脚本编写的重要性,并提出了加入断言的必要性。通过对JMeter脚本的创建过程和Spring Boot示例的服务端代码逻辑说明,读者可以快速了解并掌握编写最简单性能脚本的方法。同时,文章还介绍了手工编写TCP脚本以及添加断言的重要性,以及解决TCP连接超时问题和编写LoadRunner脚本的方法。整体而言,本文为读者提供了编写最简单性能脚本的实用指南。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能测试实战 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(40)

  • 最新
  • 精选
  • 善行通
    感谢高老师无私分享,在刚开始学习性能测试的时候,一直不理解做脚本为什么要这样做,也报名参加过培训机构,也许培训机构的老师都不会,或者自己没有写过后端代码,更不会讲解后端怎么实现,还有调用关系,或者根本不想让学员知道,担心教会徒弟饿死师父。 就像老师说的:【自己写一些 demo,去了解一些逻辑,然后在排除问题的时候,就非常清楚了】 要是早早听到老师这样的课程,估计自己的水平能快速提高谢谢老师分析Jmeter调用后端简单逻辑【Jmeter-->controller--->interface--->service[业务实现层]-->Mappper-->DB】 GET请求对于springboot框架来说是通@RequestMapping(method = RequestMethod.GET)中的@GetMapping来处理,这是框架定义好的接口,关键是get执行的业务操作是什么; POST请求也是springboot框架来说是通@RequestMapping(method = PostMapping.GET)中的@PostMapping处理数据; 一般来说get是获取数据数据会在url上显示,post是提交数据,提交数据不会显示到url上, 而且Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节;理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力【Tomcat默认2M】;对数据请求频繁,数据不敏感且数据量在普通浏览器最小限定的2k范围内,这样的情况使用GET。其他地方使用POST 断言的作用是什么? 理解断言是为了校验请求是否正确,只要增加合理的断言,才可以做性能测试,如果不加断言就不知道业务请求是否正确,再加没有断言TPS会很平稳,对实际压测结果意义不大。 如何使用断言呢? 理解:在请求结束后的响应增加断言。

    作者回复: 理解的很深刻哦。

    2020-01-01
    3
    20
  • 律飛
    1.HTTP 的 GET 和 POST 请求,在后端处理中有什么不同? 由于spring的RequestParam注解接收的参数是来自于requestHeader中,即请求头,也就是在url中,格式为xxx?username=123&password=456,而RequestBody注解接收的参数则是来自于requestBody中,即请求体中。 因此如果为get请求时,后台接收参数的注解应该为RequestParam,如果为post请求时,则后台接收参数的注解就是为RequestBody。 2.断言的作用是什么?如何使用断言呢? 断言指的就是服务器端有一个业务成功的标识,会传递给客户端,客户端判断是否正常接收到了这个标识的过程。 应该用有业务含义的判断标识。需要对业务进行分析,选取合适的判断标识。 善行通已经说得很好了,画蛇添足一下。

    作者回复: 你也说的很好。

    2020-01-01
    12
  • 羊羊
    关于递增时间,文中提到“如果我们配置了 10 线程,这里配置为 1 秒,则是 10/1000=1 线程 /100ms”,是指压力机会每100ms发送一个请求么?是匀速发送请求?前面的文章中老师讲到“线性递增”,根据接口不同的响应时间,配置不同的递增幅度,对应到Jmeter是如何配置?

    作者回复: 是100ms增加一个线程。增加的线程会持续运行。 jmeter配置递增很容易呀。只要线程数、ramp-up period、duration就行了。

    2020-12-23
    5
  • [root@localhost ~]#
    高楼老师,你好,请问你用jmeter展示tps图标用的是什么插件?而我用网上下载的插件使用会大量报错最终导致jmeter卡死。错误内容是:Error o.a.j.t ListenerNotifier: Deteced problem in Listener Java.lang.NullPointer Exception: Null。请问这个该如何解决呢?多谢

    作者回复: 不需要插件。那个是html结果报告。仔细看看jmeter的report命令吧。

    2021-04-02
    2
    2
  • Geek_WHY
    高老师您好,麻烦打扰,我想问下您看我做的对不对: 对一种场景进行性能验证,验证系统在不同的硬件配置下,tps能达到多少。 我这边不确定是用阶梯性一点一点慢慢的加压,加压到一定的线程数,还是在一分钟内快速的加压到一定的线程数。 盼望回复,感谢~

    作者回复: 慢慢加压,不用快。

    2021-01-15
    2
  • 大QA
    高楼老师,请问压测环境要准备什么样的?测试环境和生产环境的服务器配置差异往往很大,在测试环境压测不一定能反应生产环境的问题。

    作者回复: 这个话题太大。通常我只能建议接近生产,不然就得做大量的数据采集分析,然后建模。

    2020-03-21
    2
  • 莫西 👫 小妞儿 👼 🎵
    高老师,添加断言的话,会影响性能测试结果么?比如会影响到响应时间么?

    作者回复: 不会,都是压力工具里判断的。

    2020-03-10
    2
    2
  • songyy
    思考题 - HTTP 的 GET 和 POST 请求,在后端处理中有什么不同? 其实后端处理,没有本质的不同。不同的是人们对于它的约定:GET的预期,是不进行数据修改;而POST,通常意味着创建新的数据。但实际上,后端也可以在GET的时候,进行数据修改 - 断言的作用是什么:断言可以用来判断,一个测试用例是否成功 如何使用断言呢:在收到返回结果后,对比结果是否和预期相符。就像写测试时候的断言(assertion)一样

    作者回复: 理解的很对。

    2020-01-13
    2
  • Geek_5860ac
    “如果我们配置了 100 线程,这里配置为 10 秒,那么就是 100/(10s*1000ms)=1 线程 /10ms”这个地方不明白,怎么算都是1线程/ 100ms啊,请老师指正

    作者回复: 少了一个零。哈,马上让编辑小美女加上。

    2020-01-10
    2
  • 月亮和六便士
    老师,我还有问题想问:前面的文章中提到过,1. 什么叫压力补偿,压力补偿的作用是什么? 2. 还有为什么要动态扩展? 比如内存不够了,我们不应该找到谁占用了内存吗? 3.每次测试前需要清理缓存吗?比如我跑一轮脚本 就需要把redis 缓存清一下吗 ?

    作者回复: 1. 就是在场景执行的过程中,发现场景产生的压力和生产上比例不一致,或者有中间需要的增加的第三方压力。就需要在场景执行过程中再增加新的线程或者压力机。 2. 动态扩展是验证线上的能力。如果业务流量突增了。就需要动态扩展哇。 3. 看机制。如果不是预热类型的。 可以在每次跑之前清一下。

    2020-01-02
    2
收起评论
显示
设置
留言
40
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部