Jmeter接口自动化

Jmeter接口自动化,第1张

Jmeter接口自动化

目录

变更记录变更日期变更说明附件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文件

计数器演示.csvjmeter数据驱动演示.csv

一、JMeter简介 二、JMeter 基本使用 1. 启动Jmeter

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 文件

  1. 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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5624459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存