java 单机接口限流处理方案
344
2022-12-18
本文目录一览:
day3
系统提供的web计划里包含哪些组件?
线程组
--HTTP请求默认值
--HTTP cookies管理器
--HTTP 信息头管理器
--HTTP请求
----响应断言
--测试活动
----统一随机定时器
--HTTP 请求
----响应断言
--查看结果树
day4,day5
使用jmeter完成一个简单的接口测试,并且进行断言(熟悉操作),即访问,并测试返回结果中包含文字“”百度一下“”
1.单击 文件--新建,创建了一个测试计划
2.在测试计划上右击--添加-线程(用户)-线程组
3.在线程组上右击-添加--取样器--HTTP请求
4.在线程组上右击-添加-监听器-查看结果树,断言结果(分别点击这两项)
5.在HTTP请求上右击-添加-断言-响应断言
6.在HTTP请求页面中的协议:http,服务器名称或IP:
7.在响应断言 页面中,选择 测试字段 为响应文本,模式匹配规则 为 字符串 ,测试模式 添加文字:百度一下
8.点击绿色的三角形 运行,这时如果没有保存 会弹出 一个提示框问你是否要保存,这时点击YES
点击运行成功后,点击 查看结果树,是红色的叉叉,请求成功,但是断言失败了
分析原因:
既然是断言失败了,问题就出在请求的响应信息,我们先去检查响应信息,发现里面有乱码
现在的问题是如何解决乱码,解决方案有两个:
一 添加BeanShell PostProcessor
1. 在 线程组 右击--添加-后置处理器-BeanShell PostProcessor
2.在该页面中的script中增加 prev.setDataEncoding("utf-8");
3.保存后,点击绿色三角运行
4.查看结果树,这时是绿色通过的,接口测试完成
二 修改jmeter配置文件
1进入Jmeter的bin目录下,找到jmeter.properties文件,以文本形式打开
2 ctrl+F 输入sampleresult.default.encoding,找到这一行
3默认这行是注释的,将ISO-8859-1修改成utf-8,去掉注释符号,重启Jmeter
4.再次请求时会发现响应中不会有乱码了。
利用Jmeter做接口测试怎么做呢?过程真的是超级简单。
明白了原理以后,把零碎的知识点填充进去就可以了。所以在学习的过程中,不管学什么,我一直都强调的是要循序渐进,和明白原理和逻辑。这篇文章就来介绍一下如何利用Jmeter做接口测试的流程,主要针对的是功能测试。暂不涉及到自动化测试和性能测试的内容。
一把来说,主要的步骤都大差不差。
第一步:通过分析API文档和需求文档提取接口清单 。
也就是说,接口测试工作人员工作的开始就是从API文档和需求文档开始的。所以进入公司的第一件事情就是要拿到API文档和需求文档来了解,来看,来分析。从其中提取接口清单的话,主要是因为API文档中有很多冗余,不必要的信息。这些信息可能对于开发人员是有用的,但是对于我们测试人员是没有用的,所以要去除冗余,提取关键信息。
那么怎么提取呢?方法也很简单,从功能模块和方法模块对API文档中的内容进行提炼,提炼的关键是接口三要素:url+方法+参数+返回值。我的建议是可以先将所有的url提取出来,基本上一个url就是对应一个接口的,这样一条线把整体拎起来,就感觉混乱的局面清晰多了。
当然工作中,有的时候我们是可以直接拿到接口清单的,因为清单这个事情一个团队做一份就好了,并不是说要每个人都做一份。但是我们自己得会,得有这个能力。之前看到过一个面试题,问的是,如果没有API文档,怎么做接口测试?
其实问的就是如果没有API文档,应该怎么提取接口清单的问题。很简单,根据需求文档和原型图来提取。有的公司不正规,确实是没有API文档的。或者有的公司API文档写的不规范,那提取的时候,就很考验测试人员的经验和能力了。所以如果能找到遵循restful风格写的优秀API文档,那就好了,提取的时候很方便。
第二步:针对接口清单,做单接口测试和关联接口测试。
在实际测试过程中,单接口测试和关联接口测试的时间是不一样的,这涉及到业务逻辑测试和功能点测试等。但是在测试的时候,他们的逻辑和方法是类似的。
当然这里主要介绍的是单接口测试,因为单接口测试时会考虑各种可能的情况,而关联接口测试一般是建立在单接口没有问题的前提下的。换个角度来说,就相当于是两个层次,单接口测试是基础,而关联接口测试是拔高。
那么具体应该怎么做呢?比如我们这里已经选定而来某一个接口来测试。
首先,根据选定的接口来搭建测试框架 。
接口不是什么大不了的事情,无非就是url、方法、参数、返回数据这四块。这样就意味着,一个接口的框架是固定的,只不过每次传输的数据和返回的数据可能会不一样而已。所以我们要做的第一步就是搭建测试框架。
那么怎么搭建呢?这里就要用到从API文档中整理出来的接口清单和Jmeter了。从接口清单里,可以拿到当下接口的url+方法+参数+预期返回数据。这就是我们搭建测试框架的依据。接下来用Jmeter搭建。
首先需要打开Jmeter,然后基于测试计划,创建线程组,基于线程组创建HTTP请求。考虑到单接口测试,一个框架,要测试N多个数据,而且后面的接口可能也要用到同样的ip地址、同样的content-type,所以一般会先创建一个HTTP请求默认值,将一些可能会重复用到的信息填进去,比如说端口号、协议之类的。如有必要还需要添加HTTP信息头管理器,放一些user-agent、content-type等内容。
好的,有了这两个基础就可以来创建HTTP请求。在新的请求里,已经填写的端口号呀、ip地址呀之类的就无需填写了,只需要填写方法之类的即可。那么搭建框架在哪里搭建呢?一般会考虑para或者body里。比如说,要提交一段json格式的数据,那么就要用body(消息体)来提交,如下图所示。
将从接口清单里拿到的json数据填写到消息体数据里,然后将需要不断传入的数据进行参数化设置,那搭建测试框架就算是完成了。接下来只需要把数据一条一条传入进行测试即可。
那么如何把数据进行传入呢?
其实我们在下面的这篇文章里已经介绍了,传入数据的方法有四种,但主要使用的还是csv data set config 和函数。做功能接口测试,用csv就足够了。那么具体怎么用呢?
星空下:软件接口测试工具Jmeter使用核心详解12 赞同 · 0 评论文章
基于当前的线程组或者请求创建CSV数据文件配置组件。如果这份数据只有这一个请求会用,那么就基于请求创建即可。如果这份数据会被这个线程组里的多个请求使用,那么就基于线程组创建。
创建了以后就需要填入文件了呢?可是文件在哪里呢?这个时候就要稍微停一下jmeter的操作,先去针对当前接口设计测试用例并形成有关文档了。有关于功能接口测试的用例设计,我们之后会专门用一篇文章来介绍,这里先带过。这是因为设计测试用例是做测试过程中最核心的一步。
在测试用例设计完之后,可以将其保存在一个txt文档里,采用utf-8编码,保存到Jmeter脚本的同一父目录下。然后按照上面那篇文章里的设置方法进行设置即可,注意路径可以采用相对路径,便于数据文件的拷贝和使用。
csv组件设置好以后,数据源有了,变量名有了,变量名的赋值也有了,接下来就只剩引用参数就可以了。在测试框架里需要引用参数的地方引用,引用的格式是${参数名}。到这里,针对于某一个接口的测试工作就准备完成了。
然后在Jmeter里面添加查看结果树组件,执行请求,依次查看结果 。看一看返回的数据和我们的预期结果是否一致,不一致,那可能就是一个bug。
做一个小小的总结吧,用jmeter做功能接口测试,其实很简单的。逻辑和原理都是类似的,如果遇到新的项目,可能说会用一些新的组件而已,那百度一下几分钟的事情。在学习软件测试的时候,最重要的就是不要怂,不要看起来说怎么要学的东子这么杂这么多,只要能够拎出其中的线索和主干,然后把一些零碎的点给组装上去,就会感觉,哇,忽然之间,好有条理。
当我们在工作中进行接口测试时,项目的接口肯定不止一个,而是很多很多。而且每个接口都需要进行正确参数,错误参数,参数为空,特殊字符等各种场景来进行测试接口是否能够正确返回所需的响应值。如果需要进行回归测试,则工作量则更大了。如果只需要使用一份CSV文件完成所以的接口测试,那就更方便且更好管理接口。
那么我们该如何通过JMeter来完成批量测试呢? 我们先建立一个较为简单的方式进行测试脚本观察一下。
以一个获取创建订单时的【省/市/区信息】接口:api.test.XXXXXX.com/api/XXXX/XXXX/getAddress 请求方法:post 请求参数:type,code为例:
1.添加线程组
测试计划右键选择添加——线程用户——线程组。
Setup线程组: 用于执行预测试操作
tearDown: 用于执行测试后操作
线程组: 一般测试接口时添加的线程,可以把它看做一个虚拟的用户组,线程组中的每一个线程都可以理解为一个虚拟用户
2.添加HTTP信息头管理器
线程组右键选择添加——配置元件——HTTP信息头管理器
如果接口信息头定义了值的话,需要放到信息头管理器里面,例如:用户token,公共参数等。
3.添加HTTP请求
线程组右键添加——取样器——HTTP请求
协议: 默认HTTP协议,可不填写,若为HTTPS协议需要填写HTTPS。
服务器名称或IP: 填写接口域名
端口号: 默认HTTPS请求的80,若为HTTPS请求需要填写443
方法: 直接选择接口的请求方法:GET,POST,PUT,DELETE即可。
路径: 填写接口的具体路径
参数: 点击下方导航栏添加按钮,在已经添加的数据栏填写参数名,参数值。
4.添加察看结果树
线程组右键添加——监听器——察看结果树
左边:展示请求名,绿色请求结果表示请求成功,红色请求结果表示请求失败。
右边:展示请求值,包括取样器结果,请求头,请求体,响应头,响应体。
以上步骤能够确保接口正确的进行访问并返回对应的返回值。
完成以上步骤后,下一步就是要把上面步骤的所有的值以参数的形式传递给JMeter脚本,使我们能够以参数化的形式对接口进行批量测试。
5.添加循环控制器
线程组右键添加——逻辑控制器——循环控制器,循环控制器添加后需要把【HTTP信息头管理器】【HTTP请求】移到【循环控制器下】
循环次数:运行脚本后循环控制器下的HTTP请求将执行的次数。例如:循环控制器的计数为1,则发送HTTP请求1次;计数为5,则发送HTTP请求5次。设置为永远则需要手动停止请求,否则不会停止请求。
6.在循环控制器下添加CSV配置文件
循环控制器右键添加——配置元件——CSV数据文件设置,CSV文件里面定义接口所需要动态取值的参数,例如:URL,路径,请求方法,接口参数等。
a)如何创建CSV文件?电脑桌面新建TXT文档,更名为:测试参数文档.CSV(TXT后缀需要变更为CSV),打开CSV文件新增数据。
b)文件内参数如何书写?第一行定义接口所需动态参数,自第二行起填写接口详细值。
caseSeq: 定义接口序号
apiSeq: 每个接口序列
apiName: 接口名称
url: 接口域名
api: 接口地址
function: 接口请求方法
purpose: 描述接口验证类型
parameter: 接口所需参数拼接,以:“code=500000type=city”的形式,参数间以“”连接
c)csv数据文件如何设置
文件名: 点击浏览后选择本地的CSV文件
文件编码: 一般情况下无需设置
变量名称:
“caseSeq,apiSeq,apiName,url,api,function,purpose,parameter”,参数之间需要用英文的逗号隔开,注意参数不要写错。
忽略首行: True则不执行CSV文件的首行,False则执行CSV文件首行。
分隔符: 英文逗号,无需变更
是否允许带引号: 设置True和False以当前CSV文件都能正常执行
遇到文件结束符再次循环: True则在设置的循环次数内一直循环,False则CSV文件所有数据循环一次后就停止。
遇到文件结束符停止线程: True则在设置的循环次数内执行到CSV文件数据为空时停止发送HTTP请求,False则在设置的循环次数内执行到CSV文件数据为空时继续执行。
线程共享模式: 选择所有现场即可
综上: 本次CSV文件设置时:循环次数“永远”,忽略首行“True”,是否允许带引号“False”,遇到文件结束符再次循环“False”,遇到文件结束符停止线程“True”,线程共享模式“所有现场”
7.其他配置文件需要修改写入形式
HTTP信息头管理器:除必要参数外,添加:“Content-Type=application/x-www-form-urlencoded”,使用Json参数需要用到
HTTP请求:名称设置为:“${caseSeq}_${apiSeq}_${apiName}”动态取CSV文件里面配置的参数信息;IP:“${url}”;方法:“${function}”;路径:“${api}”,消息体数据:“${parameter}”消息体数据和参数只能设置一种,不能两种同时设置。
8.执行CSV文件,查看结果
可以看到左边能够很清晰的反应接口执行的信息,右边可以很明确的反应接口返回的数据。并且CSV文件内可以设置众多接口的不同验证方式,很方便且很适合日常工作使用。希望以上内容能给大家提供帮助,谢谢。
操作步骤:
1、指定接口功能测试相关测试计划
2、从 API 文档提取接口清单
3、编写测试用例并设计测试数据
4、编写测试脚本并导入测试数据
5、执行脚本并逐条比对每条测试数据的实际结果与预期结果是否一致
各步骤主要实现:
1、指定接口功能测试相关测试计划
对程序不同模块进行任务划分,一般包括: 模块以及相关描述,指定该模块主要责任人,工期,预期产出以及当前进度等
2、从 API 文档提取接口清单
API 文档对各个接口实现具有完整且详细的流程说明,以及举例,但是对于我们测试而言,内容相对冗余,测试前期,一般会对API文档的各个接口,进行简化,压缩,提取接口测试时必须数据,以提高接口测试效率,其中简化压缩的结果就是接口清单
3、编写测试用例并设计测试数据
功能测试时,模拟用户的多样性操作设计测试数据是核心实现之一,该过程大致通过两步骤实现:
步骤1: 设计测试用例,该过程是抽象的非具体的实现,是要声明预期使用那些类型的测试数据,而不设计具体数据,设计测试用例时原则主要有如下几点:
a)、覆盖所有必选参数
b)、组合可选参数
c)、设计边界值数据
d)、设计超出范围的数据
e)、覆盖所有枚举值
f)、设计错误数据
g)、设计特殊符号数据
.....
另外,设计时需要在测试用例中声明该接口访问的 URL,请求方式以及预期结果等
步骤2: 根据测试用例声明的数据类型,设计具体的测试数据,此过程为具体非抽象的实现,最终设计的数据一般会被保存在csv文件中
4、编写测试脚本并导入测试数据
功能测试时,需要针对同一功能脚本提交多条不同的测试数据,此实现中,一般使用 CSV Data Set Config 来读取批量数据,动态的参数化的获取并设置测试数据,可以提高测试效率
5、执行脚本并逐条比对每条测试数据的实际结果与预期结果是否一致
步骤4批量操作完毕,要将提交的每条测试数据的执行结果与测试用例中对应的执行结果,相比对,如果预期与实际结果一致,一般无 BUG,不一致时,则可能有 BUG,当然对具体实现有疑议,可以写入备注
以上内容均来自传智播客论坛,还有相关配套视频课程。找不到就官网对话框领取。
在使用Jmeter进行接口的性能测试时, 由于Jmeter是JAVA应用, 对于CPU的内存消耗比较大, 所以, 当需要模拟数以万计的的并发用户时, 使用单台机器模拟所有用户并发就会有些力不从心了, 还会引起JAVA的内存溢出错误, 为了让Jmeter工具提供更大的负载能力, 这时可以使用Jmeter提供的分布式功能来启动多来电脑实施压力测试。
此时打开Jmeter添加一个请求(记得添加一个聚合报告方便查看测试结果), 线程数设置为n个, 然后点击导航栏运行----远程全部启动, 等执行完毕后查看聚合报告 Samples 如果是线程数的两倍就表示成功啦!
如果有参数化文件,那么在负载机同样的位置上也得有一个参数化文件
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~