• 接口测试全流程扫盲


    扫盲内容:

    1.什么是接口?

    2.接口都有哪些类型?

    3.接口的本质是什么?

    4.什么是接口测试

    5.问什么要做接口测试?

    6.怎样做接口测试?

    7.接口测测试点是什么?

    8.接口测试都要掌握哪些知识?

    9.其他相关知识?

    一.什么是接口?

    接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。

    二.接口都有哪些类型?

    接口一般分为两种:

    1.程序内部的接口

    2.系统对外的接口

    系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。

    程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如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中的类对象等。)

    三.接口的本质及其工作原理是什么?

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

    四.什么是接口测试?

    简答的说就是通过URL像服务器或者其他模块等,传输我们想传输的数据,然后看看他们返回的是不是我们预期想要的。

    五.问什么要做接口测试?

    ①.越底层发现bug,它的修复成本是越低的。

    ②.前端随便变,接口测好了,后端不用变,前后端是两拨人开发的。

    ③.检查系统的安全性、稳定性,前端传参不可信,比如京东购物,前端价格不可能传入-1元,但是通过接口可以传入-1元。

    ④.如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案。

    ⑤. 接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。

    ⑥. 现在很多系统前后端架构是分离的,从安全层面来说:

    (1)、只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。

    (2)、前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。

    六.怎样做接口测试?

    工具有很多如:postman、jmeter、soupUI、java+httpclient、robotframework+httplibrary等。

    --也可以用 接口自动化来实现,就是用代码实现,框架和UI自动化差不多,发送请求用断言来判断。

    七.接口测测试点是什么?

    目的:测试接口的正确性和稳定性;

    原理:模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的过程;

    重点:检查数据的交换,传递和控制管理过程,还包括处理的次数;

    核心:持续集成是接口测试的核心;

    优点:为高复杂性的平台带来高效的缺陷监测和质量监督能力,平台越复杂,系统越庞大,接口测试的效果越明显(提高测试效率,提升用户体验,降低研发成本);

    用例设计重点:通常情况下主要测试最外层的两类接口:数据进入系统接口(调用外部系统的参数为本系统使用)和数据流出系统接口(验证系统处理后的数据是否正常);

    PS:设计用例时还需要注意外部接口提供给使用这些接口的外部用户什么功能,外部用户真正需要什么功能;

    1、基本功能测试:

    由于是针对基本业务功能进行测试,所以这部分是两种测试重合度最高的一块,开发同学通常所指的也主要是这部分的内容。

    2、边界分析测试:

    在基本功能测试的基础上考虑输入输出的边界条件,这部分内容也会有重复的部分(比如业务规则的边界)。但是,前端的输入输出很多时候都是提供固守的值让用户选择(如下拉框),在这种情况下测试的边界范围就非常有限,但接口测试就不存在这方面的限制,相对来说接口可以覆盖的范围更广,同样的,接口出现问题的概率也更高。

    3、性能测试:

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

    综论:

    1、接口测试和app测试的活动有部分重复的内容,主要集中在业务功能测试方面。除此之外,针对各自特性的测试都不一样,需要分别进行有针对性的测试,才能确保整个产品的质量。

    2、接口测试可以关注于服务器逻辑验证,而UI测试可以关注于页面展示逻辑及界面前端与服务器集成验证

    3、接口测试持续集成:

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

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

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

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

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

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

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

    4、接口测试质量评估标准:

    a) 业务功能覆盖是否完整

    b) 业务规则覆盖是否完整

    c) 参数验证是否达到要求(边界、业务规则)

    d) 接口异常场景覆盖是否完整

    e) 接口覆盖率是否达到要求

    f) 代码覆盖率是否达到要求

    g) 性能指标是否满足要求

    h) 安全指标是否满足要求

    八.接口测试都要掌握哪些知识?

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

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

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

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

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

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

    如何获取接口相关信息?

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

    接口文档八要素:

    封面:封面最好是本公司规定的封面,有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中

     

    最后:

    为了助力软件测试员朋友们跳槽面试、升职加薪、职业困境,提高自己的技术,本文给大家整了一套涵盖测试所有技术栈的快速学习方法和笔记。目前已经收到了上百人网友的反馈,说是面试问到了很多这里面的知识点。

    内容包含了:测试理论、Linux基础、MySQL基础、Web测试、接口测试、App测试、管理工具、Python基础、Selenium相关、性能测试、LordRunner相关等,希望能帮助到有心在技术这条道路上一路走到黑的朋友!

    通过大数据总结发现,其实软件测试岗的面试都是差不多的。常问的有下面这几块知识点:

     测试理论(测试基础+需求分析+测试模型+测试计划+测试策略+测试案例等等)
     Linux( Linux基础+Linux练习题)
     MySQL(基础知识+查询练习+万年学生表经典面试题汇总+数据库企业真题)
     Web测试
     API测试
     App测试
     管理工具
     Python基础(Python基础+编程题+集合+函数+Python特性等等)
     Selenium相关
     性能测试
     LordRunner相关
     计算机网络
     组成原理
     数据结构与算法
     逻辑题
     人力资源
    一、软件测试基础
    软件测试的步骤是什么?
    如何录制测试脚本?
    应该考虑进行如何测试的测试方法
    怎样估计测试工作量?
    测试设计的问题
    当测试过程发生错误时,有哪几种解决办法?
    测试执行的问题
    测试评估的目标
    如何提高测试?
    C/S模式的优点和缺点
    B/S模式的优点和缺点

    二、Linux
    grep和find的区别? grep 都有哪些用法?
    查看IP地址?
    创建和删除一个多级目录?
    在当前用户家目录中查找haha.txt文件?
    如何查询出tomcat的进程并杀掉这个进程,写出linux命令?
    动态查看日志文件?
    查看系統硬盘空间的命令?
    查看当前机器listen 的所有端口?

    三、Python
    统计python源代码文件中代码行数,去除注释,空行,进行输出?
    python调用cmd并返回结果?
    冒泡排序
    1,2,3,4 这4个数字,能组成多少个互不相同的且无重复的三位数,都是多少?
    请用 python 打印出 10000 以内的对称数(对称数特点:数字左右对称,如:1,2,11,121,1221 等)
    给定一个整数 N,和一个 0-9 的数 K,要求返回 0-N 中数字 K 出现的次数
    判断 101-200 之间有多少个素数,并输出所有的素数
    一个输入三角形的函数,输入后输出是否能组成三角形,三角形类型,请用等价类- 划分法设计测试用例

    四、MySQL
    你用的Mysql是哪个引擎,各引擎之间有什么区别?
    如何对查询命令进行优化?
    数据库的优化?
    Sql注入是如何产“生的,如何防止?
    NoSQL和关系数据库的区别?
    MySQL与MongoDB本质之间最基本的差别是什么
    Mysql数据库中怎么实现分页?
    Mysql数据库的操作?
    优化数据库?提高数据库的性能?
    什么是数据的完整性?

    五、Web
    • Web测试和app测试区别?
    • WEB测试环境搭建和测试方法
    • WEB测试教程
    • WEB测试要点及基本方法
    • Web测试页面总结

    六、接口测试
    什么是接口
    如果模块请求http改为了https,测试方案应该如何制定,修改?
    常用HTTP 协议调试代理I具有什么?详细说明抓取HTTPS协议的设置过程?
    描述TCP/IP协议的层次结构,以及每一-层中重要协议
    jmeter,一个接口的响应结果如下:
    接口产生的垃圾数据如何清理
    依赖第三方的接口如何处理
    测试的数据你放在哪?
    什么是数据驱动,如何参数化?

    七、性能测试
    你认为性能测试的目的是什么?做好性能测试的工作的关键是什么?
    服务端性能分析都从哪些角度来进行?
    如何理解压力测试,负裁测试以及性能测试?
    如何判断是否有内存泄漏及关注的指标?
    描述软件产“生内存泄露的原因以及检查方式。(可以结合- 种开发语言进行描述)
    简述什么是值传递,什么是地址传递,两者区别是什么?
    什么是系统瓶颈?

    八、selenium
    如何开展自动化测试框架的构建?
    如何设计自动化测试用例:
    webdriver如何开启和退出一个浏览器?
    什么是自动化测试框架?
    Selenium是什么,流行的版本有哪些?
    你如何从命令行启动Selenium RC?
    在我的机器端口4444不是免费的。我怎样才能使用另一个端口?
    什么是Selenium Server,它与Selenium Hub有什么不同?
    你如何从Selenium连接到数据库?
    你如何验证多个页面上存在的一个对象?
    XPath中使用单斜杠和双斜杠有什么区别?
    如何编写SeleniumIDE/ RC的用户扩展?
    如何在页面加载成功后验证元素的存在?
    你对Selenium Grid有什么了解?它提供了什么功能?
    如何从你的Java Class启动Selenium服务器?
    Selenium中有哪些验证点?
    什么是XPath?什么时候应该在Selenium中使用XPath?

    九、计算机与网络
    一台计算机的IP是192.168.10.71子网掩码255.255.255.64与192.168.10.201 …
    请简述DNS、活动目录、域的概念。
    10M兆宽带是什么意思?理论下载速度是多少?
    什么是IP地址?
    OSI七层网络模型的划分?
    TCP和UDP有什么不同?
    HTTP属于哪一层的协议?
    HTTP和HTTPS的区别?
    cookies和session的区别?
    HTTP的get请求和post请求的区别?
    HTTP1.0和HTTP1.1有什么区别
    TCP的连接建立过程,以及断开过程?
    客户端使用DHCP获取IP的过程?
    写出某个网段的网络地址和广播地址?

    十、人力资源
    你的测试职业发展是什么?你自认为做测试的优势在哪里?
    你找工作时,最重要的考虑因素为何?
    为什么我们应该录取你?
    请谈谈你个人的最大特色。
    一个测试工程师应具备那些素质和技能?
    还有问一下你是怎样保证软件质量的,也就是说你觉得怎样才能最大限度地保证软件质量?
    为什么选择测试这行?
    如果我雇用你,你能给部门带来什么贡献?

    最后

    整份文档一共有将近 200 页,全部为大家展示出来肯定是不太现实的,为了不影响大家的阅读体验就只展示了部分内容,还望大家海涵,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习!

  • 相关阅读:
    在64位电脑上 使用anaconda虚拟环境将Python程序打包成32位
    计算机网络-数据链路层(无线局域网(802.11局域网,MAC帧头格式,无线局域网的分类,VLAN基本概念与基本原理))
    【BP回归预测】改进的鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 2184期】
    基于Socket的MFC网络编程
    CSS标准流
    【新版】软考 - 系统架构设计师(总结笔记)
    DBT 项目建立
    七、Nacos和Eureka的区别
    介绍几个主流社媒平台的特点,以及如何通过这些社媒渠道开展营销活动
    Linux 网络编程常用API
  • 原文地址:https://blog.csdn.net/2301_81967703/article/details/138161218