接口自动化基础知识

参考原文链接:https://blog.csdn.net/weixin_45630042/article/details/103978383
https://blog.csdn.net/HemingwayM/article/details/106134455

1、什么是接口?

接口分为程序内部的接口和系统对外的接口。
程序内部的接口:方法与方法,模块与模块之间的交互,程序内部抛出的接口,如注册登录发帖。
系统对外的接口:从别人的网站或服务器上获取资源或信息,对方不会提供数据库共享,只能提供一个写好的方法来获取数据,如购物网站和第三方支付之间。

2、接口的本质

接口就是一个函数,通过将接口部署到web容器(tomcat,jboss,weblogic等),发布服务后,就可以通过一个url地址去访问到接口了。而接口文档里面描述的接口参数呢其实就是函数的参数,接口的返回数据就是函数的返回值。
即 接口=函数,接口参数=函数参数,接口返回值=函数返回值

3、平常怎么测接口的?

参数组合、接口安全(绕过前端验证、绕过身份授权、参数是否加密、密码安全规则)、异常验证(必传非必传、参数类型、入参长度)、性能测试(接口的响应时间)
通过性验证:首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。
参数组合:现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。

接口安全
1、绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?
2、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功
3、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。
4、密码安全规则,密码的复杂程度校验
异常验证
  所谓异常验证,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。
性能测试
接口并发情况,如上面提到的:一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单
接口响应时间,响应时间太长了,肯定需要优化,一般都是毫秒级别
在这里插入图片描述

4、接口测试的一般流程。

类似于功能测试流程,一个完整的接口测试流程如下:
(1)分析接口文档和需求文档
(2)编写接口测试计划
(3)编写接口测试用例并评审
(4)接口测试执行
(5)输出接口测试报告

5、下个接口的请求参数依赖上个接口的返回数据怎么办?

不同的接口封装成不同的函数或方法,需要的数据return出来,用一个中间变量a去接收。后面的接口传a就可以了。

6、在手工接口测试或者自动化接口测试过程中,上下游接口有数据依赖如何处理?

用一个全局变量来处理依赖的数据

7、依赖于登录的接口如何处理?

登录接口依赖token的,可以先登录后,token存到一个yaml或者json或者ini的配置文件里面,后面所有的请求去拿这个数据就可以全局使用了。如果是cookies的参数,可以用session自动关联。
s=requests.session()后面请求用s.get()和s.post()就可以自动关联cookies了

8、依赖第三方的接口如何处理?

这个需要自己去搭建一个mock服务、模拟接口返回数据。
mock可以用在单元测试过程中,还有一个用途,当前端开发在开发页面的时候,需要服务端提供API接口,此时服务端还没开发完成,或者说没搭建测试环境,这时候前端开发会自己mock一个api服务端,自己给自己提供调用接口的返回数据。

9、测试数据放在哪?

① 对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成

② 对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,execl等都可以

③ 对于反复使用的数据,如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理

④ 对于邮箱配置的一些参数,可以用ini配置文件

⑤ 对于全部是独立的接口项目,可以用数据驱动方式,用execl/csv管理测试的接口数据

⑥ 对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,卸载i配置里(如ini)

⑦ 对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到python脚本的开头,十年八年都不会变更的。

10、json和字典的区别?

json是一种轻量级的数据交换格式。json本质上还是字符串,只是按key:value这种键值对的格式来写的字符串。
如:a = {‘a’:1, ‘b’: 2} 这是字典
a = ‘{‘a’: 1, ‘b’: 2}’ 这是json

11、做接口测试过程中发现过哪些bug?

比如:测试提现金额的提交,有一天数据库里插入了一个提现金额为负数的,开发要你复现,你在页面上怎样测试都没错误,那是前端做了限制。可以绕过前端,直接用接口工具去直接请求接口,或者用fiddler去抓包,抓到接口后修改金额为负数。

12、当一个接口出现异常,你是如何分析异常的?

用fiddler工具抓包或者浏览器上按F12调试。app上就用fiddler设置代理,去看请求报文和返回报文。
查看后端日志,xshell连上服务器,查看日志。

13、如何模拟弱网设置?

fiddler和charles都可以模拟,平常说的模拟丢包,也就是模拟弱网测试。
通过charles设置延迟,进行模拟不同的网络:配置好charles后,正常联网,选择throttle settings设置弱网环境
thtottle preset选择弱网环境目标:2G或3G;也可以在Bandwidth中选择上传下载数值(kbps)
通过fiddler模拟弱网:打开fiddler ->rules ->customer rules ->会出现一个fiddler script编辑器窗口,
利用ctrl+F组合键调出搜索对话框,键入m_Simulate进行搜索,找到如下代码框:
upload代表上传速度,download代表下载速度。自定义修改之后,保存后退出。
继续在fiddler界面上找到rules-> perfomance-> 点击Simulate Modem Speeds,完成弱网模拟功能的打开。

14、怎么分析bug是前端的还是后端的?

先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对。
请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题。

15、通过一个案例看为什么要做接口测试?

请看以下一个案例,如下图一个提现功能
在这里插入图片描述
比如这个输入框,平常拿到这个web页面,会对输入框做用例设计:

输入一个负数(如:-100),点提交
输入金额为0(如:0),点提交
输入金额为0-100的数(如:20),点提交
输入金额为100(如:100),点提交
输入金额大于100(如:108),点提交
输入1位小数(如:10.1),点提交
输入2位小数(如:10.12),点提交
输入3位小数(如:10.123),点提交
按照这个等价类,边界值用例测完,页面上不能输入负数和大于3位数小数点,然后就可以上线了。
然而。。。突然有一天数据库里面插入了一个提现金额为负数(-100),于是整个部门炸锅了,首先找到测试(背锅)去复现问题,测试在页面上反复输入负数,无法提交,认为没问题啊!

首先前端开发对输入框是做了限制的,前端的web开发肯定没问题,这个锅前端开发MM不背。那么如果别人用户不通过你的web页面,直接发请求提交了呢?
纳尼!!!不通过页面也能提交。。。这就是我们接下来要提到的接口测试了。

16、接口测试能发现那些问题?

这个问题其实回到起来很简单,只要做过接口测试的,总能发现几个BUG吧,把你平常发现的bug说2-3个就可以了。
面试官出这个题,主要是想知道你是不是真的做过接口测试,毕竟现在很多小伙伴简历都是写的假的(你要不写估计面试机会都没有,没办法,为了生存,能理解)
比如上面说的,提现输入框,在页面上输入负数,肯定是无法提交过去(前端页面会判断金额),如果我不走前端,直接用接口工具发请求,输入一个负数过去。
(假设服务端没做提现金额数据判断)
余额=当前余额(100)-提现金额(-100),那么提现-100,余额就变成200了,也就是越提现,余额越大了
可以用接口工具去直接请求接口,也可以fiddler抓包,抓到接口后修改金额为负数
在这里插入图片描述
所以,接口测试的必要性就体现出来了:
1.可以发现很多在页面上操作发现不了的bug
2.检查系统的异常处理能力
3.检查系统的安全性、稳定性
4.前端随便变,接口测好了,后端不用变
5.可以测试并发情况,一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单
6.可以修改请求参数,突破前端页面输入限制(如金额)

17、没有接口文档如何做接口测试

没有接口文档,那还能咋办,瞎测呗!一个公司的开发流程里面,如果接口文档都没有,是无法展开接口测试的,你都不知道这个接口干什么的,也不知道具体每个字段代表什么意思,那还测啥呢?
–当然,你肯定不能回答面试官不测(心理mmp,脸上笑嘻嘻),接下来就是扯犊子时间
1.没有接口文档,那就需要先跟开发沟通,然后整理接口文档(本来是开发写的,没办法,为了唬住面试官,先说自己整理了)
2.没有接口文档,可以抓包看接口请求参数,然后不懂的跟开发沟通

本题主要靠情商,通俗来说就是忽悠能力,先唬住面试官了再说,进去了也是瞎测测,随时做好背锅的准备

18、在接口测试过程中,上下游接口有数据依赖如何处理

用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数

19、当一个接口出现异常,你是如何分析异常的?

  用fiddler工具抓包或者浏览器上按F12调试。app上就用fiddler设置代理,去看请求报文和返回报文。
  查看后端日志,xshell连上服务器,查看日志。

20、自动化使用的测试框架是什么?简述自动化框架的设计、维护

1、自动化使用的测试框架:
语言:python
测试框架:unittest(assertEqual,assertTure,assertFalse)
接口调用:requests(API非常简洁)
数据驱动:ddt(装饰器:ddt类,unpack测试方法装饰器解包时候,data测试方法装饰器,可迭代的数据类型)
注:普通用户,管理用户,数据库,配置文件—基础数据
数据管理:openpyxl(excel,CSV,json,yaml,txt)
数据库交互:pymysql —根据数据库选择相应的第三方模块来完成
数据格式的转换:eval,json
日志处理:logging —清晰的执行过程,快速定位问题
持续集成:Jenkins(通过插件HTML Publisher/git/Email Extension)进行自动构建,生成HTML,发送邮件

2、自动化框架的设计、维护:
1、数据与代码分离,(数据驱动)数据驱动框架
例如:参数不一样,响应不一样
2、结构分层(数据层,用例层,逻辑性)
逻辑层:公用的方法,封装起来,避免用例层的代码冗余
数据层:例如,设计Excel,excel读取,参数化替换等
用例层:存放测试用例

21、在接口自动化测试中都用到了哪些包:

pymysql:连接数据库
ddt:
requests:
urllib:
xlrd:
xlwt:
xlutils:

22、根据什么来做断言?

1、协议状态码: 200,404,503 2、业务状态码:status:0 3、业务数据

23、具体的在这个项目中自动化怎么应用到实际的,您对自动化结果的分析

完成所有的自动化测试框架的设计和实现后,进行接口测试,然后集成到jenkins,配置定时执行,生成html报表,查看测试通过率,查看接口的功能。每次发版时,进行回归测试,新功能开发未提测前

24、做好测试计划的关键是什么?

明确测试目的,增强测试计划的实用性,保证测试用例的实用性和覆盖率,完全需求文档和规格指标书等,严格界定测试周期,测试轮次,测试覆盖模块等

  • 47
    点赞
  • 354
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值