首页 > 其他分享 >如何设置自动化测试断言?

如何设置自动化测试断言?

时间:2024-11-22 10:40:20浏览次数:1  
标签:设置 HTTP 断言 验证 接口 测试 自动化

看到这样一个问题:接口自动化测试中,有必要把接口返回的每个字段都进行断言吗?

无论是性能测试还是自动化测试中,要不要设置断言,为什么设置断言,断言的作用是什么,如何设置断言,都是新手容易踩坑犯错的地方。

这篇文章,聊聊我对于断言的理解,以及自动化测试如何断言。

 

1、什么是断言?

先聊聊我对断言的理解。

设计测试用例的方法相信大家都深谙于心,最基本的要素有场景、操作步骤、输入和输出值,目的是验证测试用例对应的业务场景或功能是否如预期实现。

预期输出值可能有一个也可能有多个,在功能测试场景中,我们可以通过界面返回或渲染的结果,与产品需求描述和UI设计进行对比,如果符合需求描述和UI设计,则判定该测试用例执行通过。

这里的断言方式,可以理解为人工通过对比来判断测试结果的正确性。

在接口测试场景中,输入不同的请求参数有不同的返回报文,常见的做法是通过抓包或者观察response body中的返回值来判断程序返回结果是否否和预期。

这里的断言方式,可以人工检查也可以通过工具或者编写代码设置断言来对返回结果进行判断。

所谓断言,就是一种结果判断的手段,即判断结果是或否的方式。

 

2、为什么设置断言?

无论是研发岗还是测试岗位,都要对自己的工作结果进行判断。

研发在本地开发完成后需要自测,判断自己编写的代码是否如需求描述一样实现。测试同学需要对研发提交的代码程序进行各种验证,判断程序实现的功能是否符合需求描述和产品要求,以及是否满足流转到下一阶段(验收/发布)的标准。

用比较专业的话来说就是准入准出标准,而断言的作用就是尽可能通过机器(工具/代码)来进行判断,避免人工检查可能带来的遗漏等问题。

以接口测试为例,一个好的断言设计可以带来如下几点好处:

  • 验证接口返回数据是否符合预期,判断功能实现是否正确。
  • 自动化执行,提高测试效率和准确性,减少人为因素的影响。
  • 当结果不符合预期时,可以帮助技术同学快速排查和定位问题。

 

3、一些设置断言误区

很多新手在刚开始进行接口测试或者自动化测试时,最容易犯的错误就是不设置断言,或断言的对象为HTTP状态码。为什么不提倡和不建议大家用HTTP状态码来作为断言对象呢?原因有如下几点:

首先,HTTP请求本身是无状态的,HTTP状态码只是表达了当前请求的处理情况,与业务正确与否无关。比如出现404状态码时,被请求服务本身可能没问题,而是你的请求URL地址有误。

其次,HTTP状态码只代表了当前请求自身的情况。比如200状态码,代表请求是通畅的,服务端接收了你的请求并成功返回了响应数据,但不代表业务是正确的(下单失败的HTTP状态码也是200,但业务角度来说是失败的)。

 

4、如何设置测试断言?

以文章开头的问题为例,从接口设计层面来看,设置断言至少需要验证如下几点:

数据结构验证:验证接口请求返回的数据结构是否与接口定义一致。服务端在收到请求后,会按照事先定义好的数据结构来解析并处理数据。如果输入的数据结构发生变化或者与事先定义的不一致,则会导致服务端抛出异常。

关键数值验证:根据业务场景不同,可以有目的性的验证某些 key-value 的键值对结果是否符合预期,同时辅以查询数据库进行数据落库确认的方式来综合验证。

举例:假设业务场景是创建订单,如果创建成功,则响应报文中除了HTTP状态码需要返回200之外,还需要设置业务状态码(success status=0)。同理,如果创建失败,则业务状态码success status=1。

要做到这点,有两个制约因素:1-测试同学对业务的熟悉程度;2-接口设计中需要事先对不同的业务场景结果定义不同的业务状态码

其他类型验证:如返回数据必填非必填,URL访问权限校验(授权)等。

还有一些特殊情况,比如响应报文中的数据过多,则建议只对关键业务状态相关的key-value进行断言,其他数据则仅进行格式校验即可。

标签:设置,HTTP,断言,验证,接口,测试,自动化
From: https://www.cnblogs.com/imyalost/p/18562265

相关文章

  • 软件测试员与代码:是必备技能还是可有可无?
    在当今数字化的时代,软件行业蓬勃发展,软件测试员这个角色也备受关注。而一个常常引发讨论的问题便是:对于软件测试员来说,需要会写代码吗?首先,让我们来看看一些数据。据行业报告显示,约70%的高效能软件测试团队中,测试员具备一定的代码编写能力。这意味着,在不少成功的案例中,会写代......
  • 【性能测试】多压力机无GUI模式执行Jmeter脚本
    远程执行参数:-l:后面的文件是生成的jtl结果文件,这和文件名必须不存在,如果已经存在,就会报错。-o:后面的目录也必须为空,有内容也会报错。-e:是用来生成报表报告的,生成的报告结果文件会存在-o后面的文件夹里。参数解释:-n:表示nonguimode,就是非图形化模式-t:即testplan,后跟......
  • 2024考前集训测试37 错峰旅行 题解
    题目描述小Z终于迎来了自己的大学生活最后的时刻,他决定用自己的积蓄来一场说走就走的毕业旅行,并且不玩的开心不上班。然而,他很快就发现这个决定并非那么简单。由于是暑假,假期人多,他既不想错过旅行的最佳时期,又不想在人群中挣扎,预测旅游热门城市的拥挤时段,就像是一道难题摆在他......
  • 【性能测试】Jmeter代理服务器录制APP请求脚本
    jmeter录制手机APP脚本https://cloud.tencent.com/developer/article/1969100这时在jMeter的bin目录下生成了一个安全证书,需要把这个安装证书添加到手机受信任的证书,这个证书的有效期是7天,7天后证书会重新生成。将这个证书发送到手机保存到你能找的到的目录。我的手机是......
  • 示例:springboot单元测试
    @SpringBootTestpublicclassIpAddressServiceImplIntegrationTest{@MockBeanprivateIpCheckServiceipCheckService;@AutowiredprivateIpAddressServiceipAddressService;@BeforeEachvoidsetUp(){//如果有需要初始化的数据或状态,可以在这里设置}@Testv......
  • 做大模型备案的企业看过来,详解大模型备案重难点【评估测试题+备案源文件】
            通过对大模型备案所涉及的测试题、安全评估报告以及其他相关材料的深入分析,本文详细探讨了大模型备案过程中的关键点和难点问题。我们不仅审视了备案流程中的各个环节,还对可能遇到的挑战进行了全面的讨论,以确保大模型的安全性和合规性。文章目录(一)适用主体(......
  • pyautogui模块,PC自动化脚本,截屏
    依赖第三方库pillow,处理图像1.截屏importpyautogui#全屏截屏pyautogui.screenshot("1.png")pyautogui.screenshot(imageFilename="1.png")#截取某范围region=(起始x,起始y,终止x,终止y)pyautogui.screenshot(imageFilename="1.png",region=(1,1,1000,1......
  • python如何通过pytest进行测试函数
    首先要安装模块pytest,在已经安装python的前提下,打开命令提示符或者其他终端,首先升级pip命令是python-mpipinstall--upgradepip升级完pip之后安装pytest命令格式是python-mpipinstall--userpytest首先新建一个py文件,名字叫city_function.py里面编写一个简单函数......
  • 接口测试之python+rquest+unittest分层自动化框架
    一、新建一个项目接口自动化框架设计实战:第一包:config第二包:api组建接口包第三个包:testcase存放用例,第四个包:report包报告包第五包:utils包工具类包第六个包:run二、邮箱设置断言:接口断言参考:讲解稿:首先在pycharm里新建一个项目,然后构建6个包,分别是api构......
  • 接口测试之unittest框架
    接口测试之unittest框架importunittestimportrequestsfromtimeimport*fromjk.HTMLTestRunner3_NewimportHTMLTestRunnerclassCms(unittest.TestCase):@classmethoddefsetUpClass(cls)->None:#类的开始cls.s=requests.Session()@classmethoddeftearDo......