jmeter笔记

一、jmeter目录

backups 存放jmx文件的备份文件。
bin目录:存放启动文件,配置文件。模板文件。
docs:离线帮助文档
extras:存放第三方集成构建文件。
lib:存放jar包
licences:存放许可证文件

二、Jmeter常用的组件

测试计划:jmeter进行测试的起点,也是Jmeter其他组件的容器。可以加入jar包
线程组:代表一定数量的虚拟用户。
取样器:最小的测试单元。发送请求:http,tcp,ftp,jdbc
逻辑控制器:模拟复制的请求。包含逻辑结构 if,for
前置处理器:请求之前的操作,类似postman的前置脚本
后置处理器:请求之后的操作
断言:判断实际结果是否预期结果是一致。
定时器:请求之间的延迟间隔。固定,随机,高斯
配置文件:配置信息。
监听器:收集测试结果

三、Jmeter接口测试

http请求默认值:设置当前环境请求的默认url、IP等默认值,类似环境变量
在这里插入图片描述
http cookie管理器:自动处理cookie关联,web项目必备,postman中自动关联无需设置
在这里插入图片描述
用户定义的变量:类似于全局变量,无法跨线程组
当接口需要传递随机变量时,可以将随机变量设置为一个全局变量传递
在这里插入图片描述
参数:用于存放键值对参数,消息体数据传json数据,二者不能共存
自动重定向与跟踪重定向:有多个重定向时,自动重定向只记录最后一个,跟踪重定向记录每一个
multipart/form-data:form-data的请求头
在这里插入图片描述

在这里插入图片描述
查看结果树:查看包括请求数据请求头、响应数据响应头、取样器结果
在这里插入图片描述
使用Json Path Tester,测试json提取脚本:
在这里插入图片描述

四、接口关联

4.1json提取器

main sample only:只在主请求取
在这里插入图片描述
在这里插入图片描述

添加调试取样器:Json Path tester可以查看json提取到的token值
在这里插入图片描述

在其他接口通过${token}获取提取的token

4.2正则表达式提取器

模板表示取第几个正则表达式的值
匹配数字表示取第几个值

在这里插入图片描述
在这里插入图片描述

添加调试取样器:RegExp tester可以查看正则表达式提取到的值
在这里插入图片描述
在调试取样器中可以看到每一个正则表达式取到的值:
在这里插入图片描述

4.3边界值提取器

与正则表达式类似,只是取左右两个边界的值:
在这里插入图片描述
在这里插入图片描述

4.4XPATH值提取器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、动态参数

5.1内置函数

随机数:
在这里插入图片描述
请求想要有随机数则粘贴生成的随机函数:
在这里插入图片描述

六、断言

常用的三种断言:
在这里插入图片描述

6.1响应断言

在这里插入图片描述

响应文本:匹配接口返回的数据
响应代码:匹配状态码(200,404)
响应信息:返回的信息字段,如OK
响应头
请求头
URL样本
文本:匹配接口返回的文本格式数据

模式匹配规则:

字符串:如果响应内容包含需要匹配的内容代表响应成功,大小写敏感,不支持正 则
包括:如果响应内容包含需要匹配的内容代表响应成功,大小写敏感,支持正则
匹配:如果响应内容等于需要匹配的内容代表响应成功,大小写敏感,支持正则
相等:如果响应内容等于需要匹配的内容代表响应成功,大小写敏感,不支持正则

6.2 json断言

在这里插入图片描述

在这里插入图片描述

6.3 xpath断言

在这里插入图片描述
在这里插入图片描述

七、调试

1.使用调试取样器查看中间结果
2.使用抓包:
2.1设置fildder过滤
在这里插入图片描述
2.2jmeter设置代理
在这里插入图片描述
2.3在fildder中查看
在这里插入图片描述

八、数据驱动

csv数据驱动:
在这里插入图片描述
csv文件:
在这里插入图片描述
四组数据,可以设置线程数为4(存在线程组下所有接口受影响的弊端):
在这里插入图片描述
一般设置一个循环控制器设置:
在这里插入图片描述

循环的参数设置取全局变量:
在这里插入图片描述

九、必须带请求头的接口

添加信息头管理器,设置对应的请求头:
在这里插入图片描述
cookie管理器:自动传递关联的cookie信息

十、cookie,session,token

cookie是服务器产生的。保存在客户端。不安全。

  • 在客户端第一次请求服务器的时候通过响应头的set-cookie传输给客户端。然后客户端保存在本地。
  • 在客户端第2-N次请求服务器的时候,那么就会根据cookie的作用域自动的加上cookie实现鉴权。

session是服务器产生的。保存在服务器的内存。默认生命周期是30分钟。

在客户端第一个登陆的时候产生。产生之后通过cookie传输给客户端,一般的名字叫
sessionid。
然后在登陆之后的请求会随着cookie信息自动的传输给服务器实现鉴权。证明这个用户是
登录状态。

token是服务器产生的。保存在服务器的硬盘。

1.要么就是登录之后自动生成token,要么就是通过一个专门的接口生成token
2.在后面所有的接口里面都必须带上token实现鉴权。

十一、Jmeter命令行方式运行

参数:

-n :表示用非GUI方式运行jmeter脚本,不能单独使用,必须和-t一起使用
-t:表示指定jmeter的脚本
-l :生成jtl格式的报告
-e:表示生成html报告,不能单独使用,必须和-o一起使用。
-o:指定html报告的目录(必须是空的)
必须要加一些配置(jmeter.propties)。
jmeter.save.saveservice.output_format=csv

jmeter -n -t test.jmx -l result.jtl -e -o reports

十二、Jmeter+ant+Jekins持续集成

1.下载ant并解压,解压后把ant的bin目录配置到环境变量。
- 官网:http://ant.apache.org/bindownload.cgi
- 验证:在dos中输入:ant -version

2.配置ant的编译文件build.xml
- 修改bulid.xml文件
- 把bulid.xml文件放到和jmx文件的同级目录

<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<property environment="env"/>
<tstamp>
        <format property="time" pattern="yyyy_MM_dd_hh_mm" />
    </tstamp>
    <!-- 需要调用的jmeter目录,根据需要进行修改,本次使用的linux路径-->  
    <property name="jmeter.home" value="E:\apache-jmeter-5.2.1" />
    <property name="report.title" value="接口自动化测试"/>
    <!-- jmeter生成jtl格式的结果报告的路径--> 
    <property name="jmeter.result.jtl.dir" value="E:\ants\jtl" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="E:\ants\html" />
	<!-- 【详细报告】jmeter生成html格式的详细报告的路径-->
	<property name="jmeter.result.html.dir1" value="report" />
    <!-- 生成的报告的前缀-->  
    <property name="ReportName" value="接口自动化汇总报告_" />
	<property name="ReportName1" value="接口自动化详细报告_" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}${time}.jtl" />
    <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
	<!-- 【详细报告】详细报告的文件名-->
    <property name="jmeter.result.htmlName1" value="${jmeter.result.html.dir1}/${ReportName1}${time}.html" />
    <target name="run">
	   <!--antcall target="delete" /-->
        <antcall target="test" />
        <antcall target="report" />
    </target>
	
    <!-- 该命令用来删除今天已经执行过的jtl,防止旧数据重叠
	<target name ="delete">
		<delete file="${jmeter.result.jtl.dir}/${ReportName}${env.BUILD_ID}.jtl"/>
	</target>
	-->  
	
	<!-- 该命令为执行命令-->  
    <target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
            <!-- 声明要运行的脚本路径"*.jmx"指包含此目录下的所有jmeter脚本-->
            <testplans dir="E:\ants" includes="*.jmx" />
            <property name="jmeter.save.saveservice.output_format" value="xml"/>
        </jmeter>
    </target>

    <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
    </path>
  <!-- 该命令为生成汇总和详细报告  -->  
    <target name="report">
        <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
        <xslt 
              classpathref="xslt.classpath"
              force="true"
              in="${jmeter.result.jtlName}"
              out="${jmeter.result.htmlName}"
              style="${jmeter.home}/extras/jmeter-results-report_21.xsl">
              <param name="dateReport" expression="${report.datestamp}"/>
       </xslt>
	   <!-- 【详细报告】指定详细报告模板文件-->
	   <xslt 
              classpathref="xslt.classpath"  
              force="true"
              in="${jmeter.result.jtlName}"
              out="${jmeter.result.htmlName1}"
              style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
              <param name="dateReport" expression="${report.datestamp}"/>
       </xslt>
	 

                <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 
        <copy todir="${jmeter.result.html.dir}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
		<!-- 【详细报告】拷贝图片到目标目录-->
		<copy todir="${jmeter.result.html.dir1}">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target>
</project>

3.配置库文件
把jmeter extras目录下的ant-jmeter-1.1.1.jar文件拷贝到ant的lib目录下。

4.配置jmeter.properties配置文件
jmeter.save.saveservice.output_format=xml

5.在dos窗口里面执行ant命令,查看报告
在dos中进入到jmx文件目录之后输入:ant

6.登录Jenkins进入:
manage jenkins–》Global Tools Configuration-》安装Ant,配置Ant路径

7、构建job
1.设置工作目录(脚本所在位置)
2.构建:执行windows的批处理命令(输入ant)
3.构建:执行grovy脚本System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")
4.构建之后:配置报告

十三、Jmeter中Bean Shell组件和语言

1.什么是bean shell
beanshell是一种语言,它有自己的语法,同时还支持java语言。
作用:beanshell可以和jmeter组件相互交互数据,用于增加jmeter的扩展性,或者是完成一些jmeter很难处理或者无法处理的一些问题。

2.beanshell的种类
1.前置处理器
2.定时器
3.采样器
4.后置处理器
5.断言
6.监听器

3.beanshell自带的语法。
1) 日志打印
beanshell自带的打印日志

log.info("码尚教育");
log.error("百里老师");

java的打印:注意打印的内容在dos窗口查看

System.out.println("java语法");

2 )vars,全称:JmeterVariables,操作Jmeter的局部变量(局部变量是只能在一个线程里面访问的变量,局部变量不能跨线程访问)。
主要的方法:

vars.put(key,value); 设置一个局部变量
vars.get(key); 获得一个局部变量

常见能用来取以下值:

1.获取用户自定义变量
2.获取正则表达式提取器或JSON提取器里面提取的变量
3.put之后的值在另一个beanshell可以取

3) props,操作Jmeter的全局变量(全局变量可以跨线程访问)

props.put(key,value); 设置一个全局变量
props.get(key); 获得一个全局变量

也可以获取properties里的全局变量
注意:断言如果没有取样器,默认不执行。

4)prev 获取前面一个取样器返回的结果

prev.getResponseCode()
prev.getResponseDataAsString()

5).调用jar包
在这里插入图片描述

6)接收调用参数的传值
在这里插入图片描述

十四、BeanShell断言

使用Failure标识断言失败。如果Failure=true代表失败,如果Failure=false代表成功。
使用FailureMessage标识断言失败或者成功的信息。

做数据驱动后进行断言时使用:数据驱动后断言每一条结果都不同

在数据驱动文件加上一个断言字段:
在这里插入图片描述

在这里插入图片描述

在beanshell断言中获取:
在这里插入图片描述

 //获取返回的结果
String res = prev.getResponseDataAsString();
log.info(res);
 //获得CSV数据文件中断言assert_str字段的值
String assert_str = vars.get("assert_str");
log.info(assert_str);
 //判断并做断言
if(res.contains(assert_str)){
 Failure=false;
 FailureMessage = "断言成功";
}else{
 log.info("‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐");
 Failure = true;
 FailureMessage = "断言失败";
 }

十五、Jmeter的录制功能

1.抓包之后再接口测试
2.使用badbody录制。
3.使用Jmeter的http代理服务器实现接口录制。

1)线程组
2)http Cookie管理器
3)非配置文件–>http 代理服务器
端口:8888 目标控制器:设置到指定的线程组。
Type:优先默认,如果无法录取选择Java 点击【启动】按钮
在这里插入图片描述

4)配置电脑的代理服务器,指定为JMeter的代理服务器的IP和端口。
控制面板里面设置
在这里插入图片描述
5)过滤掉不需要的包,只留下需要的请求,其他的过滤掉
在这里插入图片描述

十六、数据库断言

1.测试计划中引入数据库的驱动jar包
在这里插入图片描述
2.配置数据库的连接池:JDBC Connection Configuration

在这里插入图片描述
在这里插入图片描述
3.配置JDBC请求
在这里插入图片描述
4.在beanshell断言中获取

String username = vars.getObject("result").get(0).get("username");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值