目录
变更记录变更日期变更说明附件2021-02-26【TestReport名称优化】将html报告名称index.html 改为动态变化的(不然每次生成的报告Html报告都会把原有的报告覆盖)详细见【五-8】build.xml
一、JMeter简介
二、JMeter 基本使用
1. 启动Jmeter
2. 设置为中文版(根据个人喜好)
3. 配置元件-Http cookie管理器
4.断言
5.接口关联(Json提取器&正则表达式提取器)
6.Jmeter数据驱动
7.JDBC Request
8.函数助手
9.BeanShell
10.Jmeter事物/模块控制器
三、Ant简介
四、Jenkins介绍及安装配置
五、Jmeter自动化测试的配置
1. 原理
2. Jmeter.property配置
3. Ant配置
4. Jenkins 配置-相关插件安装
5. 邮件通知配置
6. Ant build.xml 文件
6. 运行-看结果
7. 配置过程中遇到的问题总结
8. 分享中提到的关于TestReport的名称优化
变更记录
变更日期
变更说明
附件
2021-02-26
【TestReport名称优化】
将html报告名称index.html 改为动态变化的(不然每次生成的报告Html报告都会把原有的报告覆盖)
详细见【五-8】
build.xml
演示文档(2021-02-25)
1
Jmeter 脚本
testDemo.jmx
2
build.xml 文件
build.xml
3
PPT
Jmeter+Ant+Jenkins接口自动化测试-20210225.pptx
4
CSV文件
计数器演示.csvjmeter数据驱动演示.csv
MAC启动Jmeter,进入到jmeter的bin目录下 ,运行以下命令
sh jmeter
2. 设置为中文版(根据个人喜好)进入jmeter -bin目录下,找到jmeter.properties 文件,设置language=zh_CN,设置完需要重启Jmeter
3. 配置元件-Http cookie管理器配置元件(Config Element)用于提供对静态数据配置的支持,Http cookie管理器可以用来对 HTTP Request Sampler 的 cookie 进行管理
如果想要Jmeter像浏览器一样,保存cookie,那么可以借助“配置元件-Http cookie管理器”,
(1)若没有 Http cookie管理器:
(2)当我们第一个请求,有了cookie之后,那么“Http cookie管理器”就会保存这个cookie,给后面的请求用,就像在浏览器里的用法一样
4.断言比较重要的断言主要有:响应断言(Response Assertion)、大小断言(Size Assertion)、持续时间断言(Duration Assertion)
(1)响应断言(Response Assertion)
①响应文本(Test Response)断言
断言内容 --相当于预期结果
响应中看到的数据 --相当于实际结果
执行脚本后,若实际结果与预期结果不一致,则断言失败
②响应代码(Response Code)断言
设置断言,假设Response Code预期应为500
实际运行结果,Response Code 为200
则断言失败
(2)大小断言(Size Assertion)
验证生成的响应的大小,以字节为单位,这也是吞吐量参数,当我们加负载的时候,若网站处理不过来时,就可能出现有的数据没有加载出来,这时的就不会返回完整的字节大小,当我们加负载时,我们也会参考这个参数,看看是否完全加载出来
(3)持续时间断言(Duration Assertion)-主要用来验证性能指标
当我们在断言中,设置为1000时,代表最大耗时不能超过1000ms
这边为了演示断言出错,持续时间故意设置比较短,方便查看效果
断言失败,并给出提示
通过“监听器-用表格查看结果”来看下这个sample的持续时间
5.接口关联(Json提取器&正则表达式提取器)我们在进行接口测试时,一般会有业务场景的关联性,接口关联就是把应用中动态变化返回的数据获取到,把它保存为一个参数,提供给后面需要用到的地方进行使用。
最常见的比如登录的接口会返回一个token,便于之后其他接口调用时来认证身份,那么这个时候,我们就需要通过接口关联来实现参数传递,最常用的方法有两种,一个是Json提取器,一个是正则表达式提取器
(1)Json 提取器
我们先来看下登录接口返回参数中,是否能把pytoken这个值取到,其中$表示根元素,图中$.data.pyToken为Json路径表达式
然后在登录接口里添加后置处理器-json提取器,用json path表达式取到得值,放在pyToken这个变量里
Names of created variables :接收值的变量名,自定义
JSON Path expression: json path表达式
Match No.(0 for Random):1 代表匹配获取到的第一个值,我们这边只有一个值(0表示随机;n取第几个匹配值;-1匹配所有。若只要获取到匹配的第一个值,则填写1)
Default Values: 缺省值,匹配不到值的时候取该值,可写error也可不写
我们也可以使用调试取样器(Debug Sample)来查看pyToken取值是否正确
对json提取器取到的值,进行变量引用,格式为${变量名},所以此处为 ${pyToken}
(2)正则表达式提取器
运行登录接口,查看响应结果,把需要提取的数据复制出来,然后用正则表达式代替即可
"pyToken":"03d8aa93-8f52-471f-8c12-f51a692ae7b5"}}
--> 可以看到黄色部分,我们使用(.+?)进行了替代,因为黄色部分是动态变化的
说明:
. 代表:匹配换行符n之外的任何单字符
+代表:匹配前面的子表达式一次或多次
?代表:匹配前面的子表达式零次或一次,或指明一个非贪婪限定符
关于正则表达式的语法可参考:正则表达式 – 语法 | 菜鸟教程
模板(Template)--> $0$ 代表取正则表达式输入项内输入的值,$1$指取第一个括号内的内容,此处即为.+?
匹配数字(Match No.) -->若jmeter在匹配Regular expression中的值时,匹配出了多项,那么Jmeter是不知道要取哪个值的,所以可以用来指定,比如输入1,即匹配查到的第一个值
缺省值(Default Value) -->默认值,设置默认值,若匹配不到,则使用默认值
6.Jmeter数据驱动Jmeter里参数化一般分为①从文件里读数据,②从数据库里读数据,③用后置处理器从响应里读数据(第五节中就是从后置处理器中进行数据读取)
数据驱动的目标就是,我们在单独的一个Execl里来维护数据,而不是在请求里面硬编码
(1)添加配置元素-CSV Data Set Config
数据驱动csv文件:
设置线程数2,运行后结果查看:
CSV数据文件设置字段说明:
① 变量名称(Variable Names):需要输入文本里各列都叫什么名字
② 分隔符(Delimiter):用英文的逗号隔开
③遇到文件结束符再次循环?(Recycle on EOF?):数据再循环,例如设置为True,我们的CSV中共有7条数据,但是我们有10个用户,那么第8个用户就会就会从第一条数据开始,再次循环取值
④遇到文件结束符停止线程?(Stop thread on EOF?):例如是true,执行了文件,则停止运行,如果是False,执行了文件,不停止线程,当Recycle on EOF设置为True时,此项设置无效。
注意点:
①文件一定要保存.csv格式
②当csv文件在jmeter的bin目录或脚本目录时,只需给出文件名即可
(2)用函数助手参数化-从csv文件取数据
依然使用(1)中的csv文件
点击生成后,就拷贝到粘贴板上,直接去粘贴就可以了
(3)计数器
在CSV里读数据,不管是用CSV Date Set Config还是用函数助手,那些数据都可能重复,我们都是手动的把它设置成不一样,如果我们不想一直去修改csv的数据,那么可以使用计数器,这样我们只需要修改计数器的起始点,最大值等,就能通过csv里的测试数据和计数器使得测试数据不重复
来看下计数器的定义:允许用户在线程组中任何位置创建引用的计数器。 计数器配置允许用户配置起始点,最大值和增量。 计数器将从开始循环到最大,然后从开始重新开始,继续进行,直到测试结束。
我们以函数助手参数化为实例(CSV Data Set Config同理)来实战一下
①设置计数器
a. Staring value:开始值,比如设置为1
b. 递增(Increment) :递增值,比如设置为2,那么从1开始,下一个数就是3,是两个两个递增的
c. Maximum value: 最大值,比如设置10,就是涨到10就不涨了
d. 数字格式(Number format): 什么格式的,比如我写00,则是01,02,03一直到10,如果写的是000,则是001,002,003这种
e. 引用名称(Exported Variable Name):变量名,比如就叫num
②设置csv文件
③函数助手设置
④根据计数器和函数助手设置接口变量
⑤运行查看结果(此处实例中用了循环控制器,一个线程,但设置新增项目进度接口循环五次),查看结果
⑥计数器的定义中提到: 计数器将从开始循环到最大,然后从开始重新开始,继续进行,直到测试结束
这个是指,如果我循环的次数(或者是线程数)多于开始到最大的总数,那么会从开始的值继续执行,知道我们设置的循环次数(或者是线程数)执行完毕,例如设置开始数字1,递增是2,最大值是10,而我们设置的循环次数或者是线程数是 7,则num 分别为1,3,5,7,9,1
⑦与每个用户独立的跟踪计数器(Track counter independently for each user):若勾选这一项,则代表每个用户(线程)是独立计数的,我们可以设置线程数是2,循环次数是3,来看下效果
7.JDBC Request要用这个JDBC Request,需要配置下数据库链接 添加(Add)-->配置与案件(Config Element) -->JDBC链接配置(JDBC Connection Configuration)
网站:JDBC Driver List | SoapUI 可以下载JDBC的Driver,还可以找到不同数据库的链接地址,不同的数据库,有不同的链接地址和数据库驱动
(1)配置
①下载数据库驱动
按照提示进行下载,下载解压后,将文件夹中的两个jar包中的一个,拷贝到Jmeter的lib目录下
为了方便大家下载,此处提供mysql driver的网盘下载地址:https://pan.baidu.com/s/1rSz0cEvAhAElPC9WPO44mw 密码:pxuv
②复制数据库连接地址(这个也可以直接问开发要)
复制链接地址到 Database URL里,并在图中红框之后维护你的数据库的地址和端口号,后面的用户名和密码可以删除,因为Jmeter后面可以直接维护
③JDBC Driver class(mysql的固定写法是 com.mysql.jdbc.Driver)
完成数据库链接配置,并设置Variable Name for created pool(为了在JDBC Request中被引用)
(2)Jmeter中数据库 *** 作
①Query Type :Select Statement (查询)
察看结果树:
来验证下,看看数据库里数据是否和查出来的一致
②Query Type :Update Statement (更新)
大家可以在尝试下delete
数据已被删除
③按照以上的测试配置,仅能执行一条sql语句,若想执行多条,需在 JDBC Connection Configuration中设置的Database URL中设置allowMultiQueries=true
5种Query Type 总结(以是否设置allowMultiQueries=true来分类):
Query Type
已设置(基本前提为语句正确)
未设置
Select Statement
或
Prepared Select Statement
不管填写1条还是多条,仅执行第1条语句,且第1条语句必须为select,否则会报错
仅能填写1条sql语句,且必须为select语句,否则会报错
Update Statement
或
Prepared Update Statement
不管设置1条还是多条,只要第一条为非select语句,则能正确运行,且会忽略所有select语句,若第一条是select语句,则会报错
仅能填写1条sql语句,且必须为非select语句,否则会报错
Callable Statement
可执行多条sql语句
仅能填写一条sql语句,否则会报错
④若在测试过程中,执行成功,却未得到对应的结果,可能是因为编码的问题,jmeter识别不了,那么此时,我们需要在 JDBC Connection Configuration的Database URL加上useUnicode=true&characterEncoding=utf8来对他进行编码
⑤接下来我们来看下Select Statement与Prepared Select Statement,Update Statement与Prepared Update Statement的区别
Select Statement:静态select语句
Update Statement: 静态DML(insert、update、delete)
Prepared Select Statement:动态select语句,参数化select语句
Prepared Update Statement:动态DML语句,参数化DML语句
Prepared Select Statement和Prepared Update Statement是可以防sql注入的
一般我们测试insert的时候会使用Prepared Update Statement而不是Update Statement
上一次安全培训的时候,有提到关于防止sql注入的问题,一个很有效的方式,就是采用预编译的方式组装sql, "?"就是占位符,我们温习下:
【预编译占位符为什么能防止sql注入】
a. 使用占位符:select * from table where name = ?
b. 那么你传进来的参数 sql会解析成 select * from table where name = '张三 or 1=1'
这个就不会有注入的风险了,sql会把传进来的是一个参数字符串,而不是语法
⑥JDBC Request本身也是可以将返回值取出给到定义好的变量
我们以select查询返回后的结果为例
运行后的结果
调试取样器查看取值情况
(3)JDBC Request 结合后置处理器-正则表达式提取器
通过JDBC Request获取数据库的数据,用正则表达式提取器进行提取后,给到其他接口使用
假设此处我们需要取出这边的登录账号 admin
添加调试取样器,我们来查看结果(调试取样器直接用${username}命名),可以看到是可以正确取到值的
注意:正则表达式中 空白用s ,换行用 n
8.函数助手在第6节中,我们有简单讲到过一个函数助手,用CSVRead实现数据驱动,不管是使用什么函数,使用方法都是类似的,就是我们选择某个函数,并且按要求为其参数设定值,不同的函数要求的参数也不同,然后生成函数字符串,供脚本使用,后续时间充裕会将常用的Jmeter函数做下总结,这边我们就先拿__Random函数取了例子,主要演示下函数生成和使用
__Random函数:返回指定最大值和最小值之间的随机数
9.BeanShell 10.Jmeter事物/模块控制器 三、Ant简介下载地址:Apache Ant - Binary Distributions
windows下载zip包,mac下载tar包
下载后解压,配置环境变量(同java的配置方式,可百度)
配置环境变量后,在命令行运行如下命令,查看ant是否生效
ant -version
四、Jenkins介绍及安装配置Jenkins官网下载地址(选择稳定的版本进行下载):Jenkins download and deployment
MAC版本下载:链接:https://pan.baidu.com/s/19OpTt5aQhAhmXx4oeW4JeA 密码:hltv
下载后按照提示安装即可
mac版本获取密码时,可以在iterm里 输入:sudo less 提示的地址 ,来获取登录的初始密码
登录后记得及时修改密码!!!
五、Jmeter自动化测试的配置 1. 原理 2. Jmeter.property配置Jmeter配置文件中,默认的报告是csv格式的,因为csv的报告不是很好看,达不到想要的效果,所以要改成xml,改成xml后,生成的报告,就能生成html的格式(注:修改后要重启Jmeter才能生效)
3. Ant配置需要把Jmeter下面的一个Jar包(ant-jmeter-x.x.x.jar),复制到ant的安装目录lib目录下面,这样Ant就能使用Jmeter
4. Jenkins 配置-相关插件安装(1)安装Ant插件:安装后,我们才能用Jenkins结合Ant去运行build.xml文件
(2)安装完成后,还需要配置Java 和Ant的环境变量
(3)安装jtl和html报告插件:HTML Publisher
5. 邮件通知配置(1)安装插件:Email Extension Template、Email Ext Recipients Column
(2)以QQ邮箱为例,配置发送邮箱,QQ邮箱-设置-账户-SMTP服务必须是开启的,才能发送邮件,需要获得授权码
(3)进入Jenkins - Manage Jenkins - Configure System,找到邮件服务器,进行配置
(4)将Jmeter里的两个Jar包(javax.activation-1.2.0.jar,mail-1.5.0-b01.jar)拷贝到Ant的lib目录下 ,否则进行ant build的时候会报错
6. Ant build.xml 文件- Jenkins 新建Job
(1)构建触发器,此处设置一个定时任务,为了演示,假设每1分钟执行一次
(2)安装过Ant插件后,此处构建时下拉列表就会有“Invoke Ant”选项,如图进行配置
(3)构建后 *** 作里下拉选择 “Publish HTML reports”,HTML文件的路径为jenkins workspace中html报告 的存放路径,报告名称为 index.html(可自定义,但需和xml文件中一致)
6. 运行-看结果查看邮件
7. 配置过程中遇到的问题总结(1)jenkins html 报告格式丢失
解决方法参考:jenkins使用HTML Publisher Plugin插件 拉取报告样式缺失问题解决 - 凯宾斯基 - 博客园
①安装插件:Groovy,startup Trigger
②配置方法
- 新建一个job,该job专门用于Jenkins启动时执行的配置命令;
- 在Build Triggers模块下,勾选Build when job nodes start;
- 在Build模块下,Add build step-> Execute system Groovy script,在Groovy script中输入配置命令,System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
解决后,报告显示正常
(2)Html报告中,MinTime和 Max Time 显示为NaN
解决方法一:
jmete-lib目录下这两个jar包,复制到ant的lib目录下即可
解决方法二:在xml文档中引用这两个jar包即可
(3)Jenkins构建时遇到SSL警告
解决方法,需要在JDBC Connection Configuration的Database URL中,增加三个参数:useUnicode=true&characterEncoding=utf8&useSSL=false
(4)Jenkins构建时 控制台提示jmeter.log 权限不足
解决方法:进入到jmeter.log的目录下,对该文件的权限进行变更
8. 分享中提到的关于TestReport的名称优化目标:使展示的TestReport展示成变化的值(本身展示的是index.html)
(1)在Jenkins中安装插件
(2)进入系统配置
进入jenkins 对应的jmeter自动化的Job中,点击Configure,我们去修改一下当时的配置,
修改构建后 *** 作(Post-build Actions),将原先设置的index.html改成和 TestReport${time}.html,点击save
我们来构建并查看报告,看下是否达到我们想要的效果
一、JMeter简介
二、JMeter 基本使用
1. 启动Jmeter
2. 设置为中文版(根据个人喜好)
3. 配置元件-Http cookie管理器
4.断言
5.接口关联(Json提取器&正则表达式提取器)
(1)Json 提取器
(2)正则表达式提取器
6.Jmeter数据驱动
(1)添加配置元素-CSV Data Set Config
(2)用函数助手参数化-从csv文件取数据
(3)计数器
7.JDBC Request
(1)配置
(2)Jmeter中数据库 *** 作
(3)JDBC Request 结合后置处理器-正则表达式提取器
8.函数助手
9.BeanShell
10.Jmeter事物/模块控制器
三、Ant简介
四、Jenkins介绍及安装配置
五、Jmeter自动化测试的配置
1. 原理
2. Jmeter.property配置
3. Ant配置
4. Jenkins 配置-相关插件安装
5. 邮件通知配置
6. Ant build.xml 文件
6. 运行-看结果
7. 配置过程中遇到的问题总结
(1)jenkins html 报告格式丢失
(2)Html报告中,MinTime和 Max Time 显示为NaN
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)