Jmeter接口功能测试
jmeter接口:
接口:接口是数据传递的通道。每个接口都有的参数:接口地址、接口参数、接口请求方式、接口返回结果
接口功能测试的流程:测试计划(进程)-线程组-线程(HTTP请求等)
所有的元器件都需要添加在线程组中,监听器除外(可以放在里面也可以放在外面)
ps:三者的关系,一个进程可以包含多个线程组,一个线程组可以包含多个线程
执行的顺序(不一定会全部用到):
1:测试计划 起点,所有组件的容器
2:线程组 一定数量的用户
测试片段(特殊的线程组,可以分模块管理测试用例,比如大的项目接口比较多的情况,分工来测试接口)
在测试片段中添加HTTP请求,其他步骤跟正常一样填写,然后保存。
测试片段不能独立运行,需要保存下测试片段然后在线程组中添加一个**include逻辑控制器**把测试计划包含起来才能使用。
一个include控制器包含一个测试片段,这些控制器都在一个线程组中。一个测试片段可以添加很多个接口。 <u>(但是这些情况是在接口多,团队协作分模块管理的情况下使用的)</u>
3:配置原件 配置信息
4:前置处理器 在请求前的工作
5:定时器 负责在请求之间的演出间隔
6:取样器 像服务发送请求的最小单元
7:后置处理 在请求之后的工作
8:断言 用于判断请求是否成功
9:监听器 负责收集结果
?:逻辑控制器(控制取样器)
每一个组件的作用范围?
**会作用于父级组件、同级组件、同级组件下的子组件。**
没有接口文档怎么办?
**1、****抓包(但是有点麻烦)**
**2、录制脚本****(三种方法在一片单独的笔记里)**
做接口功能测试一个简单的步骤():
做接口测试我们需要借助接口文档,如果没有接口文档的情况下,也可以通过抓包来抓取想要的信息
添加线程组,线程组中添加取样器也就是HTTP请求,在HTTP请求下需要添加配置原件:信息头管理器、cookie管理器、请求默认值(在接口比较多的时候会用到),在线程组下面添加监听器查看结果树,在HTTP请求界面填写好内容(比较容易出错的就是IP路径和入参),请求头输入到信息头管理器中,如果没有cookie的话就不需要,然后开始跑接口,在查看结果树中查看是否跑通,返回的数据与接口文档中的数据是否相同,相同则没有bug。
以下两张图片可供参考:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ss9PSp88-1664240393733)(assets/image-20220816110326-hxcxuwa.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QI7Ek0EM-1664240393735)(assets/image-20220816110601-bll6ydl.png)]
jmeter比较常用的功能:
jmeter动态关联(两种方式):
后边的许多接口会依赖于前边的接口,需要我们动态的从前边接口返回的数据中把需要的数据提取出来,作为后边接口的入参进行请求
正则表达式提取器关联:
创建完HTTP请求之后,在需要被提取数据的那个请求下添加一个正则表达式提取器。这里先解释一下正则提取器页面的内容都是什么意思:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IftuqIX8-1664240393736)(assets/image-20220816094729-251xog7.png)]
Apply to:应用范围
Main sample and sub-sample:匹配范围包括当前父取样器并覆盖自取样器
Main sample only:仅父取样器
Sub-sample only:仅子取样器
JMeter Variable:支持Jmeter变量值进行匹配
要检查的响应字段:
主体:响应数据的主体部分,去掉Head
Body:针对替换了转义码的Body部分
Body as a Ducument:返回内容作为一个文档进行匹配
信息头:只匹配响应协议头
Request Head:只匹配请求协议头
URL:只匹配URL连接
响应代码:匹配响应代码,200等
响应信息:匹配响应信息,如success,OK等字样。
然后配置正则表达式提取器:
引用名称:匹配出来的值通过此名称进行引用(自行定义的)
正则表达式:提取器使用此字符串提取值(使用左右边界值来判定)
模板:指定匹配成功的字符串,一般格式为,为匹配成功的第一个,$0$代表全文匹配
默认值:如果没匹配到,就用这个默认值
然后需要使用这个变量的接口直接在入参中调用就可以了(一般格式为“${引用名称}”)
json提取器关联:
当需要被调用数据的接口返回的数据是这种格式时我们可以使用这种方式。
和正则表达式提取器一样,也是在后置处理器中添加,json提取器或者是json extractor
然后就是配置json提取器,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GUzy2w3m-1664240393738)(assets/image-20220817115937-ecuvo9s.png)]
Variable name:变量名称(下边接口取值的引用名称,自定义)
JSON Path expressions:填写jsonpath,格式:$. 节点名称,根节点用 “.” 表示,这里代表目录级别,
Match Numbers:0代表随机,-1代表所有,其余正整数代表将在检查的内容中,第几个匹配的内容提取出来。
Computeconcatenation var(suffix_ALL):是否统计所有,即将匹配到的所有值保存,名为“变量名_ALL”(这个根据需求选择是否勾选)
Default Values:找不到时默认值,一般设置为NOT FOUND
然后在需要调用这个数据的接口入参那直接调用就可以了(一般格式为“**${引用名称}**”)
jmeter参数化(四种方式):
参数化是自动化测试的一种常用技巧,就是将脚本中的一些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则,这样脚本运行时就可以根据需要选择不同的参数作为输入,这种方式通常称为数据驱动测试。从功能方面来讲,某些参数具有唯一性,需要不断的更换新的参数来进行操作,如注册手机号或身份证号,业务操作的订单号等等具有线性业务流程的参数,不能重复使用的参数。从性能方面来说,查询类的业务可能会有缓存处理,所以为了更真实的模拟生产环境,要做参数化
一、CSV Data Set Config
1、我们需要准备需要用到的数据信息,在指定的路径下创建记事本文件,可以是txt或者csv格式。
(把需要的数据按照顺序排列起来,多个数据中间用英文的逗号隔开)这里的案例是一个登陆的接口:
然后在需要参数化的请求下添加CSV Data Set Config组件,如图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FomFH7jn-1664240393741)(assets/image-20220816135549-609qsd5.png)]
2、然后配置控件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F6imNrKF-1664240393743)(assets/image-20220816141636-jbbir3j.png)]
Filename:文件名,指保存信息的文件目录,可以相对或者绝对路径
Fileencoding:csv文件编码,可以不填,默认为UTF-8
VariableNames(comma-delimited):变量名称,用逗号分隔,userName代表参数化文档中的第一列,passwd代表参数化文档中的第二 列,取样器中变量使用格式 **${name},**如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GmHmWd7L-1664240393746)(assets/image-20220816142004-50r299h.png)]
Ignore firstline(only used if variables Names is not empty):是否忽略参数文档第一行,如果有列名的话是需要忽略的,如果没有可以选择false
Delimiter(use’\t for tab’):定义分隔符为’,',若参数化文档中有多列,则每列间用逗号分隔(或者用斜杠)
Allowquoted data:是否允许引用数据
Recycle onEOF:到了文件尾处,是否循环读取参数。因为CSV Data Set Config一次读入一行,分割后存入若干变量交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入
Stop threadon EOF:到了文件尾处,是否停止线程,和Recycle on EOF会有矛盾(优先级自上而下,同时选择Ture,以上边的为准)
Sharingmode:共享模式,All threads –所有线程,Current thread group—当前线程组,Current thread—当前线程。这个地方还是要看CSV数据控件所处的位置(树结构位置),位置不同作用域不同,当放在测试计划下时,All threads模式—所有的线程组都可调用,因为线程组是并行执行,这时取值就就是A线程组取第一个,B线程组取第二个,顺序取值。Current thread group—模式,A线程组按照自己的线程顺序取值,B线程组也按照自己的线程顺序取值,如:A1取第一行,A2取第二行,B1取第一行,B2取第二行。Current thread模式,所有的线程均取第一行,如:A1取第一行,A2也取第一行,B1取第一行,B2也取第一行
二、通过函数助手进行参数化引用
1、点击选项中的函数助手点击下拉框选择**_CSVRead函数**,配置如下[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2SFEAepY-1664240393747)(assets/image-20220816142931-9ii7xc2.png)]
CSV file toget values from | *alias:取值的文档路径
CSV文件列号|next| *alias:取值的列号
点击生成,并复制生成的字符串粘贴到取样器的参数值中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hMFjiG22-1664240393750)(assets/image-20220816143107-je4lty5.png)]
这里的参数是使用的消息体数据上传的,也可以选择参数上传,都是一样的。
三、用户参数方法进行参数化
这个比较简单也是比较麻烦的,可以直接在测试计划或线程组或取样器下点击右键添加-前置处理器-用户参数,因为组件的作用域不同,所以添加的位置不同决定可以调用该参数的位置不同,测试计划下添加用户参数,所有的线程组均可调用该参数,线程组下添加,仅当前线程组可调用,取样器下添加进当前取样器可添加。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ePd1Z1ls-1664240393752)(assets/image-20220816143631-n3n59q8.png)]
也可以删除变量和用户,删除无法选择顺序,只能自后向前删除。
四、用户定义的变量
这个地方并不是类似于前边的几种方式,直接从数据池里取不同的值,不断的变换不同参数,这里相当于定义好变量,方便全局调用,便于修改的时候,可以只修改这一处即可,不用每个涉及到该变量的地方都修改
1、首先在计划或线程组或取样器下右键-添加-配置元件-用户定义的变量
2、然后在用户定义的变量中添加名称和值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdF8Pulp-1664240393757)(assets/image-20220816144045-komf1bn.png)]
3、在取样器中调用时,直接以${name}的格式调用即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gYAgUYmB-1664240393759)(assets/image-20220816144121-ztrf1l1.png)]
在使用时选择一种方式使用就可以了。