面试过程中接口测试和接口自动化必问的几个问题总结:

一、有做过接口测试吗?用的什么工具,怎么做的?这个问题在面试中问接口相关技能的时候常常被问到,那该如何去回答呢?

其实做接口测试我们可以用Postman、Jmeter或者Python都可以,其中可以挑一款自己熟悉的工具来讲你是怎么做的接口,把你做接口的一个大致流程说清楚。接下来我会一一讲一下这三种工具做接口的一个大致流程

Postman工具:
    首先我会问开发拿到接口文档,编写对应的接口测试用例,然后把对应的url地址,data信息,headers都放入到postman里面,然后设置断言,然后发送接口的请求,看一下接口是否断言成功,对于一些关联接口的测试,我会首先把登录接口调通,然后拿到登录接口返回的token值,通过在后置处理器tests里面把token设置为环境变量,然后在下一个接口的请求头里面通过{{token}} 俩个大括号进行引用,达到关联接口的测试,如果是有参数化的接口测试,我首先会在本地创建一个CSV文件然后造对应的测试数据,在postman左侧栏有一个run点击一下,然后选择本地对应的CSV文件,然后批量运行接口,看一下接口是否运行成功和是否断言成功,完成参数化接口的测试。

Jmeter工具:

先找到开发拿到接口文档,然后进行评审。接口文档的内容:接口的定义、接口的url、请求方法、编码类型、参数、选填\必填、参数的类型、响应码、响应的信息、接口依赖关系等,然后根据文档编写测试用例、测试用例需要考虑是否存在逻辑依赖、根据参数的类型、长度、选填、必填等。编写完测试用例我们使用jmeter进行测试,在测试计划里添加一个线程组、然后添加http请求、信息头管理器、响应断言、查看结构树等组件,点击运行,然后在结果树里查看返回的结果是否符合测试用例的预期结果。

Python+Requests+Unittest框架:
    做过,用的python+requests+unittest单元测试框架+ddt数据驱动来做的,那我大概和您讲一下我做接口自动化的流程吧,首先的话就是我需要打开pycharm然后新建一个py模块,然后导入requests库和time模块等等,然后再通过定义一个方法,把url接口地址,data入参和headers都定义好,然后通过调用requests.post方法把url地址,data入参,headers都传入进去,发送接口请求,得到response返回值,最后通过assert方法进行断言,然后再调用方法,这是我们最开始做接口自动化写的一些线性脚本,但是后面因为做的时间也比较久,用例也比较多,所以我们后续用了一些数据驱动和框架对我们的代码进行了分层封装。

这时候面试官可能又会接着问,那你后面是怎么封装的?有用到什么框架吗?能介绍一下吗?

之前做的这个接口自动化框架大致分了六层
第一层:的话是config配置层 这个里面主要是封装了一些我们测试环境的url地址和一些连接数据库的IP地址,用户名密码等等
第二层:是data数据层 这个里面主要放的是接口的用例,把接口的入参,接口的路径,接口的编号,请求方法都放在这个里面了,一个接口放在一个sheet页面里面,然后一个sheet页面里面有多个接口测试用例,有正常场景的也有多个异常场景的
第三层:是一个library第三方的公共库层 里面主要是放了发邮件的工具类,生成测试报告的工具类还有做数据驱动的ddt模块
第四层:就是utils工具类层 主要封装了读取Excel表格,读取ini配置文件和发送接口请求的工具类
第五层:就是testcase用例层 这个里面首先会创建一个类,然后在里面创建以test开头的方法,然后定义一个data装饰器主要是用来接受Excel表格里面的接口入参,第一步先做数据的处理,然后第二步再通过封装好的发接口请求的工具类发送接口请求得到response返回值,第三步再对接口进行断言,一般会对接口返回的状态码和返回的比较具有唯一性的文本信息进行断言
第六层:就是run运行层 首先会通过把所有的用例加载到一个suite套件里面,然后再通过调用run方法运行这个套件,并且通过HTMLtestrunner模块生成测试报告放到第7层报告层里面,然后最后通过Jenkins做可持续集成,在回归测试阶段,每天晚上都会运行一下我们的接口自动化用例,大致的一个框架结构就是这样的。

 二、有做过哪些接口的测试列举一些接口

比如贷款相关的接口有
1.登录接口(login)
2.贷款申请界面信息提交接口(submitLoanApplyInfo)
3.绑卡接口(bindCard)
4.还款接口(repayment)
5.获取合同接口(getContractList)
6.获取绑卡银行列表接口(getBankList)
7.放款回调接口(giveLoanFeedback)
8.还款回调接口(repaymentFeedback)
9.逾期回调接口(overdueFeedback)
 API接口签名生成规则:
1.将请求数据JSONObject转换成字符串 String data = dataJSONObject.toString();
2.拼装code、method、data与signKey拼装生成signStr String signStr = code+method+data+signKey;
3.生成签名:String sign = MD5Util.Encrypt(signStr);

三、列举一个接口讲一下是什么接口,里面有哪些参数,你是怎么设计接口测试用例的?
1、贷款申请界面信息提交接口(submitLoanApplyInfo)

2、还款接口(repayment)

接口的入参:

代码:(使用json把接口参数传进去,然后发起请求)

{"code": "ABCDEF","method": "repayment","data": {"orderId":"143b9970865347be9db0e69283585192","userId":"123456","verifyCode":"456321"},"sign": "{签名规则参考 接口请求签名章节}","timestamp": 1500693926
}

响应参数:

3、获取绑卡银行列表接口(getBankList )

接口的入参:
{"code": "ABCDEF","method": "getBankList","data": {},"sign": "{签名规则参考 接口请求签名章节}","timestamp": 1500693926
}
接口的返回值:
{   "code": "success","message": "请求成功","result": {"bankList":[{"bankName": "工商银行", "bankCode": "ICBC"},{"bankName": "中国银行", "bankCode": "BOC"}]}
}

4、 放款回调接口(giveLoanFeedback)

接口的响应:
{"code": "success","message": "请求成功"
}

四、接口测试,主要从哪些方面去设计接口用例?

6.1 接口的功能——针对业务,考虑接口的功能是否正常,确保符合接口文档中对功能的描述

6.2 接口的逻辑——接口依赖,接口之间的约束(权限约束、次数约束、接口关联之间的cookie)

6.3 接口的异常——参数名异常、参数值异常

参数异常:参数名错误、参数多1一个、参数少1个、参数为空

参数值异常:必填参数、数据类型int、string、objrct、长度、最长最短、取值范围

6.4 接口请求超时,返回正确的响应结果

6.5 接口的响应结果——不同的入参组合、返回结果是否正确

6.6 接口的安全——接口加密、cookie-session的有效时间、接口请求后台日志有没有加密、数据有没有落库

6.7 接口的性能——接口最大并发、接口的响应时间、接口最大吞吐量

五、怎么设计接口测试用例?
    一般会根据接口的入参字段的类型比如int整型我会输入浮点,字符串等等,还有长度限制比如长度限制为6-8位,我会通过边界值的用例设计方法,选择6,7,8位和5,9位进行测试,除了入参我还会对接口的返回值进行校验会根据不同的返回值来构建不同的入参进行验证,还有接口之间的逻辑关系比如有关联接口,我会首先拿到上个接口的返回值存放在环境变量里面,再作为下个接口的入参,还有接口的鉴权token失效问题,以及是否支持get和post接口请求方法,还有接口的content-type,以及接口的幂等性来对接口进行一个测试。

六、对于关联接口怎么做的测试?
    简单来讲其实就是把上个接口的响应结果提取出来然后给到下一个接口的入参,首先我会调通登录接口之后,通过正则表达式把登录接口返回的响应体中的token值提取出来,然后存入到构造函数里面,然后在下一个接口的请求头中引用构造函数中的token值,达到关联接口的测试的目的。

这里用Python举例,Postman和Jemter其实更简单

# 面试题:接口自动化当中的关联接口测试你是怎么做的?
import requests
class Api:def __init__(self):self.dict1={}   #定义一个空的字典用来接受token值def login(self):'''定义一个登录接口、调通之后获取token值'''url = 'http://192.168.1.1:8080/login'data ={"username":"admin","password":123456}headers = {"content-type":"application/x-www-form-urlencoded"}response = requests.post(url,data=data,headers=headers)print(response.json())  #打印输出token = re.findall('"token":"(.+)","code"',response)self.dict1['token'] = token[0]   #把token值进行设置键值对def query(self):'''查询用户接口、取到上个接口返回值中的token作为下个接口的请求头的里面入参、完成鉴权的操作'''url = 'http://192.168.1.1:8080/query'data = {"search": "1", "page": 5}headers = {"content-type": "application/x-www-form-urlencoded","token":self.dict1['token']}response = requests.post(url, data=data, headers=headers)print(response.json())  # 打印输出if __name__ == '__main__':m = Api()m.login()m.query()

七、接口过程当中碰到了哪些bug?

测试工作了这么多年,肯定发现了许许多多的bug,回答这个问题的时候得讲讲让自己印象深刻的逻辑性bug,当时是怎么操作发现的以及产生bug的原因最后的怎么解决的。

举几个例子,仅供参考:

BUG1:

    有一次在做接口测试的时候、测用户贷款详情列表接口的时候、刷新页面的时候一直报:"接口参数异常"的错误、但是通过fiddler抓包发现前端传递的接口参数是没有问题的、也是按照接口文档去传的、然后通过登录后台日志系统通过把刚刚发送请求走单的用户名当做是搜索的关键字、在日志管理系统中按Ctrl+F输入关键字进行搜索根据接口请求的时间段搜索到发送的接口请求、发现loan_information接口的后端接口入参里面loan_amount这个参数写重复了、导致前端传递1个参数过去后端逻辑判断出现了问题、后面开发人员通过把这个接口的参数删除1个重复的再进行调用就可以了。(这个属于后端的bug)

BUG2:

之前有个接口有些改动点增加了一个保全编号的字段:record_no ,但是我在测的时候这个字段没有数据返回,返回的是一个空的数值[]
bug原因:数据库虽然有数据、但是mybaits(中文音标:麦贝蒂斯)设置里面对应查询SQL语句和数据库没有做映射关系、导致数据库里面,的数据查不出来、所以后面接口显示返回一个空数组

BUG3:

信用卡转账的时候同一时间多次提交、导致后台生产了多次转账交易记录
bug原因:后端代码使用了多线程、但是没有用到线程安全没有加锁、导致接口幂等性出现了问题!!

BUG4:

保险项目填写投保人或者被保人信息需要确认点击确认投保或被保人信息因为需要调第三方接口来实名认证  但是有一些用户的隐私数据不想给到第三方系统知道  所以有一个专门处理数据脱敏的服务  第一次在测试的时候是没有问题的  因为用户数据这一块比较敏感 所以为了确保用户数据安全又回归了一遍 但是回归的时候发现用户数据没有被脱敏  这是一个偶现的bug
bug原因:发送接口请求之后服务端响应我的接口请求的时候接口请求被重定向到了另外一个服务上面了所以导致原本应该处理数据脱敏的服务没有接收到请求所以日志信息里面提现了明文的用户信息

BUG5:

答:我手动点击还款的同时,后端同步自动触发调接口进行还款,前端都显示还款失败,同时产生了2条还款失败的记录,是因为后端代码使用了多线程、但是没有用到线程安全没有加锁、此时内存数据是共享的状态,导致接口幂等性出现了问题。

八、接口的覆盖率怎么样?通过率怎么样?

我之前有负责过100多个接口的测试,覆盖我自己测的业务95%以上的功能场景,然后我在做接口自动化测试的时候通过率主要还是看环境是否稳定,还有就是数据参数化没有问题,接口也没有改动的话,脏数据能不能合理的清理,如果这些都是没有问题的话,一般可以达到100%的通过率

九、做这个自动化用到了哪些模块?

1、requests(内置模块,通过导入此模块可对接口进行调用,主要用来发送HTTP请求的)

2、urllib3(第三方模块,用于操作URL,urllib是内置的)

3、pymysql(第三方模块,用来连接操作数据库)

4、xml(内置模块 实现不同语言或程序之间进行数据交换的协议,跟json差不多)

5、ddt(第三方模块,数据驱动,简单来说就是测试数据的参数化)

6、hashlib(内置模块,提供字符串加密功能的模块,包含MD5和SHA的算法)

7、pytest(pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高)

8、pytest-allure(第三方模块,生成allure测试报告)

9、re(通过正则表达式对字符串进⾏匹配)

先写这么多,后面还想到一些问题再进行更新。。。

面试中有关接口测试和接口自动化的那些事 ~相关推荐

  1. 【测试面试】自我分析+功能+接口自动化+性能测试面试题(大全),知己知彼百战百胜......

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

  2. python接口测试面试_面试秘籍 | 一文搞定面试中接口测试问题

    作为软件测试的垂直领域深耕者,不仅要精于软件测试技术,更要关注行业软件测试需求,最直观的需求莫过于企业招聘需求,最近有不少求职的朋友跟我诉苦,企业对接口测试的要求越来越多了,都跪在了接口测试上,这让我 ...

  3. 超详细 | 接口自动化测试总结与分享入门篇

    这篇文章,就说说功能测试到接口自动化的进阶,以及接口自动化的一些事~ 前言 自动化测试,算是近几年比较火热的一个话题,当然,更是软件测试未来的一个发展趋势.未来,功能测试等非核心的测试工作,都将被外包 ...

  4. 面试中如何做自我介绍分析

    面试的时候面试官基本每次都让会我们做自我介绍, 那么面试官究竟想要听到的内容是什么呢? 1.简明扼要的介绍 2.一些取得的关键成就 3.能否有胜任职位的能力 4.求职者如何看待自己应聘的职位 5.回答 ...

  5. python自动化接口测试中的cookies怎么实现_Python接口自动化之cookie、session应用

    ------·今天距2021年260天·------ 这是ITester软件测试小栈第112次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化-requests模块之post请 ...

  6. soapui工具_python接口自动化(四)--接口测试工具介绍(详解)

    简介 "工欲善其事必先利其器",通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进 ...

  7. python接口自动化(四)--接口测试工具介绍(详解)

    简介 "工欲善其事必先利其器",通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进 ...

  8. python接口自动化 一个变量 其他接口要用_python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)...

    简介 上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试. 什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统 ...

  9. Python接口自动化之登录接口测试

    VOL 117 29 2020-04 今天距2020年246天 这是ITester软件测试小栈第117次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

最新文章

  1. macbook和 windows共享文件
  2. 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题
  3. Oracle中事务锁(锁住的表、锁住的会话)
  4. ModuleNotFoundError: No module named ‘openpyxl‘
  5. Mapreduce基本工作流程
  6. 探秘Java中的String、StringBuilder以及StringBuffer
  7. Android开发的环境搭建及HelloWorld的实现
  8. matlab求借带参数的方程组
  9. 基因组中的趣事(二)- 最长的基因2.7 million,最短的基因只有8 nt却能编码
  10. 【STM32】【STM32CubeMX】STM32CubeMX的使用之九:ADC
  11. 接口测试学习之json
  12. [渝粤教育] 新疆财经大学 金融工程 参考 资料
  13. 软件公司内部协作平台的选型(项目/BUG/需求管理及用户支持)
  14. H3CNE实验:Comware基本命令操作
  15. 用matlab做一个有刻度的网格,MATLAB已知坐标如何画网格图
  16. 手机影音第十六天,集成eventbus代替广播 ;在音乐播放页面中间部分显示歌词
  17. elasticsearch7 分组统计
  18. 百度语音集成离线功能
  19. 掌舵9年,艾伦研究所创始CEO 光荣退休!他曾预言中国AI将领跑世界
  20. 吊打面试官,笑对 2022 金三银四,2022年最全面试真题大汇总

热门文章

  1. 单例模式《单例模式概念、什么时候能用到单例模式、单例模式的好处》
  2. random.uniform()和random.random()区别
  3. USACO2018 OPEN TEST - Silver
  4. SSH服务器CBC加密模式漏洞(CVE-2008-5161)
  5. python开发的桌面应用程序
  6. 解决 golang 中 wrote more than the declared Content-Length
  7. 基于视觉导航的自主机器人简介(一)
  8. java将字符串内容转换为字节数组
  9. VS2010、VS2012、VS2013、VS2015对C++11的支持进度
  10. stm32毕设 stm32人体健康状态检测系统(项目开源)