最全服务端测试|单接口如何测试_微服务 单个服务接口测试(2),2024软件测试春招面试

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在实际工作中,经常会面临针对单个微服务的测试或者是OpenApi中提供了某一个API进行测试。那么针对这部分只需要测试研发被提供的接口发送请求后返回协议状态码是200就可以了吗?很显然这种简单的测试模式一方面针对服务测试的覆盖率不全,第二是输出的测试报告也是很难让别人信服的。下面详细地阐述这部分的测试策略以及测试过程中需要考虑的各个点和测试范围。

服务交互

不管是测试单个服务还是某个服务提供了API需要测试,它的思想本质是不会改变的,那么这个本质是什么呢?其实就是客户端与服务端之间的交互,不管是单体架构模式还是微服务架构模式而言,服务提供的API本质上都是客户端与服务端之间的交互,只不过在通信模式有区别而已。大多数我们见到的都是同步通信的模式,也就是客户端向服务端发送请求后,服务端需要响应回复客户端的请求,具体交互过程如下所示。

图片

如上的交互模式一般都叫请求/响应模式,当然也可以说同步通信模式。

有了同步通信必然会有异步通信的模式,那么为什么会有异步通信的模式呢?这主要是因为同步通信虽然能够满足大部分的场景,但是在某些场景下使用异步通信模式更加具备优势,同时同步通信模式还存在请求请求超时的问题,具体来说就是客户端发送请求后当服务端存在异常导致客户端的请求一致超时,第二是同步通信由于存在超时问题可能导致任务堵塞。毕竟在工作中实际测试的产品服务与服务之间的交互虽然没有不是高并发的情况但是客户端的请求不可能是只发送一个请求,而是在产品业务链交互过程中客户端与服务端会不断的发生交互。因此由于同步通信模式存在缺陷,也就有了异步通信的模式,它的优势是客户端与服务端交互的过程中并不需要关注对方的存在,更多关注的是消息。对客户端而言,它不需要关注服务端是否存在,它关注的是消息发送后把消息经过处理后的结果返回给客户端就可以了,异步通信模式具体如下。

图片

单接口测试维度

服务最终提供的都是API进行测试,因此首先需要的是针对单个接口的测试策略与思路,总结下来具体如下几点:

  • 验证请求参数中必填参数是否做了为空校验
  • 验证请求参数的数据类型是否做了判断
  • 验证请求参数的字段长度是否做了长度限制的判断
  • 验证请求参数是否做了填写特定值的判断

下面结合具体的案例来说下这部分,首先来看被测服务的源代码,具体如下:

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:无涯

from flask import  Flask,jsonify
from flask_restful import  Api,Resource,reqparse

app=Flask(__name__)
api=Api(app)

class LoginView(Resource):
  def get(self):
    return {'status':0,'msg':'ok','data':'this is a login page'}

  def post(self):
    parser=reqparse.RequestParser()
    parser.add_argument('username', type=str, required=True, help='用户名不能为空')
    parser.add_argument('password',type=str,required=True,help='账户密码不能为空')
    parser.add_argument('age',type=int,help='年龄必须为正整数')
    parser.add_argument('sex',type=str,help='性别只能是男或者女',choices=['女','男'])
    args=parser.parse_args()
    return jsonify(args)

api.add_resource(LoginView,'/login',endpoint='login')

if __name__ == '__main__':
  app.run(debug=True,host='0.0.0.0')

在如上代码中可以看到服务端针对为空以及请求参数数据类型都做了处理,比如年龄只能是正整数而不能是字符串,性能只能是指定的特定值也就是男或者是女而不能是其他。来一个简单的案例实战,如年龄传的是字符串,看服务端服务的错误信息,具体如下:

图片

如上所示服务端针对年龄不规范的请求参数在后端做了处理。另外一点需要考虑的是请求参数中字段的长度限制,如POST请求是往数据库中添加一条数据,如请求参数里面包含了书籍名称等字段,数据库设计书籍名称字段是10,但是请求参数中长度超过了10,如果后端针对这部分没做处理的时候导致在数据库这层出错,进而导致服务端这层也就出了问题。所以如上总结的针对单接口的测试维度每个点的背后都是存在它的逻辑合理性与测试范围完整性的考虑。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值