午休时间再来记一记,嗯。。回顾着使用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【 】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,还有大把大把的工作等着俺处理、、、、今天就先记到这块。