接口测试简介以及接口测试用例设计思路

news2024/12/27 3:51:13

接口测试简介

1.什么是接口

接口就是内部模块对模块,外部系统对其他服务提供的一种可调用或者连接的能力的标准,就好比usb接口,他是系统向外接提供的一种用于物理数据传输的一个接口,当然仅仅是一个接口是不能进行传输的,我们还的对这个接口怎么进行传输进行进行一些设置和定义。开发所谓的接口是模块模块之间的一种连接,而测试眼中的接口是一种协议(对接口的功能的一种定义)

2.接口的种类和分类

外部接口,内部接口:上层服务于下层服务,同级服务。常见的接口分类http:get,post,delete,put 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。 程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。 接口的分类:1.webservice接口 2.http api接口   webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。   http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。   json是一种通用的数据类型,所有的语言都认识它。(json的本质是字符串,他与其他语言无关,只是可以经过稍稍加工可以转换成其他语言的数据类型,比如可以转换成Python中的字典,key-value的形式,可以转换成JavaScript中的原生对象,可以转换成java中的类对象等。)

3.各个接口之间的区别

通常我们测试的接口分为get接口和post接口,get的提交方式是明文提交,把提交的参数跟在url后面发送给服务器,所以不安全,而且get提交的参数是有字符限制的且可以被当做书签保存,但是post的提交方式跟get完全不一样,post提交的参数是放在表单里的,所以不会存在字符限制,而且因为参数是放在表单里,不容易被看到,所以会比get更安全。

4.什么是接口测试

简单的来说接口测试对于测试来说其实是对接口协议的一种测试,这个协议指的是为了让这个接口实现某种需要的功能还设计的一种要求。

5.为什么要进行接口测试

因为不同端(前段,后端)的工作进度不一样,所以我们要针对最开始出来的接口,以及需要调用其他公司的(银行,支付宝,微信,qq等)一些接口进行接口测试及验证数据,从安全层面来说,只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易),需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。

6.接口测试流程

需求讨论,需求评审,场景设计,编写用列,准备数据,执行测试

7.怎么进行接口测试

通过工具模拟客户端向服务端发送请求并接受服务器返回的数据来对接口的功能,逻辑业务,异常,安全进行测试

功能测试:测试这个接口的功能是否实现,并且测试这个接口是否按照接口文档来进行开发的(比如说接口文档规定了一些关键字,而开大的时候把关键字改成了其他的关键字,因为在整个项目周期,并不只有一个开发而是有多个,所以可能因为在开发过程中因为关键字不一样导致某些开发的功能异常,还有自动化脚本也会发生异常)

  逻辑业务,主要指的是一些逻辑业务依赖关系(比如支付宝提交订单的时候要保证你是在登录的情况下,如果你没有登录而提交成功了,这就是异常,可以修改请求的cookie来测试)

  异常测试:参数异常:关键字参数(应用其他的关键字替换进行测试)、参数为空、参数多少(通过添加参数增添个数),参数错误。数据异常:关键字数据(填入的数据用其他的数据语言的数据替用)、数据长度、数据为空、数据错误。   由于我们项目前后端调用主要是基于http协议的接口,所以测试接口时主要是通过工具或代码模拟http请求的发送与接收。工具有很多如:postman、jmeter、soupUI、java+httpclient、robotframework+httplibrary等。   –也可以用 接口自动化来实现,就是用代码实现,框架和UI自动化差不多,发送请求用断言来判断。

8.接口测试需要用到的工具

  接口测试常用的工具,fiddler抓取请求,postman模拟客户端通过对fiddler抓取的请求修改并发送到服务端并接收服务器返回的数据及异常来进行验证接口。工具不是固定的,需要根据项目来进行选择。

9.接口的本质及其工作原理   接口你可以简单的理解他就是URL,工作原理就会说URL通过get或者post请求像服务器发送一些东西,然后得到一些相应的返回值,本质就是数据的传输与接收。

接口测试用例设计思路 目的:测试接口的正确性和稳定性;   原理:模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的过程;   重点:检查数据的交换,传递和控制管理过程,还包括处理的次数;   核心:持续集成是接口测试的核心;   优点:为高复杂性的平台带来高效的缺陷监测和质量监督能力,平台越复杂,系统越庞大,接口测试的效果越明显(提高测试效率,提升用户体验,降低研发成本);   用例设计重点:通常情况下主要测试最外层的两类接口:数据进入系统接口(调用外部系统的参数为本系统使用)和数据流出系统接口(验证系统处理后的数据是否正常);   PS:设计用例时还需要注意外部接口提供给使用这些接口的外部用户什么功能,外部用户真正需要什么功能;

1 输入

  输入参数主要从以下几各方面设计:

  a 必填项校验

  接口文档中有是否必填的说明。参考接口文档即可。

  b 参数长度校验

  参考接口文档即可。

  c 参数值的有效性校验

  如:身份证号的校验 ,设计的数据虽然符合身份证号的规则,但是并不是真实有效的身份证号;这种情况就要看身份证号的校验规则是什么样了,一般都是用的现成的身份证号校验器,但是有些是自己写的校验算法,这个本人就遇到过这种问题—校验算法写的不正确;

  所以参数有效性的校验就需要结合实际业务场景,判断哪些数据是真实有效的数据,一定要确保所有真实有效的数据是可以验证通过的。

  d 参数组合校验

  不同的参数组合可能会存在不同的业务场景;

  e 如果参数是枚举值,一定要各种枚举值都要测试,因为可能不同的枚举走的不同的业务流程;

  f 参数值的默认值的校验

  参考接口文档。

  g 某些参数具有特定的生成规则,要单独针对生成规则设计用例,一定要保证真实有效的数据是可以验证通过的。

  如身份证号中间几位 ***19860701*,本人就遇到过输入***19861001*这种值校验不正确;

2 接口逻辑

  接口逻辑我用的设计方法是分支覆盖—>路径覆盖—>场景覆盖,同样也是要结合实际业务场景,根本不发生的业务场景就是无效的测试用例。

  a 第一步先把业务流程图画出来;

  b 依据路程图中的分支分别设计,不同分支不同的场景,这里就要把异常的场景考虑进去;如接口超时,接口异常,接口请求成功或失败,成功后怎么处理,失败后流程是否继续执行,失败后的数据怎么处理;

  以打款接口为例:

  打款结果有打款成功或打款失败,成功后怎么处理,需要回写打款成功状态,失败后怎么处理,也需要回写失败状态,失败后的数据可以操作退回,也可以操作重新出款等等;

c 测试逻辑设计完成后要想一想不同的业务场景怎么去测试,需要哪些人员协助,

如接口超时怎么去测试,请求重复怎么去测试,请求并发怎么去测试

3 输出

输入结果:正常输出和异常输出,常用的方法有错误推断法(列举出程序中可能存在的错误或者异常,根据他们选择测试用例)

4 以上都完成后,要结合实际的业务场景去掉冗余的用例(即实际业务场景不存在的流程或者输入数据);

5 如果业务流程涉及到状态转换,要单独设计用户—方法:状态转换图;

6 涉及到多个不同金额或者手续费的计算,可能还会用到正交实验法去设计用例;

7 另外,用例设计中还应当包含异常流程中产生的异常数据的处理流程;—通常所说的补偿机制,这块流程能大大的减轻人工运营的工作量,当然,这需要在做系统设计的时候就需要把这部分考虑进去。

接口测试和app测试的相同和区别

1.两者区别:App端性能主要关注与手机相关的特性,如手机cpu、内存、流量、fps等。而接口性能主要关注接口响应时间、并发、服务端资源的使用情况等。两种测试时的策略和方法都有很大区别,所以这部分内容是需要分开单独进行测试的,理论上来说这也是不同的部分。

2.接口测试持续集成:   对接口测试而言,持续集成自动化是核心内容,通过持自动化的手段我们才能做到低成本高收益。目前我们已经实现了接口自动化,主要应用于回归阶段,后续还需要加强自动化的程度,包括但不限于下面的内容:     

a) 流程方面:在回归阶段加强接口异常场景的覆盖度,并逐步向系统测试,冒烟测试阶段延伸,最终达到全流程自动化。     

b) 结果展示:更加丰富的结果展示、趋势分析,质量统计和分析等     

c) 问题定位:报错信息、日志更精准,方便问题复现与定位。     

d) 结果校验:加强自动化校验能力,如数据库信息校验。     

e) 代码覆盖率:不断尝试由目前的黑盒向白盒下探,提高代码覆盖率。     

f) 性能需求:完善性能测试体系,通过自动化的手段监控接口性能指标是否正常。

最后ps:接口测试需要掌握的知识。   

①了解系统及内部各个组件之间的业务逻辑交互;   

②了解接口的I/O(input/output:输入输出);   

③了解协议的基本内容,包括:通信原理、三次握手、常用的协议类型、报文构成、数据传输方式、常见的状态码、URL构成等;   

④常用的接口测试工具,比如:jmeter、loadrunner、postman、soapUI等;   

⑤数据库基础操作命令(检查数据入库、提取测试数据等);   

⑥常见的字符类型,比如:char、varchar、text、int、float、datatime、string等;    

如何学这些技能?   

①系统间业务交互逻辑:通过需求文档、流程图、思维导图、沟通等很多渠道和方式;   

②协议:推荐《图解http》这本书,内容生动,相对算是入门级的书籍,其他的还有《图解tcp、IP》等;   

③接口测试工具:百度这些工具,然后你会发现,好多的教学博客、相关问题解决方案、以及一些基于工具的书籍,当然,选择合适的书很重要;   

④数据库操作命令:学习网站(W3C、菜鸟教程)、教学博客,以及一些数据库相关书籍,入门级推荐:《mysql必知必会》、《oracle PL/SQL必知必会》等   

⑤字符类型:还是百度,有句话这么说:内事不决问百度,外事不决问Google。。。   

如何获取接口相关信息?   

一般的企业,都会由开发或者对应的技术负责人员编写接口文档,里面会注明接口相关的地址、参数类型、方法、输入、输出等信息,如果没有,想办法获取。。。   

接口文档八要素:   

封面:封面最好是本公司规定的封面,有logo,内容标题,版本号,公司名称,文档产生日期;   

修订历史:表格形式较好些,包括:版本、修订说明、修订日期、修订人、审核时间审核人等;   接口信息:接口调用方式,常用的GET/POST方式,接口地址;   

功能描述:简洁清晰的描述接口功能,比如:接口获取的信息不包括哪些;   

接口参数说明:每个参数都要和实际中调用的一样,包括大小写;参数的含义言简意赅的说明,格式,是string 还是int 还是long等格式;   

说明部分,说明参数值是需要哪里提供,并详细说明参数怎么生成的,例如时间戳,是哪个时间段的,参数是否必填,一些参数是必须要有的,有些是可选参数等;   

返回值说明:   

①最好有一个模板返回值,并说明每个返回参数的意义;   

②提供一个真实的调用接口,真实的返回值;   

调用限制,安全方面:   

加密方式,或者自己公司一个特殊的加密过程,只要双方采用一致的加密算法就可以调用接口,保证了接口调用的安全性,比如常见的md5;   

文档维护:文档在维护的时候,如有修改一定要写上修改日期,修改人,对大的修改要有版本号变更;   

其他相关知识?   

get请求,post请求的区别:  

1、GET使用URL或Cookie传参。而POST将数据放在BODY中。   

2、GET的URL会有长度上的限制,则POST的数据则可以非常大。   

3、POST比GET安全,因为数据在地址栏上不可见。   

4、一般get请求用来获取数据,post请求用来发送数据。   

其实上面这几点,只有最后一点说的是比较靠谱的,第一点post请求也可以把数据放到url里面,get请求其实也没长度限制,post请求看起来参数是隐式的,稍微安全那么一些些,但是那只是对于小白用户来说的,就算post请求,你通过抓包也是可以抓到参数的。(唯一区别就是这一点,上面3点区别都是不准确的)   

http状态码:   

1、200 2开头的都表示这个请求发送成功,最常见的就是200,就代表这个请求是ok的,服务器也返回了。   

2、300 3开头的代表重定向,最常见的是302,把这个请求重定向到别的地方了。   

3、400 400代表客户端发送的请求有语法错误,401代表访问的页面没有授权,403表示没有权限访问这个页面,404代表没有这个页面。   

4、500 5开头的代表服务器有异常,500代表服务器内部异常,504代表服务器端超时,没返回结果。   

webservice接口怎么测试:   

它不需要你在拼报文了,会给一个webservice的地址,或者wsdl文件,直接在soapui导入,就可以看到这个webservice里面的所有接口,也有报文,直接填入参数调用,看返回结果就可以了。   

天气预报wsdl地址:http://www.webservicex.net/globalweather.asmx?wsdl   

cookie与session的区别:   

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。   

2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗 考虑到安全应当使用session。   

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能   考虑到减轻服务器性能方面,应当使用cookie。   

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。   

5、所以个人建议:   

将登陆信息等重要信息存放为session   

其他信息如果需要保留,可以放在cookie中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/583175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何快速入门高性能计算?五个实用学习建议分享

高性能计算 (High-Performance Computing,HPC)是指通过计算机技术实现高速运算,对大规模科学计算、数据分析、复杂制造等领域的研究与应用提供支撑。目前,HPC已经广泛应用于医学、天文、材料科学、地球科学、气象科学、…

【cmake 学习】cmake判断当前所处系统(CMAKE_SYSTEM_NAME)

目录 1、使用内置变量判断 2、使用变量 CMAKE_SYSTEM_NAME 判断 1、使用内置变量判断 cmake 内置了许多用于表示系统的变量,如 UNIX、WIN32、LINUX、IOS等。假设当前系统为Linux系统,那么 LINUX 变量的值为 1。 更多变量可以参考:cmake-v…

最近距离 | EXCEL中批量查找与原点最近距离的目标点

一 需求 企业送餐、物流、通勤、选址等经常会遇到这样的需求,仓储地是固定的,客户下单后由于客户的地址具有随机性,需按照地理位置分布结合仓储位置进行分析,按距离近及远合理分配仓储,以便节省配送成本。 本文就以这…

深度学习AI编译器-MLIR简介

1、什么是MLIR MLIR:Multi-Level Intermediate Representation 多级中间表达 LLVM下的子项目编译器基础框架统一IR格式,提高通用性和可复用性自带Tensor类型,目前主要用于深度学习领域 中间表达 IR(Intermediate Representatio…

Day55【动态规划】392.判断子序列、115.不同的子序列

392.判断子序列 力扣题目链接/文章讲解 视频讲解 本题目可以用双指针法来做 class Solution { public:bool isSubsequence(string s, string t) {// pointer to s, pointer to tint ps 0, pt 0; for (pt 0; pt < t.size(); pt) { // 遍历t&#xff0c;在t中按顺序寻找…

Kali-linux Gerix Wifi Cracker破解无线网络

Gerix Wifi Cracker是另一个aircrack图形用户界面的无线网络破解工具。本节将介绍使用该工具破解无线网络及创建假的接入点。 9.3.1 Gerix破解WEP加密的无线网络 在前面介绍了手动使用Aircrack-ng破解WEP和WPA/WPA2加密的无线网络。为了方便&#xff0c;本小节将介绍使用Geri…

数字图像处理①基于ADMM的全变分去噪算法

文章目录 1. Problem2. 仿真结果3. MATLAB算法4. 源码地址参考文献 1. Problem 在图像处理中&#xff0c;图像信号总会因为各种原因受到噪声的干扰&#xff0c;其中高斯噪声就是典型的干扰类型之一。 针对图像去噪的模型有很多种&#xff0c;其中全变分模型被认为是最有效的模…

北醒Modbus协议在Python下实现功能配置

目录 实验目的测试环境Python库需求Benewake(北醒) TF雷达接口及通讯协议说明接口定义Modbus通信协议说明功能码说明 接线示意图库安装说明例程运行与测试 实验目的 实现485接口系列雷达Modbus协议在Python上实现功能配置。 本例程界面分为主菜单、测距子菜单、配置子菜单&…

社区团购-v.1.6.0更新

likeshop社区团购系统发布新版本1.6.0&#xff0c;主要更新如下&#xff1a; 新增&#xff1a; 小程序-登录引导用户填写头像和昵称 小程序-热更新代码弹窗 后台-正版检测、版本检测 后台-页面装修支持拖拽排序 后台-订单管理增加导出功能 修复&#xff1a; 后台-关联团…

本地化部署AI语言模型RWKV指南,ChatGPT顿时感觉不香了。

之前由于ChatGpt处处受限&#xff0c;又没法注册的同学们有福了&#xff0c;我们可以在自己电脑上本地化部署一套AI语言模型&#xff0c;且对于电脑配置要求也不是非常高&#xff0c;对它就是RWKV。 关于RWKV RWKV是一个开源且允许商用的大语言模型&#xff0c;灵活性很高且极…

Linux之搭建环境

文章目录 1 FileZilla软件2 Linux搭建samba文件共享服务器&#xff0c;实现基于Linux和Windows的共享文件服务2.1 smaba的安装与基本应用2.2 samba的账号权限配置 1 FileZilla软件 在跟着正点原子教程安装后&#xff0c;出现如下问题 解决方法如下 参考文章解决FileZilla连接…

游戏配音怎么弄的?分享三个游戏配音制作方法

随着时代的发展&#xff0c;人们对于配音的要求也越来越高&#xff0c;除了传统的文字配音外&#xff0c;现在又出现了游戏配音。其实游戏配音也是有一定门槛的&#xff0c;并不是人人都可以做得好的。但是如果你想要拥有一位自己喜欢的游戏角色&#xff0c;那么你就要学会游戏…

MyBatis 快速入门(上)

文章目录 一. MyBatis 是什么?二. 学习 MyBatis 的意义三. MyBatis 学习四. 创建 Mybatis 查询4.1 创建数据库和表4. 2 MyBatis 环境搭建1. 添加 MyBatis 框架支持image-202305052040340772. 设置 MyBatis 的配置信息2.1 设置数据库连接的相关信息2.2 MyBatis 的xml 保存路径 …

如何白嫖可联网GPT- NEW Bing

这里写自定义目录标题 前沿方法安装总结 前沿 目前我们想体验可联网的GPT只能去OPENAI官网购买plus会员&#xff0c;一个月20刀&#xff0c;换算一下的话大概在140左右&#xff0c;当然由于OPENAI某些原因经常封禁不符合规定的账号&#xff0c;那么有没有一种办法能白嫖快速的…

Qt Qml 实现键鼠长时间未操作锁屏

文章目录 摘要实现思路键盘鼠标监控百度到的方法我的自己方法 最后 关键字&#xff1a; Qt、 Qml、 QInputEvent 、 QStandardItem、 eventFilter 摘要 今日需求&#xff1a; 项目中需要实时检测用户是否长时间为操作键盘和鼠标&#xff0c;如果超过预设时间未操作键盘和…

Linux之管道

目录 Linux之管道 操作符号 作用 用法 管道符使用场合 匿名管道与命名管道的区别 如何创建命名管道 案例举例 案例1 --- 将/etc/passwd中的用户按UID大小排序 案例2 --- 统计出最占CPU的5个进程 案例3 --- 统计当前/etc/passwd中用户使用的shell类型 案例4 --- 统计网站…

Java大数据文件处理方法

前言 Java大数据文件处理是一种使用Java编写的大型数据处理技术&#xff0c;特别适用于处理大型数据文件。在这篇文章中&#xff0c;我们将了解什么是Java大数据文件处理&#xff0c;为什么它很重要以及Java大数据文件处理的方法和技术。 一、什么是Java大数据文件处理&#…

交易信号有效性测算1——N日涨跌幅

在交易信号发出后&#xff0c;我们需要一些程序化的流程&#xff0c;来验证信号的有效性&#xff0c;其中信号发出后N日的涨跌幅就是一个比较常见的任务 布林带交易策略 我们以布林带&#xff08;BOLL&#xff09;交易策略为示例&#xff1a; 中轨线 N日移动平均线上轨线 …

Linux 上的 .NET 崩溃了怎么抓 Dump

一&#xff1a;背景 1. 讲故事 训练营中有朋友问在 Linux 上如何抓 crash dump&#xff0c;在我的系列文章中演示的大多是在 Windows 平台上&#xff0c;这也没办法要跟着市场走&#xff0c;谁让 .NET 的主战场在工控 和 医疗 呢&#xff0c;上一张在 合肥 分享时的一个统计图…

Unity3D:项目 ID 不匹配的情况下如何应对

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 如果在 Services 窗口的 Settings 中找不到项目 ID&#xff0c;或者如果发现项目 ID 不匹配&#xff0c;这可能是因为使用了较早版本的 Unity 来升级项目&#xff0c;或在脱机时创建…