接⼝测试简介以及接⼝测试⽤例设计思路
接⼝测试简介
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地址:
cookie与session的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别⼈可以分析存放在本地的cookie并进⾏cookie欺骗
考虑到安全应当使⽤session。
3、session会在⼀定时间内保存在服务器上。当访问增多,会⽐较占⽤你服务器的性能
考虑到减轻服务器性能⽅⾯,应当使⽤cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制⼀个站点最多保存20个cookie。
5、所以个⼈建议:
将登陆信息等重要信息存放为session企业网站设计思路
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论