• 14
  • 14
分享
  • JMeter接口测试之断言实现——软件测试圈
  • 北极 2021-02-23 15:45:33 字数 2933 阅读 3322 收藏 14

断言是什么

      什么是断言?在接口测试中,我们预设接口响应结果中会出现一个片段,我们称之为预期值,断言会在接口调用后尝试捕捉这个预期值,如果能捕捉到,则判定接口成功,否则判定接口为失败。用过loadrunner的朋友一定记得检查点这个概念,断言和检查点实质上是一样的。

为什么需要断言?因为JMeter默认接口响应码200即为成功:

1.jpg

      其实,接口的业务并非成功。

2.jpg

      为了甄别接口是否实现业务上的成功,我们便需要引入断言。

断言的实现

      在取样器上右键–添加–断言,可以看到,JMeter提供了丰富的断言实现(JMeter版本:5.1.1,下同)

111.png

响应断言

      创建方式:在线程组或者HTTP请求上右键–>添加–>断言–>响应断言,就创建了一个断言:

关于断言的作用域:在线程组上创建断言,则该断言对线程组下所有取样器生效,而在取样器上创建,则只对该取样器生效。

222.png

      一般情况下,我们用默认配置即可。各个项目也简略解释一下。

  • Apply to:即应用范围,一般使用Main sample only模式。Main sample代表主请求,Sub-samples代表主请求下的子请求。

  • 测试字段(Field to test):表示在何种内容中匹配预期字段,一般选择响应文本。

  • 响应文本:接口的Response的全部数据

  • 响应代码:取样器结果中的Response code,常见的有200(成功)、302(重定向)、404(不存在)、400(参数错误)、500(服务器错误)等。但当我们要验证404,501等http响应代码时,需要勾选 ignore status,因为当http响应代码为404、500时,JMeter会默认这个请求是失败的。

  • 响应信息:取样器结果中的Response message

  • 响应头:响应数据的Response headers

  • 请求头:请求的Request headers

  • URL样本:有跟随重定向时,URL样本包含了请求的URL和重定向的URL,否则只包含请求URL。

  • 模式匹配规则(Pattern Matching Rules):即响应数据与预期值的对比方式。

  • 包括(Contains):响应数据包含预期值(相当于String的contains方法),则判定接口成功。支持正则匹配。

  • 匹配(Matches): 用正则表达式匹配返回结果,且必须能匹配整个返回值,而不是返回值的一部分。

  • 相等(Equals):响应数据与预期值完全相同才判定接口成功。不支持正则表达式。

  • 字符串(Substring):与【包括】类似,但不支持正则匹配。

  • 否(Not):取反,也就是前面【包括】等判定结果为true,断言结果为false。反之,前面判定为false,断言结果为true。

  • 或者(Or):勾选此项后,可以设置多个预期值,只要有一项判定成功,则断言判定成功。

  • 测试模式(Patterns to test):预期值表达式,可以是正则表达式,也可以是字符串。可以通过【添加】按钮添加一个或多个,有多个的话,不勾选【模式匹配规则】中的【或者】,则为并集模式,即全部匹配成功才断言成功。

  • 自定义失败消息(Custom failure message):当判断返回值为错误的时候,自定义的失败消息会在断言结果中显示。

      下面用看一个小例子。请求百度:

333.png

      响应数据:

3.jpg

      在【百度一下】请求下添加响应断言:

4.jpg

      执行请求,查看结果树:

5.jpg

      结果被标红,接口判定为失败。可见,你预设的断言决定了接口是否被判定成功。把上面断言中的“百度两下”改为“百度一下”,再次执行,则接口判定为成功。

JSON断言

      JSON断言针对响应结果是applicaton/json格式的请求进行断言。

444.png

      在取样器下右键–>添加–>断言–>JSON断言,就创建了一个JSON断言,界面如下:

6.jpg

  • Assert JSON PATH exists:针对响应结果中特定字段进行提取的路径表达式。

  • Additionally assert value:附加断言值,勾选此项后才能填写Expected value。

  • Match as regular expression:作为正则表达式匹配。

  • Expected value:预期值,这个值将与Assert JSON PATH exists提取到的值对比,一致则判定接口成功。

      下面照例进行一个实例演示。首先,创建一个Beanshell取样器模拟接口,返回JSON数据。

7.jpg

return "{\"code\":0,\"message\":\"操作成功\",\"data\":{\"student\":[{\"name\":\"zhangxu\",\"age\":18},{\"name\":\"zhoushuang\",\"age\":18},{\"name\":\"changhua\",\"age\":17}]}}";

      在该取样器下添加JSON断言,照下图写入:

8.jpg

这里解释一下【JSON Path expression】的写法,首先$.这部分是固定写法,后面根据层级关系去逐级获取数据。
1、$.data表示在JSON串以"data"为key获取value,也就是{“student”:[{“name”:“zhangxu”,“age”:18},{“name”:“zhoushuang”,“age”:18},{“name”:“changhua”,“age”:17}]}。
2、$.data.student对应的是[{“name”:“zhangxu”,“age”:18},{“name”:“zhoushuang”,“age”:18},{“name”:“changhua”,“age”:17}],因此要通过索引定位到数组中的具体对象,也就是$.data.student[0]获取到了{“name”:“zhangxu”,“age”:18}
3、$.data.student[0].name就定位到了“zhangxu”这个值。

      运行脚本,察看结果树显示接口成功。

      如果我们把Expected value改为"zhangxu2",再次运行,发现接口被判定失败:

9.jpg

Bean Shell断言

      这种断言是应对复杂校验的利器,为什么这么说呢?因为Bean Shell断言可以写较复杂的逻辑判断来对结果进行校验。

      还以2.2中的模拟接口为例,创建一个Beanshell断言:

555.png

      运行脚本,察看结果树:

10.jpg

      当然,这只是一个简单的示例,更丰富的用法请见:JMeter Bean Shell Sampler与JMeter Bean Shell断言。

大小断言&断言持续时间

      大小断言:判断响应结果选定部分的字节大小是否与预期的值相符。

11.jpg

12.jpg

      断言持续时间:判断接口的响应时间是否小于等于设定值。

13.jpg


作者:云深i不知处

原文链接:https://blog.csdn.net/mu_wind/article/details/108204489#comments_15058574




  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   据彭博新闻社周五援引知情人士的话报道,拜登政府正在商谈向英特尔公司提供超过 100 亿美元的补贴。据报道,谈判正在进行中,英特尔的一揽子奖励方案可能包括贷款和直接赠款。负责监督 CHIPS 法案资金发放的美国商务部和英特尔公司拒绝发表评论。  美国商务部已经宣布了两项规模较小的《芯片法案》拨款,美国商务部长吉娜-雷蒙多(Gina Raimondo)本月早些时候表示,美国商务部计划在两个月内从政府的 390 亿美元计划中拨款数笔,以促进半导体制造业的发展。  半导体基金旨在为芯片生产和相关供应链投资提供补贴,这些奖励将有助于建设工厂和提高产量。  英特尔计划斥资数百亿美元,资助亚利桑那州和新...
            0 0 721
            分享
          • 前言Jmeter是一款用于测试客户端/服务端结构的软件,不仅可以用来测试静态和动态资源的性能。Jmeter还可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或分析不同负载下的整体性能。今天我就来教大家如何用Jmeter来实现简单的登录测试。第一步:添加线程组在测试计划上右击-添加-Threads–线程组线程数:登录用户人数Ramp-up Period:5s内5个人完成登录,隔一秒就开始登录下一个人循环测试:可以设定请求次数,此处是5个人循环两次,发送10个http请求。第二步:添加http请求默认值在线程组上右击-添加-配置元器件-http请求默认值这是下边sampler相同信息的集合...
            11 11 2990
            分享
          •   据报道,当地时间周二,沃尔玛向员工发出明确指令,要求不得将任何与沃尔玛相关的信息分享至ChatGPT等生成式人工智能系统内。  在发给员工的内部邮件中,沃尔玛负责技术和软件工程的部门沃尔玛全球科技表示,“在注意到给公司造成风险的活动之后”,该部门此前屏蔽了ChatGPT一段时间。“随后,我们花时间评估和制定了一套关于生成式人工智能系统的使用指南,目前已经在沃尔玛内部网络中开放了ChatGPT的使用。”  关于该公司何时屏蔽了ChatGPT,以及所谓的有风险活动是什么性质,沃尔玛发言人没有做出回应,仅仅在声明中称:“大多数新技术既能带来新的帮助,也会制造新的风险。对我们来说,评估这些新技术并...
            0 0 853
            分享
          •   摘要:全链路生产压测,指的是模拟真实场景、使用多样化的流量请求进行全流程、全链路压力测试。传统的性能测试,测试环境资源数量、各链路硬件资源配置、配比与生产环境存在差异,且系统性能会受其他关联方的影响,单交易压测结果无法反映系统真实性能情况。而全链路生产压测可以找到系统的瓶颈点、发现系统潜在风险;有效评估系统的实际承载能力,指导调配服务资源、调整限流策略。  笔者结合自身参与的银行系统全链路生产压测实践经验,针对全链路生产压测的适用场景、风险及难点和解决方案进行了简述及分析,为全链路生产压测的解决方案提供参考。  1、全链路生产压测适用场景  全链路生产压测适用场景广泛,主要适用于以下四种场...
            15 15 2585
            分享
          • 1、AOP相关术语Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点。(业务层接口中所有的方法)Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义(被增强的方法)所有的切入点都是连接点。Advice(通知/增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知,通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动...
            0 0 1294
            分享
      • 51testing软件测试圈微信