java 单机接口限流处理方案
245
2022-11-06
本文目录一览:
URL:统一资源定位符。
URI:统一资源标识符。
URL可以看作是URI的具体实现。
·protocol
·domain
·port
·path
·url parameters
示例:
协议,一般是指://之前的部分,表明通信双方所采用的通信协议。
协议:是指通信双方对于通信的数据所采用的数据格式、规程、含义等所作的约定。
对于协议,建议大家了解两个模型:OSI模型和TCP/IP模型。
从接口测试的角度来说,在不同的通信层可以通过不同的协议来实现接口的测试。
一般来说,应用层的协议是最接近用户,最容易实现的。
常见的应用层协议有:
http
https http+ssl
ftp
ssh
smtp
pop3
mysql
oracle
MS SQL
是指://之后的服务器地址。域名可以是真实的服务器机器的机器名、IP地址、虚拟的域名。
示例:
ke.qq.com
192.168.1.100
是指通过冒号连接在域名之后的数字。
端口:0--65535
端口是由服务器自身来进行设定的,是服务器用来发布服务,监听客户端的请求的。
如果服务器所设置的监听端口是所提供服务的通信协议的默认通信端口,则用户在访问服务器时,可以省略端口。
常见的协议及其默认的通信端口:
http 80
https 443
ftp 21
ssh 22
smtp 25
pop3 110
mysql 3306
oracle 1521
MS SQL 1433
是指在端口之后的所有内容。
一般来说path是指我们要访问的资源or服务在服务器的容器下的路径。
通常path就会和接口的功能直接挂钩。
URL地址参数也是属于PATH的一部分。
url地址参数是指通过问号的方式连接在path之后的部分。
url地址参数采用的是键值对的方式传递参数值,多个键值对之间使用作为连接符。
http协议:HypeText Transfer Protocol,超文本传输协议。
目前来说,http协议是绝大多数服务首选的通信协议。
http协议是一种基于request(请求)和response(响应)的协议。
这就意味着http协议是分为两个部分:
·http request:http请求,是用来定义请求的发送者应该如何去组织数据。
·http response:http响应,是用来定义请求的处理者应该如何去组织返回的数据。
http请求是由三个部分构成:
请求行是指请求数据包中的第一行内容。
示例:GET /phpwind/ HTTP/1.1
一般来说,请求行中包含以下信息:
所有的http请求都必须有请求方法,如果没有指定,则默认为get方法。
常见的请求方法有:get、post、put、patch、delete、options、trace、header等。
接口使用何种请求方法,和测试没有关系,只和设计、开发有关系。
get和post的区别:
请求路径就是指URL中的路径部分,包含url地址参数。
请求头是指请求数据包中从第二行开始到第一个空行截止的所有内容。
请求头是客户端用来和服务器进行交互信息、控制信息的交互的,通常和业务本身是没有关系。
请求头是键值对应的。
标准的请求头都是有其特殊的含义和作用的。
比较常用的请求头:
· User-Agent :简称UA,客户端用来告知服务器,客户端的环境信息。
PS:服务器通常会根据该信息头来判断客户请求的来源。
session和cookie的维持和该请求头有关(一致性)。
· Content-Type :如果请求body中有数据,则该信息一定要添加。
PS:
·该信息头是用来告知服务器,请求主体中的数据的数据组织格式。
常见的组织格式有:
键值对格式:
示例: aaa=1bbb=2
混合表单格式,多用于文件上传类型的接口。boundary表示分隔符,实际的请求主体中的分隔符比请求头中的分隔符要多"--"。
表示发送的是json格式的数据。
示例:{"aaa":1,"bbb":2}
·请求中具体使用何种格式的数据组织格式,由接口本身决定。
·要避免在全局请求头中使用Content-Type。
·c ookie、token :状态相关的信息头。一般来说cookie不用额外处理。
token这样的信息头基本上都需要做关联处理。
是指请求数据包中从第一个空行开始到最后的所有内容。
·请求主体一般都是和业务相关的,是客户端发送给服务器的业务数据。
·请求主体中的数据是有特定组织格式(Content-Type),由开发决定,和测试无关。
·查看请求数据,建议通过raw格式。。尤其是进行调试的时候。
一般来说http响应也是分为三个部分。
·response line:响应行
·response headers:响应头
·response body:响应主体
响应行是指响应数据包中的第一行内容。
通常来说包含下列信息。
示例:
HTTP/1.1 200 OK
响应代码,又叫status、status code,状态、状态码。
响应代码是服务器用来告知客户端,服务器对于请求的通信逻辑层面的处理结果。
响应代码是三位长度的数字,根据首位数字的不同,可以分为5类。
1xx:表示连接建立过程中的交互、控制信息。
2xx:表示服务器处理成功,典型就是200.
3xx:表示重定向。
PS:1xx、2xx、3xx都表示请求成功,即服务器正常工作。
4xx:表示客户端错误。
如:400、401、403、404、405
5xx:表示服务器错误。
如:500、502、501
PS:在接口测试时,不论出现4xx、5xx都表示脚本出错了。
脚本出错有两种情况:
·协议层面:http请求的格式组装问题。
·业务层面:业务相关的数据不合法导致。
PS:一旦出错,我们需要做的就是去对比成功的请求数据包(包含头和body)和失败的请求数据包。
响应头是指响应数据包中从第二行开始到第一个空行截止的部分。
响应头是服务器用来告知客户端,服务器的一些交互、控制信息。
比较常见的:
set-cookie:是服务器用来返回cookie给客户端。
响应主体,是指响应数据包中从第一个空行开始到最后的所有内容。
·响应主体有可能是压缩、编码的,有些测试工具会自动处理,有些需要编程处理。
·响应主体一般都是服务器对于接口的处理结果,和业务相关。
这就意味着我们要判断一个接口的功能是否正确,或者要提取服务器返回的数据,通常都要对响应主体进行操作。
接口的数据传输有多种实现格式:提交: 可以使用QueryString(键值对数据)
这个问题还是从需求、测试用例设计、执行来说吧。
A.需求
首先要了解这个接口提供的服务的需求定义,那么我们就知道大概测试的结果是啥。同时理论上要先提供接口规范,方便后续测试,以及给调用者联调的一个文档约定。
B.测试用例设计
根据测试的接口规范,基于业务进行场景设计,再结合边界值设计方法、等价类划分等常用设计方法进行用例设计。
1.设计的方向是常规的测试用例设计:协议规范测试、接口入参、接口出参。
协议规范测试:比如HTTP协议:URL地址、Header测试。不过一般情况下,默认调用者按照接口规范正常调用。这个不用过于详细测试。
2.接口入参:参数个数测试(注意是否必传字段),参数值测试(为空、正常值、非法值等,以及首尾有空格是否过滤)。
3.接口出参:至少涵盖一条成功的响应和一条失败的响应,当然我们测试出更多错误码,我们的覆盖率也就更全面。
4.业务场景用例: 这个需要你对于这个接口的业务的了解程度,而且这是最重要的部分。
比如中间使用了缓存服务(第一次缓存没有,是不是直接读数据源,并存入缓存;第二次直接读取缓存是否正确);
比如需要考虑请求外部的接口获取相应的信息的时间损耗(连接不上外部接口,外部接口下线了,外部接口响应太慢);
C.测试用例执行
1.需要你对接口协议有一定的了解,选择适当的开源工具(如postman)或者自己编写脚本进行模拟请求。
2.需要熟悉接口所使用的中间件等知识(比如redis、kafka、mysql数据库)。
3.需要模拟外部接口返回给你现在正在验证的程序的接口。(比如扣费业务,你不可能每测一个业务,就去调真实扣费)。
是web开发接口吗?建议使用Postman
一、什么是接口?
接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。
二、 常用接口采用方式:
1、webService接口:是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。可以使用的工具有apipost、jmeter、loadrunner等;
2、http api接口:是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和
post等方法,这也是最常用的两种请求方式。可以使用的工具有apipost、jmeter、loadrunner等;
三、前端和后端
前端:网站前端是对网页静态页面的设计,通俗的来说,就是我们肉眼能看的到的东西,当我们浏览网站的时候所看到的页面上的内容几乎都是属于前端,前端的工作就是网站页面,静态的页面是没有后端成分的,前端主要包括html和css外加js等一些样式和布局。
后端: 网站的后端就是动态网站的技术,比如网站上的一些注册登录和一些弹窗,这些都是后端的逻辑,常用的后端语言有php,jsp等,后端的数据库也包含myspl等,都是对后端进行存储数据。
四、 接口测试概念
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等(通俗来说就是,检查业务逻辑是否满足业务需求,校验字段是否正常你实际结果是否满足预期)
五、 接口的组成:
a、接口说明
b、调用url
c、请求方法(getpostput等)
d、请求参数、参数类型、请求参数说明
e、返回参数说明
六、为什么要做接口测试,接口测试的目标
接口其实app和前端交互用的,所以好多人问,为啥做功能测试还要测接口,目标是啥不是多此一举吗?首先我告诉大家,这种想法是错误的
那么举一个例子:
例如一个登陆接口,例如产品上规定用户名6-10个字符数字下划线,但后端没做判断。但我们业务人员测试肯定验证,但只是前端做了校验,后端压根就忘了这个小需求.那么后果来了如果一个懂的直接抓包去篡改你的接口,然后绕过校验,通过sql注入直接随意登录。如果你这是一个下单业务,是不是给公司造成了很大损失
所以此时此刻接口测试目标来了:
1.可能发现客户端没有发现的bug(那么也叫隐藏bug)
2.及早爆出风险(保证质量正常上线)
3.接口稳定了,前端随便改
4.最重要检查系统安全性,稳定性
七、如何进行接口测试
1.使用接口测试工具进行测试,接口测试和接口文档生成工具apipost,接口测试和性能测试工具jmeter
2.接口状态码表示含义
例如:200(成功)/300(重定向别的地方)/400(请求语法错误)/500(服务器异常)
测试点:
B. 参数组合(传入不同值)
C. 接口安全(绕过验证/绕过身份验证/参数是否加密等)
D. 异常验证(输入异常参数边界值)
练
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
测试的策略:
接口测试也是属于功能测试,所以跟我们以往的功能测试流程并没有太大区别,测试流程依旧是:
评审测试接口文档(需求文档)
根据接口文档编写测试用例(用例编写完全可以按照以往规则来编写,例如等价类划分,边界值等设计方法)
执行测试,查看不同的参数请求,接口的返回的数据是否达到预期
那么设计测试用例时我们主要考虑如下几个方面:
功能测试:
接口的功能是否正确实现了
接口是否按照设计文档中来实现(比如username参数写为了user,那么这就不符合,因为接口文档在整个开发中都需要使用,所以接口实际的设计要与接口设计文档中保持一致)
兼容性测试: 比如说今天接口进行了调整,但是前端没有进行变更,这时候需要验证新的接口是否满足旧的调用方式
错误码测试: 通用的错误码与业务错误码是否能够清晰的说明调用问题,错误码是否能够尽可能的全的覆盖所有的情况
返回值测试: 返回值除了内容需要是正确的,还需要类型也是正确的,保证调用方拿到这些参数能够正确的解析
参数边界值、等价类测试
json格式测试: 通常我们的接口一般设计的都是传递json串,那么就需要去测试 如果传递非json的情况,这时候程序会不会正确的处理,返回相应的 error code
默认值测试: 很多情况一些非必填的参数会有默认值,比如说一个查询的接口,参数count为返回查询的结果数量, 默认为10,那么就应该有一条case来测试,当然前置条件是数据库里面必须要存在这样的数据超过10条。
逻辑业务:
是否有依赖业务,比如查看订单,是需要用户首先登录的,所以肯定要保证登录了或有相应的cookie
业务逻辑测试: 传递正确的参数,接口对数据库进行查询的操作,需要去验证数据库查询是否正确,接口对数据库进行 增删改的操作,也需要看数据库是否同步进行了这些操作
异常测试:
异常分为两类,参数异常和数据异常
参数异常:
关键字参数:将参数写为开发语言中的关键字
参数为空:比如去掉了username参数
多或少参数:多或者少参数的验证,现在还不确定如果一个接口多了参数如果没有报错是否是合理的,或者是否需要优化,因为就目前开发给予的答案是,一般不对接口多了参数的处理
错误参数:比如将username参数写为了user等看是否能返回相应的error code
数据异常:
关键字数据:将参数的值填为开发语言中的关键字
数据为空:将参数的额值填为空
长度不一致:因为数据库中每个字段都设置有字段长度,填写不符合的长度进行验证
错误数据:就是将参数的值任意填写,或填写不存在的数值
异常类型测试: 比如count参数,这个参数的类型一定是可以转换为int类型的,这时候我们需要测试如果传的一些不可以 转换为int类型值来测试代码是否加入判断
性能测试:
响应时间
吞吐量
并发用户数
占用内存,CPU等
安全性测试:
敏感信息是否加密
必要参数是否后端也进行校验(现在很多系统前后端架构是分离的,从安全层面来说,只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前端太容易了), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证)
接口是否防恶意请求(SQL注入)
cookie:就是将header中的cookie修改或删除后看是否能返回相应的error code
header:就是删除或修改header中部分参数的值,看是否能返回相应的error code
唯一识别码:删除修改唯一识别码测试
接口测试:
接口:主要是子模块或者子系统间交互并相互作用的部分。
这里说的接口是广义的,客户端与后台服务间的协议;插件间通信的接口;模块间的接口;再小到一个类提供的方法;都可以理解为接口。因此,可以分析,系统间的接口包含三部分:输入、处理逻辑、输出。
接口测试:是指针对模块或系统间接口进行的测试。
分析一个接口:
获取接口文档:和黑盒测试一样,我们是从需求文档中去挖掘测试点,设计测试用例。对于接口测试,同样是有对应的接口文档的。
分析接口文档,提取测试点:
1)输入:接受哪些参数、参数的类型、可选参数和必选参数等;根据输入参数采用等价类、边界值分析法等进行设计。
2)业务逻辑:对于一个接口,不同的输入参数或组合,流程或状态的转移是不同,可以根据业务逻辑画出流程图或状态转移图,确保每种状态至少被访问了一次。
3)输出:根据文档规定的输出,反向设计测试数据,使所有的输出状态都被包含了;
测试用例:同时对输入、业务逻辑、输出进行考虑时,肯定会存在用例的冗余,在最大限度覆盖业务功能和规则下,选取最优用例集合。同时,需要考虑异常数据和场景。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~