Jmeter使用大全(一)

178 阅读28分钟

[Jmeter(一)简介以及环境搭建]

刚刚在打扫卫生的时候,就一直在思考近一年以来所学知识及体系。知识太过于碎片化,整理的东西全写在笔记本上,日常工作不可能全部用到,所以复习很重要。因此开始准备将一些知识写在随笔里边,用于知识体系的重建,知识的总结。

  敲定了之后,便开始动手吧!

  就从Jmeter开始吧!那么就先介绍一下今天的猪脚吧!

  Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。

                                                                ----百度百科

  The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions.

What can I do with it?

Apache JMeter may be used to test performance both on static and dynamic resources, Web dynamic applications. 
It can be used to simulate a heavy load on a server, group of servers, network or object to test its strength or to analyze overall performance under different load types.

Apache JMeter features include:

    • Ability to load and performance test many different applications/server/protocol types:

      • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
      • SOAP / REST Webservices
      • FTP
      • Database via JDBC
      • LDAP
      • Message-oriented middleware (MOM) via JMS
      • Mail - SMTP(S), POP3(S) and IMAP(S)
      • Native commands or shell scripts
      • TCP
      • Java Objects
    • Full featured Test IDE that allows fast Test Plan recording (from Browsers or native applications), building and debugging.

    • Command-line mode (Non GUI / headless mode) to load test from any Java compatible OS (Linux, Windows, Mac OSX, …)

    • A complete and ready to present dynamic HTML report

    • Easy correlation through ability to extract data from most popular response formats, HTMLJSON XML orany textual format

    • Complete portability and 100% Java purity.

    • Full multi-threading framework allows concurrent sampling by many threads and simultaneous sampling of different functions by separate thread groups.

    • Caching and offline analysis/replaying of test results.

    • Highly Extensible core:

      • Pluggable Samplers allow unlimited testing capabilities.
      • Scriptable Samplers (JSR223-compatible languages like Groovy and BeanShell)
      • Several load statistics may be chosen with pluggable timers.
      • Data analysis and visualization plugins allow great extensibility as well as personalization.
      • Functions can be used to provide dynamic input to a test or provide data manipulation.
      • Easy Continuous Integration through 3rd party Open Source libraries for Maven, Graddle and Jenkins                                                                                                                                                                                                                  ---------官方介绍(传送门:jmeter.apache.org/)  

  个人见解:Jmeter是一款十分优秀的工具,不过笔者觉得它和平常的工具不一样;首先Jmeter是跨系统的,在windows、Mac、Linux均可使用;一方面在于它支持丰富的协议(HTTP、FTP、JDBC、SOCKET。。。);功能方面也相对比较健全(各种各样的逻辑处理,如条件判断,循环,仅一次等等);各种检查点,对文本、Java对象均可进行处理;丰富的图表展示;此外还有许多第三方插件支持以及第三方集成;且最重要的是开源的。。。

  Jmeter安装:

      Jmeter是在JVM上运行的,因此必须先要安装JDK,不过切记一点,截至今天,Jmeter已经更新到3.3版本,它是不支持JDK1.9的,切记!

      

      传送门(jmeter.apache.org/download_jm…)

      

      至于JDK安装以及环境变量配置,此处便不再列举;

      Jmeter环境变量配置:

      1,变量名:JMETER_HOME

         变量值:E:\apache-jmeter-3.2(根据自己的解压目录而定,笔者使用的是Jmeter3.2的版本)

      2,变量名:CLASSPATH

         变量值:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar;

   OK,环境变量配置结束,可以至E:\apache-jmeter-3.2\bin(安装目录下bin目录)下寻找jmeter.bat文件,双击打开。(可能安装会遇到各种各样的问题,笔者曾经在某些技术群中发现有不用配置环境变量便可以使用(至于到底什么情况,不是当事者也不清楚);还有找不到bat文件(系统默认将后缀名进行隐藏掉了嘛))

   

  

 

     看到上方小黑窗,随后下方Jmeter的弹窗跳出来。那么恭喜你,Jmeter已经被你给拿下了。

    可以观察该小黑窗中的同时内容,

        Don't use GUI mode for load testing, only for Test creation and Test debugging !
For load testing, use NON GUI Mode:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to output folder]
& adapt Java Heap to your test requirements:
Modify HEAP="-Xms512m -Xmx512m" in the JMeter batch file

    不要使用GUI模式进行负载测试,只用于测试创建和调试!---------------------what mean?

    GUI模式----便是下方的弹窗,此处的意思便是推荐使用GUI模式进行创建脚本以及调试脚本,不推荐进行负载测试(所谓负载测试是属于性能测试的一种类型,通过测试系统在资源超负荷情况下的表现,以发现设计上的错误和验证系统的负载能力,在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力;负载测试的目的是确定并确保系统在超出最大预期工作量的情况下仍能正常运行,此外,负载测试还要评估性能特征;例如:响应时间、事务处理速率和其他与时间相关方面),因此可以看出负载测试是比较浪费系统资源的,GUI界面本身便很浪费资源,因此如果出现大并发或者机器处于大负载的情况下,非但不会得到你想要的结果,机器是必然会出现卡死的情况。

    不过,小黑窗的下方一段话也给出了解决方案:

    For load testing, use NON GUI Mode:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to output folder]
& adapt Java Heap to your test requirements:
Modify HEAP="-Xms512m -Xmx512m" in the JMeter batch file

    对于负载测试使用no-GUI的方式进行运行:

        jmeter -n -t [jmx file] -l [results file] -e -o [Path to output folder]

    这段命令便是NO-GUI的方式运行。

    或者进行修改堆内存的大小:

        Jmeter的默认堆为512m,因此,如果使用Jmeter进行负载测试建议将堆内存进行修改到合适的大小;

    修改方法:

      至E:\apache-jmeter-3.2\bin,使用文本编辑器模式将jmeter.bat文件打开,进行修改heap:

  

 

     修改此处的堆内存大小只是一种手段,但并不是万能的。因此,做负载测试还是需要进行谨慎分析,再下结论。

    OK,本篇先记录到这。。

[Jmeter(二)Jmeter目录介绍]

看过许多有关Jmeter的博客,算得上的收获颇丰;不过最牛逼的博客还是“官方文档”,官方文档是ApacheJmeter自己对自己产品的说明,论起对自己产品的理解程度,那肯定是自己嘛。。。因此推荐大家从Jmeter的官方文档开始学习,遇到不理解的问题先查官方文档,有了自己的理解之后再进行与其他人的想法进行比对,那么学习效果绝对比单纯的百度要好的多。

  先推荐观看官方文档的几个传送门:

      1、jmeter.apache.org/usermanual/…

      2、

        自己安装Jmeter目录下printable_docs目录下便是用户手册啦。。

      3、GUI界面任何组件的帮助功能

        

   OK,推荐几种学习Jmeter的学习方法,切入正题:

   对于Jmeter的定位,许多人的认识仅是工具,不过也正确,它本身就是工具,只是在于自己如何使用,如何将它进行投入到自己的工作中,能够帮自己解决到工作中的难题。邓公云“不论白猫黑猫,能抓住老鼠便是好猫”,那么Jmeter能抓住老鼠么?答案是:当然全部的是不可能的,如今的互联网各类业务,各类逻辑已经不能仅仅使用某一工具或者某种语言能够完全360度无死角进行解决的。但是可以肯定的是部分老鼠是能抓住的。只是在于个人的使用方法。

   那么,日常玩一个工具的时候,首先肯定要对工具的各个功能进行使用或者先排着按钮点一遍?最起码的熟悉要有的吧,哈哈

   

    那么熟悉Jmeter的安装目录:

    backups(备份):顾名思义,该目录是个备份目录,是将自己的各个Jmx脚本进行备份,所谓备份便是每次保存都会将该脚本进行保存到该目录下,如果保存多次便会保                                                存多个同样的文件,文件名进行默认递增更改。

    bin:examples(例子):该目录下存放Jmeter官方给的请求模板

      report-template(报告模板):该目录下存放Jmeter的报告模板(Jmeter是有自己的报告的)

      templates(模板):该目录下存放Jmeter的各类配置模板,例如:JDBC、Beanshell、ThinkTime等

      Beanshell----:Beanshell请求、监听、断言、函数等

      Jmeter.bat:启动文件

      jmeter.properties:配置文件(属性在官方文档中有解释、、)

      jmeter-server.bat:用于分布式

      shutdown.cmd:硬停止

      stoptest.cmd:软停止

      xxx.sh:Linux下运行

      user.properties:用户配置i文件(同上)

    docs:api:前面谈到Jmeter是开源的,此处便是它的API文档。

       css:xxxx。

       Image:部分图片资源

    extras:存放Build等配置,用于第三方集成构建

    lib:存放各类jar包,组件类函数类等

    licenses:许可证等

    printable_docs:用户手册

[Jmeter(三)测试计划、线程组]

思量再三,还是再记一会,看到技术群里边的讨论,真的是压力山大,学习一刻也不能耽搁。继续来回顾Jmeter的知识吧。

  Test-Plan,是所有Jmeter脚本的根节点,Test-Plan中包含名称、注释。。。(一大堆,只谈主要功能)

  

用户自定义变量:看图中的表格便可以看出,用户自定义变量是Key-Value格式,用于下方线程组的引用

独立运行每个线程组(例如在一个组运行结束后启动下一个)(不用再做过多解释)

Run tearDown Thread Groups after shutdown of main threads: 运行完TearDown线程组关闭整个线程

函数测试模式:(图中有)

Add directory or jar to classpath :引入外部Jar包,以供下方线程组进行使用

 

Thread Group:

  

线程组是仅次于测试计划的节点,每个请求是基于线程组建立起来的。

action to be token after a sampler error:

  continue(默认):在当前线程中,其中一个sampler错误,继续执行下一个sampler,脚本继续执行。

  start next thread loop(启动下一个线程循环):demo:一个线程里有三个接口,执行到第二个接口遇到错误,就不执行第三个接口了,直接跳到下一个线程组循环

  stop thread:停止线程。有Sampler出现错误,则触发stop thread,在当前Sampler错误处停止运行(循环停止);直到其他线程执行结束完毕。

  stop test:停止测试。有Sampler执行有错误,则当前正在执行的Sampler执行完毕后停止测试;还没有执行的Sampler不执行(类似于软停止)

**stop test now(立即停止测试):立即停止。当一个Sampler执行出现错误,触发stop test now,则所有的测试工作立即停止执行(类似于硬停止),有正在执行的Sampler,立即停止;还没有执行的Sampler不执行。

(线程组此处的各个属性配置类似于自动化脚本中的容错控制,相对人性化)

线程数:需要启动的线程数量

ramp-up period(in second):每个线程启动的延迟时间;例如:设置为1100个线程,表示系统将在1S结束前启动设置的100个线程;如果有30个线程和120秒的斜坡上升时间,则每个连续的线程将被延迟4秒(摘自官方文档)。(个人理解)例如线程数10,ramp-up period是5s,循环2次,那么意思就是1s会执行2个线程*2次循环,1s并发四次请求

循环次数

delay thread creation until needed(延迟线程创建直到需要):默认不勾选,测试开始的时候,所有线程就被创建完。勾选了此选项,那么线程只会在合适的需要用到的时候创建。

调度器:定时启动,定时结束;与下方的时间输入框结合(当测试开始时,JMeter将在必要时进行等待,直到达到开始时间。在每个周期结束时,JMeter检查是否已经达到结束时间,如果是,则停止运行,否则允许测试继续,直到达到迭代限制。)

OK,测试计划和线程组便记在这儿吧。有需要的再回来补充

[Jmeter(四)NO-GUI模式运行]

在前几篇中有提到NO-GUI模式的运行,是的,Jmeter支持NO-GUI方式的运行。

  如果Jmeter的环境搭建完毕,那么在命令行下执行jmeter - ?便会出现jmeter的各个参数

  

  --?
        print command line options and exit
    -h, --help
        print usage information and exit
    -v, --version
        print the version information and exit
    -p, --propfile <argument>
        the jmeter property file to use
    -q, --addprop <argument>
        additional JMeter property file(s)
    -t, --testfile <argument>
        the jmeter test(.jmx) file to run
    -l, --logfile <argument>
        the file to log samples to
    -i, --jmeterlogconf <argument>
        jmeter logging configuration file (log4j2.xml)
    -j, --jmeterlogfile <argument>
        jmeter run log file (jmeter.log)
    -n, --nongui
        run JMeter in nongui mode
    -s, --server
        run the JMeter server
    -H, --proxyHost <argument>
        Set a proxy server for JMeter to use
    -P, --proxyPort <argument>
        Set proxy server port for JMeter to use
    -N, --nonProxyHosts <argument>
        Set nonproxy host list (e.g. *.apache.org|localhost)
    -u, --username <argument>
        Set username for proxy server that JMeter is to use
    -a, --password <argument>
        Set password for proxy server that JMeter is to use
    -J, --jmeterproperty <argument>=<value>
        Define additional JMeter properties
    -G, --globalproperty <argument>=<value>
        Define Global properties (sent to servers)
        e.g. -Gport=123
         or -Gglobal.properties
    -D, --systemproperty <argument>=<value>
        Define additional system properties
    -S, --systemPropertyFile <argument>
        additional system property file(s)
    -f, --forceDeleteResultFile
        force delete existing results files before start the test
    -L, --loglevel <argument>=<value>
        [category=]level e.g. jorphan=INFO, jmeter.util=DEBUG or com.example.foo=WARN
    -r, --runremote
        Start remote servers (as defined in remote_hosts)
    -R, --remotestart <argument>
        Start these remote servers (overrides remote_hosts)
    -d, --homedir <argument>
        the jmeter home directory to use
    -X, --remoteexit
        Exit the remote servers at end of test (non-GUI)
    -g, --reportonly <argument>
        generate report dashboard only, from a test results file
    -e, --reportatendofloadtests
        generate report dashboard after load test
    -o, --reportoutputfolder <argument>
        output folder for report dashboard
                  ------------取自官方文档
就记录一些常用的吧,其他的命令回头再进行补充
首先,Jmeter是怎么运行JMX脚本的?
  命令:jmeter -n -t baidu.jmx 
-n 是代表NO-GUI方式的运行
-t 是代表要运行的jmeter文件
   Jmeter是如何运行JMX脚本并生成jtl文件(日志文件)?
  命令:jmeter -n -t baidu.jmx -l baidu.jtl
-l 是生成jtl文件的参数
  Jmeter运行脚本并生成log文件:jmeter -n -t baidu.jmx -l baidu.jtl -j baidu.log
-j 是生成log文件的参数
  Jmeter运行脚本并生成报告(html格式):jmeter -n -t baidu.jmx -e -o baidu

命令行参数很多,因此需要一个一个去进行学习。

[Jmeter(五)录制功能]

难得休息时间,和开发对完需求便理着Jmeter的知识的相关体系,趁闲暇功夫就记一点,希望这么坚持下去,能有很多关于Jmeter的知识点被总结,被挖掘出来,从而形成自己的一套知识体系。。。。。

  嗯,那本篇就记录制吧!

  其录制功能本质就是通过监听端口,让代理捕获监听端口的报文信息,对抓取的报文进行格式化后转换为对应的行为函数。脚本回放时,就用函数方法去模拟客户端与服务端的通信过程。

  录制功能是很不陌生的功能,尤其是对于新手来讲,Jmeter作为接口性能测试工具的小王者当然不例外,是支持该功能的。通过Jmeter进行录制有多种方法,其中最广为使用的是badboy进行录制,导出jmx文件,Jmeter进行读取;不过,第三方毕竟是第三方,还是用自家的比较实在。。。

  ok。。

  第一步:

  建立线程组,以及录制控制器(录制控制器是必须的,不然会影响到下一步)

  

  第二步:

  工作台中建立HTTP代理服务器,此处的代理服务器端口号(默认8888),以及目标控制器、分组、排除(正则筛选)、包含模式都是可以更改,当然也可以默认

  

  

  第三步:启动HTTP代理服务器(有关代理机制、概念后续补充)

  

  第四步:打开浏览器,进行设置代理

  

  

  OK,设置完成便可以进行录制了,正常操作访问网站即可,看看Jmeter的状态。。

  

  访问网站的所有资源都会被录制到,可以尽情修改使用。

[Jmeter(六)Jmeter脚本包含要素及书写习惯]

Jmeter有丰富的组件,逻辑控制器、配置原件、Sampler、定时器、前置处理器、后置处理器、断言、监听器;而编写脚本一定要养成个人习惯,让人看到Jmeter的脚本目录结构树能够一目了然;因此,首先需要了解的是协议、以及Jmeter的元件执行顺序来作为参考,养成自己的书写习惯。

  嗯。。关于协议部分,在协议分类随笔中进行记录,本篇就书写习惯以及一个完整的Jmeter脚本应该包含什么做以记录。

  Jmeter组件执行顺序:(摘自《全栈Jmeter》)

    1、配置原件(如果存在)

    2、前置处理器(如果存在)

    3、定时器(如果存在)

    4、取样器(如果存在)

    5、后置处理器(如果存在且取样器的结果不为空)

    6、断言(如果存在且取样器的结果不为空)

    7、监听器(如果存在且取样器的结果不为空)

  而一个完整的Jmeter(此处以HTTP协议为例)脚本应该包含哪些组件呢?

  众所周知,HTTP协议结构(request)中包含请求头、请求行、请求数据,那么在Jmeter中实现HTTP请求也必然需要进行模拟一个完整的请求才能得到响应。而在编写Jmeter脚本的时候便需要养成良好的习惯,结构树一目了然,不论是工作,还是需要其他人来解决问题,相信都能快速的定位。因此,需要将Jmeter的组件执行顺序以及协议结构相结合,组成一个完整的脚本。

  

  OK,一个简单的访问百度页面的例子就OK了,当然直接访问百度首页不需要任何参数,因此下方请求数据不需要填写;值得一提的是此处的协议和端口号,如果在协议处填写https,那么端口号是可以不填的,因为它会自己默认为443(https的默认端口号);当然,直接填写http,后边的端口号也会默认为80的。

  当然,此处例子中在“HTTP信息头管理器”中是什么都没有填写。可以在下方的监听器看得出来:

  

  至于在什么情况下会加入信息头信息,信息头中涉及到哪些信息,见下文;

  可以从上图看得出来,一个完整的Jmeter脚本至少要包含一个线程组、一个请求,监听器;线程组可进行设置循环、线程数;Sampler中配置请求地址、协议、参数等;监听器来进行监听请求以及响应内容;

  

  可以切换查看的响应方式,呐、这个就是百度的原始页面了;可以看到的是并没有HTML、CSS等页面渲染元素;

  So,这便是一个完整的HTTP请求的Jmeter脚本。

  可以看得出来,(除去线程组)是将配置原件放在了第一位,接着是请求,监听器;并没有像录制的脚本一样,将信息头一类的配置元件放入Sampler下一级,调试都不容易,试着找个问题都眼花缭乱。

  因此,自行编写时一定要养成良好的习惯,最起码是要有调试方便,层次分明的优点。

[Jmeter(八)HTTPCookie管理器]

Cookie绝对是日常工作以及技术中一个绕不过去的‘角色’,正常各种各样的业务需要Cookie的存在。Jmeter中也有支持发送Cookie的组件,但是,仅是后话;在此还是有必要先记一记Cookie到底是什么?Session又是什么?各在系统中充当了一个怎么样的角色,起到了哪些作用?

   得回到http协议的结构以及特点,http协议中定义了信息头、响应头的存在,而cookie又是信息头的一部分,那么又与我们之前的HTTP信息头管理器和HTTPCookie管理器如何进行区分,或者在工作中如何使用。

 

(有关http协议的知识,在其他总结中进行总结。)

大体整理一下思路:首先呢,HTTP协议是无状态协议,所谓无状态就是指协议对于事务处理没有记忆能力。缺少状态的话便意味着如果后续处理需要前面的信息,则它是必须重传,这样就导致了一个弊端------每次连接传输的数据量增大;而Cookie便是解决这一问题的手段之一!通过Cookie来进行保存状态信息,那么服务器便知道请求都是来自同一个客户端。

 

而有时也会将Cookie和Session的概念进行搞混,由于自身可能描述有限,在知乎上找到一个不错的回答。

 

  1. 由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。
  2. 思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
  3. Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。
    所以,总结一下:
    Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
    Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

 

So,回到Jmeter,举一个日常工作中的例子:

  比如,下单接口需要校验用户是否在线、、、其言外之意便是除非登陆才能进行下单,否则不能下单。那么如何让登陆成功的接口状态传至下单接口呢?

  对、、、HTTPCookie管理器!

  HTTPCookie管理器有很良好的机制,如果请求的响应中包含Cookie,则Cookie管理器便会自动存储该Cookie,用于针对该特定网站的所有请求。

  所以,只要加个HTTPCookie管理器,不需要添加任何内容,便能解决上方登陆下单的问题。

  这块需要特定记录的一点是:Cookie本就是信息头中的一部分,所以当在HTTP信息头管理器中添加了Cookie字段,那就没必要再在HTTPCookie管理器中添加值,甚至也不用加HTTPCookie管理器组件,避免发送重复Cookie;相对而言,在HTTPCookie管理器中传入了Cookie的值,那么在信息头中也不用再添加Cookie的字段。

[Jmeter(九)JDBC连接池]

JDBC为java访问数据库提供通用的API,可以为多种关系数据库提供统一访问。因为SQL是关系式数据库管理系统的标准语言,只要我们遵循SQL规范,那么我们写的代码既可以访问MySQL又可以访问SQL Server.

  它的作用就是与数据库建立连接,发送SQL语句,以及处理结果。

  Jmeter也不例外,就JDBC连接池控件,可以通过JDBC连接池进行连接数据库并进行操作。

  So,今天就来记一记JDBC,看看在Jmeter中是如何进行操作数据库的。

  (以MySQL为例)

  其实在之前有记到过Jmeter的目录结构,其中就提到了printable_docs/demos/下有Jmeter自带的各种模板,其中便有JDBC-Pre-Post-Processor.jmx的一个模板。可以打开观摩观摩。

  还有一个观摩模板的地方:

  

  Templates下有几个核心模板

  

  是的,今天来记JDBC,那先找找官方文档。。。。。。

   官方文档中也是以MySQL为例的,那么就方便了许多。

   

   相信大部分内容都能看的明白,其中有几个重点需要声明:

      1,DataBaseURL:(以MySQL为例)jdbc:mysql://localhost:3306/库名      

      2,JDBC Driver Class:数据库驱动

        不同类型的数据库,在此处的用法是不一样的。

        例如MySQL,需要将MySQL的驱动类下载下来,放入Jmeter的lib目录中,如果没有放入该驱动,则会报类似的错误

        

        其他类型的数据库驱动类,官方文档也给出了解释:

        

      3,username、password便不再多做解释,数据库登录用户名以及密码

  OK,连接池配置完成:

  

  

  那么如何进行操作数据库呢?

  同样,模板中给出了答案:

  

  

  可以看得出我查的是我本地数据库中的默认mysql库中的user表

  

      数据库表内容

Jmeter查出的内容。

那么一个完整的JDBCdemo就完成了。

当然,也可以书写其他的DDL,DML的SQL语句。

切记,需要更换的是这块的内容:

  

 

  

[Jmeter(十)检查点]

检查点又名断言,我们在手工测试过程中肉眼以及自己的逻辑思维对实际结果进行判断是否与预期结果一致,但是工具是死的,没有眼睛,没有思维,并不知道需要判断的信息在哪块,或者是来判断什么东西,我们需要让工具更灵活一点,只有给工具加入一种逻辑,才会进行执行某种逻辑。而检查点则就是工具的‘眼睛’用来判断是否达到了预期的效果,或者符合某一条件。

  Jmeter中提供了很多断言:

  

  用到最多的便是响应断言;顾名思义,响应报文的检查点。

  

  Apply to:Main sampler only:断言仅适用于主样本

        sub-sampler only:断言仅适用于子样本

        Main Sampler and sub-Sampler:适用于两者

        jmeter variable: 断言将被应用于指定变量的内容

  Response Field to Test(要测试的响应字段):响应文本;

                       响应代码;

                       响应信息;

                       响应头;

                       请求头;

                       url样本;

                       文本;

                       忽略状态。

  模式匹配规则以及要测试的模式,都能够区分的清楚;写个例子^_^:

  

  还是百度^_^

  

  响应断言部分。

  

  可以看到监听器监听到的信息是没有错误的,那就说明断言是成立的,是正确的;响应文本中是包括“百度一下”字段的。

  换个断言内容:

  

  再请求。。。

  

  可以看到该请求是成功的,code码以及响应信息便可以看得出来

  

  报错的原因是因为它下边的断言:

  

 

   断言失败。

  百度首页的响应内容本就没有Richered的字段么,肯定会失败。

  当然,也可以试着选一下断言要响应的字段内容,会有不一样的结果的。

  So,这就是断言,检查点。

[Jmeter(十一)参数化]

有关参数化的概念,前面有篇随笔已经粗略的提到了参数化的一点内容。本篇来主要记录参数化。

  Jmeter的参数化方式有很多,在此我来一一记录,对待不同个规模、业务模型、数据量来进行记录参数化的方法。

  一、前置处理器--->用户参数

  

  

  

  虽然请求会失败,但是只是看请求参数是否能够传输成功

  将线程数增添为两个。

  

  

  可以看得到,该用户变量值one、two是传输过来的。

  用户参数组件有很多灵活的用法。可以查看该帮助文档:

  

  引用username、password、category、color;增添线程数即可。

  这是第一种“参数化”的方式。

  二、配置元件-->CSV Data Set Config

  

  具体用法在前面的随笔中已经用到过,此处便不再贴图。

  三、配置元件-->jp@gc - Variables From CSV File

  

  该元件是Jmeter的第三方插件包来进行安装的;Jmeter 第三方插件包下载传送门:jmeter-plugins.org/downloads/a…

  先看看界面:

  

  看起来与CSV Data Set Config的界面一般无二(有些差距),其二者大体功能是一致的,但是细节就在于前者是支持多行数据表的,后者是键值对数据的(key-value型);

  key-value型的数据表能够用于很多业务场景,说白了,我们所有的工具都是为了支持业务模型的,我们业务中遇到的参数化登录名、密码、卡号、身份证号等等这些内容都是比较唯一的,因此避免重复错误等意外场景出现,用该插件再好不过了,它就只读个key和value,而且下方还有一个Test CSV File的功能,所有参数填写完毕可以看到是否与外部文件进行关联到位,来试一试。

  

  可以看到直接可以引用,不需在组件内部定义变量名。

  四、——CSVRead函数

  

  该函数也是读取外部文件的功能,可以看到读取的是同样的一个外部文件。

  

  直接引用该字符串便可以使用。

  五、JDBC

  使用JDBC进行添加Sampler,写入SQL语句进行读取;具体读取内容,自行定义。更多的用于大数据量、数据无任何规律的参数化。

  简单记录了一下Jmeter的几种参数化方法,并不是每种参数化方法都适用于每种业务场景,还需自己来进行判断;使用哪种能够更为方便、能够使自己的脚本更为简洁。