java 单机接口限流处理方案
499
2022-09-06
本文关于接口测试怎么做?接口自动化测试基本流程和思路。
01 通用的项目架构
02 什么是接口
接口:服务端程序对外提供的一种统一的访问方式,通常采用HTTP协议,通过不同的url,不同的请求类型(GET、POST),不同的参数,来执行不同的业务逻辑。
客户端大多数的业务操作,都是需要调用服务端接口来获取一些数据,或者触发某些业务,然后客户端拿到接口返回的数据后,会根据数据内容做不同的处理和展示。
03 为什么要做接口测试
A、在公司里,客户端和服务端通常是由不同的团队开发的,在项目开发过程中,客户端和服务端开发的进度不一致,比如服务端先开发完了,这个时候可以先对服务端进行接口测试,确保服务端逻辑和返 回数据是正确的,然后再测试客户端。或者是某些测试部门,专门测试服务端开发团队,因此,他们的测试对象就是接口。
B、在测试某些业务时,不能仅仅通过前端来测试,比如用户注册,前端限制了用户名不能为空,但是有些人可能通过工具绕过前端直接调用服务端接口,如果服务端没有做相关的逻辑判断,就会造成数据 错误。包括接口数据传输过程中是否对关键信息加密等。所以必须针对服务端接口单独做测试。
C、在开发提测后,可以先通过工具把服务端的接口测试跑一遍,确保接口测试用例都是通过的,快速判断服务端接口是否符合预期。然后再通过UI界面进行测试。否则接口有bug,前端页面必定有bug。
04 接口测试工具和流程
常见的HTTP接口测试工具有Jmeter、Postman、SoupUI等。企业里用的比较多的是Jmeter。
Jmeter是一款开源、免费的接口测试工具,它可以对接口的功能、性能进行测试。还可以实现接口自动化。
Jmeter具体使用,请参考《Jmeter接口工具实战》文档
接口测试流程:
和普通的web测试一样,也是先进行需求分析、测试用例编写、执行测试、提交bug、回归测试、提交 测试报告等。
接口自动化测试基本流程和思路
接口自动化大致步骤:
1、发送请求
2、解析结果
3、验证结果
定义三个和业务相关的类
1、一个用来封装HTTPclient,用来发送请求
2、解析结果xml的类
3、一个用于比较测试结果和期望值的类,用于验证
4、自动生成报告的类:自动发送报告之类的
(locust的python工具)
服务级:Web server(服务) Database(持久化工具-数据库)、Cache(短时间持久化工具-缓存)
接口测试:
1、构造数据
(1)通过接口构造
比如获取一个blog的文章信息,怎么构造数据呢?(文章哪里来??)—返回blog信息
通过添加文章的接口,临时构造数据(blog文章),然后断言的时候看看是不是自己造的数据——会造成接口耦合(两个程序模块有关联就叫做耦合。)—和造文章的接口耦合(如果创建文章的接口挂了,那返回blog信息的接口也就挂了)
公交卡充值依赖支付宝的支付接口服务,调用支付接口会有代价,所以模拟一个支付接口,所有通过mockserver(测试桩)去模拟支付接口的服务----不管输入是什么,返回一直成功或是固定的
如何进行mock??
mockserver介绍:https://www.cnblogs.com/fnng/p/7511539.html
使用:https://blog.csdn.net/qq_35049819/article/details/77839495 (未验证)
(2)通过持久化层构造(更好)
意思就是在数据库直接插入数据
2、调用接口
postman/jmeter–win
CURL-linux
Paw–mac
3、对接口返回进行断言
通过不同的输入-判断不同的预期----数据驱动(输入数据)
断言参考方法:对比数据库值,code验证
4、接口测试的用例设计
功能测试用例
业务逻辑设计
业务逻辑方面的测试用例主要是针对服务端接口的处理逻辑进行的用例设计,这种用例设计不是针对某个功能点是否实现,而是对接口的处理逻辑以及一些相互依赖的业务进行验证,通常依照接口的逻辑流程图来进行。举一个例子,购物系统中的两个动作:登录和下单操作,这两个业务是相互依赖的,下单操作必须在登录完成后(登录状态下),否则无法完成下单,这个时候我们就可以设计这样一条case:没有登录的状态下进行下单操作,看服务端如何处理。
可以看到这一块有两个判断,我们需要对不同的判断分支都设计用例,以保证流程图中涉及到的分支我们都有测试用例覆盖。图中涉及到的不同的分支有:
1.abdf;
2.acg;
3.abdeg;
相应的,我们的用例就应该是:
1.userInfo != null && value(userGroup) != 0;
2.userInfo == null;
3.userInfo != null && value(userGroup) == 0;
业务逻辑的用例设计主要是以服务端接口内部的逻辑流程图为基础,针对流程图中的判断和分支进行用例设计,保证服务端接口的每一种逻辑下都有测试用例覆盖。
异常处理情况
服务端接口和客户端之间通常是通过HTTP请求来传递数据,在发送请求的时候,客户端会携带各种不同的参数,此时服务端会根据不同的参数进行不同的处理,所以异常处理主要是针对请求中的参数情况:比如参数增加和缺省、参数的数据类型错误,参数携带错误的值、参数为空等等,这需要我们根据接口文档中各种不同的参数去构造不同的参数异常,检查服务端的响应情况。
性能和安全性方面
服务器的性能往往是个非常重要的关注点,在实际的测试中我们主要关注的是接口的QPS数值,以及CPU和内存占用等性能指标,通常借助于其他工具比如LoadRunner进行性能测试。安全性方面,主要考虑一些常见的安全策略比如请求加密、sql注入等等。
二、接口测试实例
1、postman测试
2、python测试
# coding:utf-8 import requests,unittest class V2ETestCase(unittest.TestCase): def test_ger_node_api(self): python_node_id = 90 url = "https://www.v2ex.com/api/nodes/show.json" node_name = 'python' querystring = {"name":node_name} res = requests.request("GET", url, params=querystring).json() print res self.assertEqual(res['id'],python_node_id) self.assertEqual(res['name'], node_name)123456789101112
if name==‘main’:
unittest.main()
在命令行运行(以后做自动化测试用):
报告可以生成HTML形式的-加进去
python为例:
unittest库
Requests库
Json
Dict字典
assert断言
用postman做接口测试,选择get还是post,加入数据发送请求,查看返回的结果—然后给接口做断言(点右上角的code,选择js语言,写断言)
当接口返回的数据时动态的,比如一个网站文章的最新评论----还是测试环境问题,搭建一个专属的测试环境,不产生新的数据,一样的可以测试接口—相当于动态数据静态化
“怎么做接口测试”这个问题可以分解为两个问题:
怎么设计接口测试用例?
怎么执行接口测试?
怎么执行接口测试?
Fiddler、SOAPUI、PostMan等可以做半自动的接口自动化测试;
使用Robot Framework做全自动化的接口自动化测试;
自己用代码做全自动的接口自动化测试,如Java+testNG;
自动化接口测试+生成报告思路:
在接口的开始测试阶段,我用POSTMAN来手工测试接口,单一接口测试通过后,把测试用例Copy到Jmeter中,作为后续的定期执行的基础,在接口手工全部测完后,用Jmeter+Ant+Jenkins来定期检查每天的接口,并生成测试报告,再写一个爬虫每天监控测试报告,如果出现了异常,发邮件报警。
1、每天的历史报告肯定也是需要留存的
2、有案例失败时的邮件通知
Jenkins有邮件报警和report展示的插件~ 不用自己写。。。
最后应该就是测试报告了,集成于自动化的接口测试,每天的接口测试报告也是挺重要的,Jmeter的测试报告虽然也很清楚,但是并不是我想要的东西,我理想的测试报告应该有一下那么两点
测试通过率
每条测试的过程展示
测试通过率是方便查看报告的人直观的了解本次测试的结果。
测试过程的展示需要展示如下内容:测试结果、请求地址、输入参数、输出结果、断言结果。并且成功和失败的标识需要非常明显。
上述就是小编为大家整理的接口测试怎么做?接口自动化测试基本流程和思路。
国内(北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛)eolink软件分析、比较及推荐。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~