Jmeter非GUI运行接口自动化和性能自动化

发表于:2023-1-12 09:09

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:竹狼    来源:博客园

#
Jmeter
#
jmeter
分享:
  一、 为什么要非GUI运行jmeter脚本?
  在谈论为什么用非GUI运行jmeter脚本前,先看看GUI运行脚本会有什么缺点?
  GUI页面本身就是图形界面,会占用很多系统本身的资源,当长时间运行是,运行的结果占用的内存就会很高。
  既然是GUI界面,那就需要有页面交互,如果没有页面交互,就没有办法运行,就会被限制
  持续集成,当我们在jmeter中编写好脚本后,可以通过ant集成到jenkins集上,进而通过持续集成,持续部署。但是GUI界面无法做到。
  基于以上几点,在运行脚本的时候,更多的时候选择用非GUI运行
  二、在GUI界面编写脚本
  虽说我们运行的时候往往采用在非GUI页面,但是在编写脚本的时候,还是会采用GUI界面,在我们启动jmeter的时候,dos窗口会弹出一句话Don't use GUI mode for load testing !, only for Test creation and Test debugging.,意思就是不要用GUI模式进行测试,他仅仅是编写和调试用的。
  启动jmeter
  这里讲的启动jmeter指的是在windows中,当我们下载好以后,不需要安装jmeter,直接选择目录下的jmeter.bat双击即弹出上图界面,如果看不到bat文件,请把文件扩展名打开在查看。
  修改jmeter属性
  在jmeter的bin目录文件下面有一个文件jmeter.properties,该文件就是jmeter的属性文件,很多需要修改的属性都在该文件里面,比如我们刚打开的文件是英文的,将他修改为中文,只需要将language修改为language=zh_CN。
  还有如果需要继承到jenkins上的时候,需要修改输出文件的格式:
  认识jmeter元件
  (1)当我们打开jmeter的时候,默认的只有一个测试计划,测试计划可以理解成一个测试项目,整个项目的测试都可以包含在下面,有了测试计划我们需要创建线程组,线程组理解为要模拟的用户数组成的集合。
  (2)创建线程组,选择测试计划,右击,选择添加,选择线程(用户),选择线程组,在最右边看到线程组上面有很多其他的,除了三个中文的是jemter自带的,其余几个线程组都是jmeter的扩展包引入进来的,setup线程组一般用来处理初始化的工作,比如登录,链接数据库等,teardown线程组用来做收尾工作,断开链接,退出登录等,其余的业务操作都在线程组里面,如果涉及到性能测试,一般选择名称为jp@gc - Stepping Thread Group线程组,本文采用第二种线程组。
  (3)添加完成线程组后,同样右击添加,可以看到很多组件,有取样器,逻辑控制器,前置处理器......一直到监听器,在每个组件下面有很多元件,比如取样器下面就有http请求,ftp请求,java请求,DebugSampler等等,在这些取样器中,带有jp@gc字样的都是通过扩展包引进来的,jmeter本身不带这些取样器。
  (4)元件作用域
  配置元件(config elements )
    元件会影响其作用范围内的所有元件。
  前置处理程序(Per-processors)
    元件在其作用范围内的每一个sampler元件之前执行。
  定时器(timers )
    元件对其作用范围内的每一个sampler 有效
  后置处理程序(Post-processors)
    元件在其作用范围内的每一个sampler元件之后执行。
  断言(Assertions)
    元件对其作用范围内的每一个sampler 元件执行后的结果执行校验。
  监听器(Listeners)
    元件收集其作用范围的每一个sampler元件的信息并呈现
  元件作用域满足的原则:
  1、取样器元件单独存在,不和其他元件相互作用
  2、逻辑控制器元件只对其子节点中的取样器 和 逻辑控制器作用,就是他只管控他下面的部分
  3、除取样器 和逻辑控制器 元件外,其他6类元件,如果是某个sampler的子节点,则该元件公对其父子节点起作用
  (5)元件执行顺序
  在同一作用域的条件下满足如下要求:
  (1)配置元件(config elements )
  (2)前置处理程序(Per-processors)
  (3)定时器(timers )
  (4)取样器(Sampler)
  (5)后置处理程序(Post-processors
  (6)断言(Assertions)
  (7)监听器(Listeners)
  如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序一次执行。
  (6)脚本编写
  脚本编写,我们以3D投注作为实例,涉及到接口有:登录,获取新期,获取playid,投注等4个接口,其中前三个接口互不关联,第四个接口需要前三个接口的返回值作为入参
  a、在线程组右击选择取样器,然后选择http请求,添加请求后,可以看到什么都没有,需要我们自己输入接口信息,包括请求方式,请求路径,请求内容,如下:
  b、再新建一个http请求,输入我们的获取新期的接口
  c、再次新建一个http请求,获取playid的接口
  d、最后我们添加投注的接口
  在上面接口中,我们一定看到一些参数是由${}样式组成的,这就是下面要讲到的参数化
  (7)参数关联
  登录接口不管在任何系统中,都是我们的入口,往往会返回一个token,或者类似token的值给我们,以方便后续接口拿token去用,运行登录接口,观察返回值看到有一个data的值,这个值就需要我们把它取出来保存起来,方便后面接口调用
  (8)接口用例的维度
  那么如何取出这个data呢?取出data值的方法有很多种,比如json提取器,边界提取器,正则表达式等等。这里用的是json提取器。
  本例中json提取器:
  为了验证json表达式写的是否对,能否正确提出data的值保存到token中,可以添加调试取样器。
  在调试取样器中发现token有值,经核实可以确定就是我们登陆返回的data值,
  jsonpath语法
  (9)断言
  jmeter中断言也有很多种方法,最常用的断言就是json断言,断言主要从两方面去考虑
  1、响应码断言,响应断言就是断言协议码,例如响应正确200等
  2、业务码断言,例如添加成功的后台断言码是1001,则需要断言响应结果中是否含有1001
  3、业务断言,添加一本书籍,则需要断言这本书籍是否添加成功,就需要查询数据库等验证
  (10)非GUI界面运行
  通过GUI界面运行脚本,一般是在命令行中输入命令来运行,命令格式为:
  jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
  但是如果用上述命令运行jmeter,首先必须得配置jmeter的环境变量。
  环境变量添加方法:
  1、在系统变量中添加JMETER_HOME
  JMETER_HOME=D:\Downloads (就是jmeter保存的路径)
  2、在系统变量中添加CLASSPATH
  CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;
  3、在用系统变量path后面加上%JMETER_HOME%\bin ,保存即可
  配置好jmeter的环境变量后,则可以通过jmeter直接在命令行启动jmeter,前提是已配置好JDK环境
  -n: non gui mode,代表非命令行模式
  -t:testplan,代表测试计划,-t后面的参数就是jmeter脚本文件
  -l:保存测试结果的文件和路径
  -e:测试结束后,生成测试报告
  -o:指定测试报告的存放位置,必须不存在 ,否则执行会失败
  实例:
  jmeter -n -t D:\Downloads\apache-jmeter-5.3\tests\niriliya.jmx -l D:\Downloads\apache-jmeter-5.3\tests\report\jtl\result.jtl -e -o D:\Downloads\apache-jmeter-5.3\tests\report\html 
  (11)持续集成
  持续集成需要ant和jenkins工具,ant的环境配置参考文章链接: Jmeter之ant环境配置,接下来就是集成到jenkins中,这里需要用到build.xml文件,不再赘述。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号