午休时间再来记一记,嗯。。回顾着使用Jmeter的历程,想着日常都会用到的一些功能、一些组件;敲定了本篇的主题----------是的、脚本优化。

  说起脚本优化,为什么要优化?又怎么优化?是个永恒的话题。因为毕竟每个人的精力不同、业务不同、需要不同;但是可以肯定的是,但凡有做自动化之类(骚操作),那么便离不开一个概念。什么呢?-------脚本与数据分离

  何谓“脚本与数据分离”?

  所谓脚本与数据分离,可以举一个简单例子,2016年,具体不清楚是什么时间,在逛微博的时候,看到德国的一条杀鸡流水生产线,以一小时杀5000多只鸡的速度而闻名(具体是不是世界第一,就不纠结了,只是举个例子),而工作人员只需要在生产线的开始阶段将活鸡扔进去,直接就可以去流水线的结束段收获成果,质量是非常之高,活鸡进去,出来的都是一块一块的鸡腿、鸡脖子、鸡头、鸡爪(当然是洗干净的,哈哈);OK,回到本主题,脚本与数据分离也是这个道理,流水线我不动,至于它是怎么工作的,提前设计好就OK,只需要扔原料即可,因此,此处的脚本便可以理解成流水线、而数据源便可以理解成鸡啦。怎么动数据无所谓,流水线(脚本)都是按照设计来进行执行的(哈哈、可能举的例子有点抽象,但是大概意思明白就OK)。

  当然,现今,脚本与数据进行分离已经成为自动化的基本要求;除此之外,还有一个“业务与脚本分离”,这个概念以后再记。

  那么Jmeter如何实现“脚本与数据分离”呢?

  Jmeter经过这么多年的发展,丰富的组件完全可以满足此要求。

  OK,还是百度的例子!

  

  可以看到,我模拟了一个参数user并传入123进行请求;

  

  请求中user参数以及传入的123是发过去了,暂时忽略请求的成功与失败。

  那么,我再添加一个请求,baidu--首页--2;给user的参数传入321;

  

  其他的协议,服务器名称,端口号,路径都一致;

  

  可以看到321也传成功了;

  那么,在请求中那些一直的部分很繁琐,一个两个请求可以进行手动写,那么几百个呢?

  放心、Jmeter有处理这方面的组件。

  

  是的,就是它喽,可以看到它和HTTP请求的界面几乎一般无二,但是实现的功能确实完全不一样的;

  我们将baidu--首页--1和baidu--首页--2,两个HTTP请求中共同的地方提取了出来,放入HTTP请求默认值中,唯一没变的是它的传参,请求一下试试,看看监听器的内容

  

  

  呐、都是POST请求,https://www.baidu.com/

  因此,完全可以实现,简化脚本、简化工作量的目标。

  截止此步,一个http协议的Jmeter脚本优化便完成了。

  那么,又回到刚刚的问题,不是“数据与脚本分离”么?这么看来也并没有实现数据与脚本分离嘛。。

  Jmeter读取本地的文件(支持最好的是csv文件)也有很丰富的插件,暂且提一种方式进行读取外部文件,其余的后续会做逐一记录。

  

  是的,就是它CSV Data Set Config

  

  Filename:文件名(包含路径)

  Fileencoding:文件编码格式

  variable name(comma-delimited):变量名---默认以下方的逗号分隔符进行分隔

  Ignore first line (only used if variable names is not empty):忽略第一行(仅在变量名称不为空时使用);忽略CSV文件的第一行,只有在变量名不为空时才使用,如果变量名为空,则第一行必须包含标题。

  Delimiter(user【\t】for tab):分隔符

  Allow quoted data?:CSV文件是否应该允许引用值?如果启用,则值可以被括在“ - 双引号 - 允许值包含分隔符。

  Recycle on EOF?:文件是否应该从EOF开始重新读取?(是否循环读取)(默认是true)

  stop thread on EOF?:在EOF停止线程?如果回收错误,则再EOF处停止线程

  sharing mode:共享模式;所有线程 - (默认)文件在所有线程之间共享;

              当前线程组 - 每个文件为其中显示该元素的每个线程组打开一次
              当前线程 - 每个线程分别打开每个文件
              标识符 - 共享相同标识符的所有线程共享相同的文件。因此,例如,如果您有4个线程组,则可以使用两个或多个组的共同ID来共享它们之间的文件。或者,您可以使用线程号在不同线程组中的相同线程号之间共享文件。

  很多人会忽略这部分内容,当然具体的用法,以及场景后续记。

  

  外部csv文件内容

  

  HTTP请求默认值、HTTP请求中引用方式

  

  

OK,看运行结果

  

  与上方是完全一致的,如此呢,我们就达到了一个“数据与脚本分离”,虽然说简单了点,没有业务逻辑的处理、判断条件等,但是目的也已经达到了。

  服务器配置信息,协议、地址、端口号、请求参数、等等都可以进行在外部文件中进行更改,完全可以不用更改脚本;虽然此处的脚本可能太过于简单了点,但是无非就是说明一个道理,Jmeter是可以完成这部分工作的,相信在特别大的系统中,你能看到Jmeter这部分效果的。

  OK,还有大把大把的工作等着俺处理、、、、今天就先记到这块。

  

Jmeter(七)Jmeter脚本优化(数据与脚本分离)的更多相关文章

  1. jmeter压力测试的简单实例+badboy脚本录制(一个简单的网页用户登录测试的结果)

    JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter. http://jmeter.apache.org/ 在使用jmeter ...

  2. jmeter压力测试的简单实例+badboy脚本录制

    JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter. http://jmeter.apache.org/ 在使用jmeter ...

  3. Jmeter+Jenkins持续集成(Ant运行脚本)

    Jmeter接口测试脚本运行后生成的是jtl(xml)格式的文件,这些文件不具备可读性,所以我们要把他转化为可以阅读的html格式报告. Ant是一个功能强大的打包编译工具.我们使用他的目的是将xml ...

  4. python接口测试-项目实践(七)脚本优化

    七 脚本优化:重复代码的提取成函数:与项目接口相关的都封装到一个类中:添加手工验证脚本,增加输入值的判断逻辑 将所有与该项目接口相关的封装成类 class ProjectApi: #3个数据源接口 d ...

  5. Loadrunner脚本优化-参数化之关联MySQL数据库获取数据

    脚本优化-参数化之关联MySQL数据库获取数据 by:授客 QQ:1033553122 测试环境: Loadrunner 11 Win7 64位 实操: 1.   安装MySQL ODBC驱动程序 O ...

  6. JMeter (3) —— JMeter录制脚本并压力测试用户登陆场景以CAS SSO为例(101 Tutorial)

    JMeter (3) -- JMeter录制脚本并压力测试用户登陆场景以CAS SSO为例(101 Tutorial) 主要内容 JMeter录制脚本并进行压力测试用户登陆场景,并以CAS SSO单点 ...

  7. 【jmeter】jMeter使用Badboy录制Web测试脚本

    JMeter 是纯Java编写的软件功能和性.能测试工具,其录制脚本过于笨拙和复杂.而Badboy是用C++开发的动态应用测试工具,其拥有强大的屏幕录制和回放 功能,同时提供图形结果分析功能,刚好弥补 ...

  8. Jmeter 03 Jmeter脚本开发

    JMeter 工作区介绍 JMeter Http 协议录制 JMeter 脚本调测 JMeter 关联 JMeter 参数化 JMeter 检查点 JMeter 事务 JMeter 集合点 JMete ...

  9. jmeter之非GUI启动与执行脚本

    启动jmeter的图形界面可以从dos窗口输命令启动:图形界面还是比较占资源的,这时候可以通过dos窗口来执行脚本,获取性能结果 目录 1.dos窗口启动jmeter图形界面 2.dos窗口执行脚本, ...

随机推荐

  1. java知识 特殊符号转换

    ■情况 想把代码中的出现  “  ’等特殊符号时,在他们的前面,转换时自动加 \    最后转换成json 决定用ObjectMapper这个类,先准备一个Map,之后,map作为一个参数,调用Obj ...

  2. servlet路径映射中的完全路径匹配、目录匹配、扩展名匹配

    在servlet路径映射中,关于url-pattern的配置有三种,分别是完全路径匹配.目录匹配.扩展名匹配 其优先级分别为:完全路径匹配>目录匹配>扩展名匹配: 一.三种路径印射的区别 ...

  3. Eclipse无法编译,提示错误“找不到或者无法加载主类”解决方法

    jar包问题: 1.项目的Java Build Path中的Libraries中有个jar包的Source attachment指为了一个不可用的jar包, 解决办法是:将这个不可用的jar包remo ...

  4. 使用distillery&&docker 部署phoenix 应用

      distillery 发布了2.0 了,有好多的新的功能 config prodiver 进行环境变量的配置 appup tansforms 插件系统,方便在release 构建的时候进行修改 m ...

  5. 动态quartz新增、修改、删除

    1.定义job导出类 public class MyQuartzJob implements Job { private static Logger logger = LoggerFactory.ge ...

  6. k8s 的使用

    Kubernetes 是什么:在 Docker 技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性的工具.

  7. 通过阅读python subprocess源码尝试实现非阻塞读取stdout以及非阻塞wait

    http://blog.chinaunix.net/uid-23504396-id-4661783.html 执行subprocess的时候,执行不是问题最麻烦的是获取进程执行后的回显来确认是否正确执 ...

  8. py-day1 pycharm 的安装 以及部分设置

    配置变量    用 :分割 pycharm 的安装: https://blog.csdn.net/bfqs1988/article/details/85250950 要装就装 专业版 不要汉化 破解时 ...

  9. Linux vi文本编辑器

    vi文本编辑器 1.最基本用法 vi  somefile.4 1/ 首先会进入“一般模式”,此模式只接受各种命令快捷键,不能编辑文件内容 2/ 按i键,就会从一般模式进入编辑模式,此模式下,敲入的都是 ...

  10. 基于nginx + lua实现的反向代理动态更新

    大家都知道,nginx是当前应用非常广泛的web服务器,热度因为他的高并发高性能高可靠性,且轻量级!牛逼的不行,不多说这些. 今天要介绍的是,如何基于nginx和lua脚本,也就是在openresty ...