首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >漫谈服务端测试

漫谈服务端测试

作者头像
无涯WuYa
发布于 2020-02-25 05:09:43
发布于 2020-02-25 05:09:43
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

熟悉金字塔的同学都知道,整个分层在大的分类思想上分三层,除了单元测试层外,基于把另外两个层次分成客户端的自动化测试和服务端的自动化测试。基于客户端的测试使用最广泛的还是Webdriver框架,但是在快速交付的速度中基于UI的自动化测试收到各种局限,这种局限主要来自于维护的成本高和不可确定性,但是并不能说UI自动化测试没有它的价值,事实上任何一个测试的技术需要应用到合适的场景和环境中。在服务端的自动化测试体系中,可以分为工具类和代码类,工具类主要是PostMan和JMeter等测试工具,代码类比较广泛,如JavaPython等其他主流语言。服务端的测试相比客户端的测试方式,能够更加体现出测试的效率,不管是覆盖率的覆盖还是测试执行的效率上。

PostMan测试工具在工作中应用非常的广泛,几乎在工作中开发和测试都会使用到,在PostMan的测试工具中可以很好的处理要测试API的断言以及API基于业务场景的上下关联。PostMan也可以很好的把每个测试的case整合到一个collection中,这样导出collection后,可以和newman工具整合到一起形成命令行的执行,基于命令行就可以很轻松的和CI整合起来

JMeter测试工具可以做功能的自动化测试,以及性能自动化测试,其中做API的自动化测试很具备优势,在JMeter的测试工具中可以很轻松的分离测试的数据,测试的case之间的参数关联调用,测试数据的参数化整合,以及在JMeter中对cookie和请求地址很好的进行分离,完全的可以一套测试脚本就可以使用在多个测试环境中,需要做的就是在请求默认值里面修改下不同环境的请求地址而已,维护起来成本也是很低的,和ant整合后,很轻松的在CI整合起来,执行后形成基于HTML的测试报告以及性能测试报告,在JMeter的测试工具中即使有测试的case有1000+,它的执行速度也是很快的,基本5-7分钟就会出结果,很适合上线后的自动化测试回归验证和环境部署后的冒烟测试验证。

在Python的语言中提供了unittest和Pytest的测试框架,可以很轻松的把要测试的case整合成测试套件,然后批量执行所有的case,生成基于HTML的测试报告。这中间关于测试使用到的数据也是需要考虑处理的,其实在业务的立场上,重点需要清晰的知道输入是什么,然后中间处理,最后输出,我一直认为在API的自动化测试中,尽量的自己生产数据然后自己消费数据,这样在开始执行前环境是什么样,执行结束后环境还是什么样,当然中间会会涉及到业务逻辑的判断和处理。这样思考的目的是不需要刻意的为了自动化测试而造数据,造数据本身在成本上就很高,另外的点就是造的数据不一定就符合业务的场景和逻辑。基于这样的思考逻辑,我们可以把数据处理的分三个过程,其实刚才也有说过,只不过更加清晰化,它就是:输入--->处理--->输出。在基于业务场景的测试中,输入的过程其实本质上就是走基本的业务逻辑,随着测试点的执行创造测试数据的一个过程,而处理事实上就是再有了输入的前提的条件后,后面的业务场景的测试数据由于有了输入的过程,也就有了处理的数据,最终达到了一个完整业务链的验证和验证,也就是输出,达到了测试的目的和手段。这也符合思考过程的三个部分。

在自动化测试的过程中,既然有了PostMan,JMeter的测试工具,能够满足API的自动化测试,那么是否需要基于代码的自动化测试了,这是肯定的,因为工具并不能够满足所有的需求,工具不能满足需求的部分,就是需要代码去自定义来完成这部分。比如只想完善一个yaml的文件,期望就可以验证API,Tavern就可以很好的满足这个需求,如下的yaml文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
test_name: Get some fake data from the JSON placeholder API

stages:
  - name: Make sure we have the right ID
    request:
      url: https://jsonplaceholder.typicode.com/posts/1
      method: GET
    response:
      status_code: 200
      body:
        id: 1
      save:
        body:
          returned_id: id
---
test_name: 测试httpbin.org/get的响应时间

stages:
  - name: 测试httpbin.org
    #重试次数
    max_retries: 1
    request:
      url: http://httpbin.org/get
      method: GET
    response:
      status_code: 200
      body:
        url: http://httpbin.org/get
#---
test_name: test restful get token

marks:
  - skip: this is a skip test
stages:
  - name: get token
    request:
      url: http://localhost:5000/auth
      method: POST
      json:
        username: wuya
        password: asd888
      headers:
        content-type: application/json
    response:
      status_code: 200
---
test_name: webservice的请求

stages:
  - name: get mobilecode
    request:
      url: http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo
      method: POST
      data:
        mobileCode: 13484545195
        userID: ""
      headers:
        content-type: application/x-www-form-urlencoded
    response:
      status_code: 200
---
test_name: add book

stages:
  - name: 多个断言信息
    request:
      url: http://localhost:5000/api/books
      method: POST
      json:
        author: 无涯
        done: true
        name: API测试实战
    response:
      status_code: 200
      body:
        author: 无涯
        name: API测试实战
        done: true
        #在响应中匹配任意返回值
        id: !anyint
    delay_after: 5
---
test_name: 查看编号为N的书籍信息

stages:
  - name: assert test
    request:
      url: http://localhost:5000/api/book/1
      method: GET
    response:
      status_code: 200
      body:
        status: 0
        msg: ok
        datas:
          - { author: wuya }
    delay_before: 3
#---
#test_name: 检查使用外部的函数
#
#stages:
#  - name: verify_response_with
#    request:
#      url: http://localhost:5000/api/book/1
#      method: GET
#    response:
#      status_code: 200
#      verify_response_with:
#        function: testing_utils.py:message_query_book
#接口之间的数据传递和值引用

到该文件的目录下,执行如下的命令,就可以很轻松的实现验证上面的接口信息,如下图所示:

这个过程中,并没有编写任何的一行代码,只是维护了一份yaml的文件,但是就可以验证上面对应的API,其实不会写代码,只需要懂得这一份文件维护的规则,也完全的能够做到自动化的测试。

谈到API的测试,那么针对API的测试,可以分为单个API的验证和基于业务场景的链路验证,单个API的验证,并不涉及到业务,只单纯的验证这个API是否满足业务方的需求,针对这样的API它的测试点主要为:

1、验证必填参数是否为空

2、验证参数的数据类型是否做了校验

3、验证参数的字段⻓度是否做了校验

4、接口的安全性校验和性能校验

前面三个都是很好理解的,主要是第四点,如何的来验证接口的安全性校验,特别是被测试的API是涉及支付,主要测试的点为

1、是否增加了反爬虫的机制

2、是否增加了请求次数的限制

3、是否增加了对应的请求头信息

3、是否增加了鉴权的认证信息(基本认证,常规认证,自定义认证)

4、是否对请求进行了加密

5、是否在被请求的服务端增加了IP的限制(白名单设置和IP的限制请求)

防止的手段很多的,就看在什么样的立场和什么样的环境下来使用,如果被测试的API即使涉及支付,但是产品基本没人使用,它的安全性校验是否有必要也是值得思考,但是从另外一个角度思考,既然是测试的API那么就有一定有它的用户,只不过用户数量的多少而已,从这个角度来说,不管什么样的测试技术,都得在业务的角度来思考问题然后制定它的测试策略和测试的方式以以及手段,如果完全的脱离了业务就显得有点空中楼阁了。

基于场景的很好理解的,这样的思考主要是基于产品完整链路的思考,在更加底层的维度思考,我们终究是在测试业务,只不过测试业务的过程中会使用到很多的测试技术来达到保障业务的按期交付和符合质量要求,那么基于业务场景的API测试可以理解为按产品的输入为主,最终达到产品的输出为标准,这个过程就涉及到业务场景,参数的关联性等。关于编写的模式,在API编写测试用例的文章里面有很详细的介绍。

不管是测试工具还是基于代码的测试方式,这些只是实现服务端测试的一个手段和过程而已,最重要的是需要理解它的本质和这个过程。在基于微服务的架构模式下,通常采用轻量级的通信方式(Rest AP,gRpc),这样的一个通信过程中包含了同步通信以及异步通信,也就是请求/响应和异步请求/响应(发布/订阅模式)。只所以需要详细的了解这个过程是因为不管是工具还是代码,我们需要清晰的知道请求地址,请求参数,请求头以及客户端发送请求后与服务端的交互,如常用的数据格式主要为:

在微服务的架构下,组件测试也是越来越广泛,同时契约测试的场景也是逐步的增加,基于消费者驱动模式下的测试,就需要使用mock的方式来解决这样的问题,很常见的场景是你要测试A功能,但是A功能的数据是B服务提供的,但是B服务瘫痪了无法启动,A功能的测试进度又不能耽误,那么只能mock数据来模拟B服务提供给A的数据来完成A的测试进度。

就单纯的在测试的角度考虑下,如果对一个产品的测试,在进行部署发布后,第一步进行冒烟测试,下来外部依赖API的测试,接着基于场景的API的测试,最后UI的自动化测试,这个过程中围绕一个点执行失败,就接着执行下一个点,如果一个步骤执行失败,那么后面的也就无法执行,执行失败的进行钉钉或者等其他消息通知到对应的人,这样的一个过程见如下图:

当然中间能够和开发打通,从提交代码开始一直到UI自动化测试结束,这个过程就完全的不需要人参与进去,那么剩余的工作就是自动化测试没有覆盖到的进行验证。

在《质量免费》的经典书籍中,作者谈到质量只所以不被认可,最主要是一个原因是对它进行度量,所以好与坏在本质上是没有区分的,比如第一份20个bug,第二月份10个bug,假设问题的级别都是一样的,但是没有去统计,那么在领导层面,第二月份和第二月份是没有区别的,都是存在问题的,这中间并不会看到研发团队的改善过程,就像《凤凰项目》里面最初是把所有的问题在墙上展示,但是后来墙上的问题越来越少,改善的过程也就很明显的,一目了然的能够看到,所以度量是一个非常重要的过程。比如覆盖率,完善了产品的百分比,节省了多少人力的投入等维度进行统计和度量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
漫谈Tavern之API实战
在API的测试用例编写文章和接口测试维度的文章中体系中,详细的介绍了API测试点编写和涉及到的知识体系。其实在更加细致的角度上,API的测试也是需要考虑它的分层,很多时候我们听过金字塔的模型,以及基于金字塔模型演变后的菱形,后微服务架构模式下新的金字塔的模型,其实就单纯的API的测试角度上,也是存在它的分层,关于分层,在后面的文章中会详细的介绍少。在平常的工作中,我们接触到的API的测试,主要是基于这么几个维度,分别是单个API的验证,外部依赖API的验证,和基于业务场景的API验证。
无涯WuYa
2020/02/25
1.8K1
轻量级测试框架Tavern(二)
在轻量级测试框架(一)中,可以很清晰的看到Easy to Write, Easy to Read and Understand的设计。下面我们还是结合复杂的API测试用例来看这部分的应用,也就是说我们依据前面的案例逐步的分离出响应数据和请求头信息,以及API接口之间的依赖关系,原始的Yaml文件内容为:
无涯WuYa
2021/07/09
1K0
2022测试开发面试题大全(包含测试基础|接口测试|自动化测试...)
在我认为,对于测试面试以及进阶的最佳学习方法莫过于刷题+博客+书籍+视频+总结,前几者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。
程序员白楠楠
2022/03/17
4.5K1
服务端测试之业务关联
在整体的测试效率而言,API测试技术是提升测试效率最有效的手段之一,因为它的执行效率是非常高的,另外一点就是前后端的分离开发的模式,也需要我们更多的精力和时间投入到API的测试技术以及API的测试技术在企业的落地和应用。当然,这仅仅是功能层面的,还需要考虑非功能的点,比如队列,调度机制,服务的性能测试,稳定性的因素,这些是非常多的。在本篇文章中,只单纯的考虑API测试技术中关于关联的解决思路和案例应用。API测试的核心,其实并不在于单个API的测试,单个API无法保障业务的覆盖度,所以我们更多需要结合业务场景来测试这些点,但是一旦结合具体的业务场景,也就涉及到关联的思路,所谓关联,其实我们可以理解为上个API的输出是下个API的输入部分。下面结合主流的测试工具以及代码来演示这部分的具体解决方案和案例实战。
无涯WuYa
2021/12/02
6120
服务端测试之业务关联
领导叫我做接口测试,我好慌!
不要慌,问题不大! 此文主要献给在工作中接触接口测试,在群里咨询,公司叫我测试接口我该怎么去进行?测试用例怎么设计呢?还有我都不知道该怎么下手。我们来从做接口测试的前提以及接口测试必要的基础去分析分析。
测试小兵
2019/09/24
8820
我保证你一定会喜欢的几个好用的 API 测试工具
国产的开源 API 工具,十分轻量,因为有插件系统所以可以自己组合相应的功能。支持 HTTP、Websocket 协议测试,还支持导入 swagger、文档管理、Mock 等功能。
前端菜鸡2号
2022/11/15
4190
功能测试怎么转自动化测试
来源:http://www.51testing.com 一、前言   我接触了太多测试同行,由于多数同行之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作?5年以上的同行。?我?从事软件自动
顾翔
2020/09/23
1K0
功能测试怎么转自动化测试
漫谈接口测试
在前面的很多的文章对中接口测试有很多的介绍,包含了常用的接口测试工具postman,以及测试工具Jmeter(目前在持续介绍中)和使用Python代码来做产品的接口自动化测试。一个问题,一起思考,我们为什么要做接口测试?我们为什么不做UI的自动化测试了?曾经有那么的一段时间,我是很倡导UI级的自动化测试的,因为它的出现,解决了手工测试的事情,而且也可以对浏览器进行兼容性的测试,当然还有很多的优点,也许最大的优点就是我下班的时候执行我的UI自动化测试,早上来我可以看到测试报告,然后感觉有那么一丝的成就感,但是渐渐的我不那么的喜欢了。首先就是在晚上上线的时候,它对我没有帮助,或者说帮助不大,0点上线,大家都等待着冒烟测试的结果,如果执行UI自动化测试,时间是1-2小时,也许更长,这么长的时间,我有耐心可以等下去,但是其他人没有,另外一个深层次的问题是产品每个迭代UI都不不断的调整,即使框架是多么的完美,但是谁受的了每次的调整,这个能够抱怨产品经理吗?市场在变化,客户在变化,产品必须满足客户的要求并且随着市场的变化而进行调整,这是毋庸置疑的,这种调整不几个版本能够调整出来的,找到用户的痛点并且总结出高频的用户场景不是一件容易的事,应用市场有那么多的产品,失败的无人搭理的远远大于成功的产品数,所以某些程度上,产品的调整更多是战略上的思考,而这些作为测试来说,只能配合,那么UI的不断调整不断维护,给人更多的是一种力不从心,或者是质疑,自动化真的就那么的重要并且真的解放了测试的人力问题吗?不得不承认,这个问题我听到过很多次,也有人问过我很多次,每一次改进,都必然经历质疑和怀疑,这点只能使用未《未来简史》里面的一段话来作为回答:人们只所以不愿意改变,是因为害怕未知。但是历史唯一不变的事实,就是一切都会改变。如果不改变,一切就又回到了最初的原点,进行手工测试,这些很多人不愿意接受而又迷茫的地方,一方面我们相信技术可以促进生产力的进步,在一定程度上可以解放人力的劳动,另外一方面就像上面描述的陷入到了UI自动化测试的死局。任何一个技术,都有它存在的比必然价值,但是选择适合自己的测试技术是最佳的一种选择。
无涯WuYa
2018/10/24
5770
轻量级测试框架Tavern(一)
Tavern是一款轻量级的测试框架,集合Pytest的测试框架,可以把测试的描述信息(API的请求信息)以及测试断言都可以编写在Yaml的文件中,然后结合Pytest的测试框架直接解析Yaml就可以来批量的执行。在Tavern的测试框架中,它追求的是“Easier API testing”的设计理念,不过从目前实践的应用来看,它是符合这样的一种简单的模式的,Easy to Write, Easy to Read and Understand。
无涯WuYa
2021/07/09
9700
API测试工具-HttpRunner
目前市场上存在众多 API 测试工具,例如 Postman、SoapUI、JMeter 等,它们各具特色,广泛应用于 API 的开发与测试工作。
wangmcn
2024/04/03
3830
API测试工具-HttpRunner
一个简单的HTTP请求和响应服务-httpbin.org
现在越来越多的测试人员除了功能测试外,都已开始接触并进行接口测试。在学习接口测试时,尤其对于测试新手来说,接口测试工具上怎样填写请求地址、方法、请求参数等,还是多多少少有些困难,而且往往找不到合适的调试与请求的接口服务地址而无从练手。好一点的可以自己搭建一套接口 mock 服务,来模拟接口的请求,或者访问现有的网站直接请求,如百度首页等,但这也有一些限制,调用的一些参数有些局限,就比如提交数据、获取图片等。
wangmcn
2023/01/05
2.6K0
一个简单的HTTP请求和响应服务-httpbin.org
服务端测试实战(一)
在基于敏捷的测试金字塔模型中,把测试的层次分为三层,其中最底层的是单元测试,中间层是API测试,最上面层次是UI层,基于saas化的架构模式以及新的思想层次,我们可以更加细化的,增加组件测试,具体如下图所示
无涯WuYa
2021/01/18
8370
python接口测试之token&session处理(十三)
在python接口测试之token&session处理(十二)中我们介绍了cookie,以及session和使用postman怎么获取token这些,本小节我们来看怎么使用jmeter测试工具来进行接口的自动化测试。
无涯WuYa
2018/10/25
1.3K0
python接口测试之token&session处理(十三)
测试进阶必备,这5款http接口自动化测试工具不要太香~
现在市场上能做接口自动化测试的工具有很多,一搜一大把,让人眼花缭乱。我们去选择对应实现方式时,不管是框架体系还是成熟稳定的工具,核心目的都是期望引入的技术能在最低投入的情况下达到最优效果。
伤心的辣条
2022/09/08
1.2K0
测试进阶必备,这5款http接口自动化测试工具不要太香~
学会 IDEA 中的这个功能,就可以丢掉 Postman 了
转自:oschina 作者:凯京技术团队 my.oschina.net/keking 前言 接口调试是每个软件开发从业者必不可少的一项技能,一个项目的的完成,可能接口测试调试的时间比真正开发写代码的时间还要多,几乎是每个开发的日常工作项。所谓工欲善其事必先利其器,在没有尝到IDEA REST真香之前,postman(chrome的一款插件)确实是一个非常不错的选择,具有完备的REST Client功能和请求历史记录功能。但是当使用了IDEA REST之后,postman就可以丢了,因为,IDEA REST
程序猿DD
2023/04/04
3330
学会 IDEA 中的这个功能,就可以丢掉 Postman 了
聊一聊接口测试是如何进行的?
在进行接口测试前,需要对涉及的接口文档进行熟悉,明确接口功能、输入输出参数、协议类型(HTTP/RPC等)、数据格式(JSON/XML)、鉴权方式等。
漫谈测试
2025/04/16
1820
聊一聊接口测试是如何进行的?
推荐三款常用接口测试工具!
接口测试是软件开发中至关重要的一环,通过对应用程序接口进行测试,可以验证其功能、性能和稳定性。随着互联网和移动应用的快速发展,接口测试变得越来越重要。为了提高测试效率和质量,开发人员和测试人员需要使用专业的接口测试工具或框架来自动化测试流程,减少人工测试的工作量和错误率。
测试小兵
2024/04/11
3.2K0
推荐三款常用接口测试工具!
自动化测试+性能面试题整理–个人最新【持续更新】「建议收藏」
公司要求招一名自动化测试,能力要求不高,1年左右自动化经验+部分性能经验即可,让我出一份题,我就百度+公司项目遇到的问题,出了一份,出题整体思路是:接口自动化问题+性能问题+规划的ui、app自动化+整体质量体系建设等多方面考虑。下面是正题
全栈程序员站长
2022/11/11
2.4K0
自动化测试+性能面试题整理–个人最新【持续更新】「建议收藏」
2021年软件测试领域常用工具总结(2):接口测试工具、UI测试工具
大家好,我是洋子。接口(API)测试对我们来说已经很常见了,目前很多公司都会招聘服务端测试工程师进行接口测试。因为在测试三层金字塔当中,接口测试位于中间层,做接口测试性价比较高,容易以较低成本暴露发现服务端的问题,同时也可以进行接口自动化测试,提高接口测试的效率
Bug挖掘机
2022/09/28
3.6K0
2021年软件测试领域常用工具总结(2):接口测试工具、UI测试工具
再见!Postman!
接口调试是每个软件开发从业者必不可少的一项技能,一个项目的的完成,可能接口测试调试的时间比真正开发写代码的时间还要多,几乎是每个开发的日常工作项。所谓工欲善其事必先利其器,在没有尝到IDEA REST真香之前,postman(chrome的一款插件)确实是一个非常不错的选择,具有完备的REST Client功能和请求历史记录功能。但是当使用了IDEA REST之后,postman就可以丢了,因为,IDEA REST Client具有postman的所有功能,而且还有postman没有的功能,继续往下看。
Bug开发工程师
2021/01/13
1.6K0
再见!Postman!
相关推荐
漫谈Tavern之API实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档