1.1.什么是接口测试?
- 接口测试是测试系统组件间接口的一种测试。
- 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。
- 接口测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
- 接口测试通常包括两类,底层模块之间的接口测试和上层服务接口测试。前者通常由开发工程师做单测覆盖,后者则通常由测试工程师测试保证。
1.2.接口测试原理?
1.3.接口测试分类?
- 系统与系统之间的调用:银行会提供接口供电子商务网站调用,或者说支付宝会提供接口给百度外卖调用。
- 上层对下层服务的调用:如Service层会调用DAO层的接口,而应用层又会调用服务层提供的接口。
- 系统内的服务之间的调用:如注册用户时,先调用用户查询的服务,查看该用户是否已经注册
1.4.为什么接口测试?
2.1.接口测试关注点?
- 入参数据:每个接口入参的默认值、异常类型、非空交易。 参数是否有默认值,若没有,接口逻辑是如何处理的;参数必须输入值,若不输入或输入错误,接口如何返回;接口报错,服务端和客户端是否都做了容错处理。
- 出参返回:接口返回数据是否正确。
- 页码页数的异常值:接口有翻页时,如:第一页有数据,翻到第二页。第二页的数据是否与第一页重复,第二页接口是否报错,页码、页数,传很大的值,接口是否报错。
- 数据库增删改查,如对某接口post请求后,对列表页接口刷新请求,新数据是否与post数据一致。典型case,发布评论,post请求后是否返回评论数据,若无则检查是否缓存未写入数据库导致。
- 参数个数:入参支持多个值时,考虑传值个数多的情况,接口是否报错,接口应返回友好提示。
- 参数类型:输入参数类型必须校验,输出参数必须正确。即是int类型的,不能返回string类型。
- 排序:列表页接口应考虑排序值,升降序、时间排序等是否正确。
- 版本兼容:接口的改动(增加、减少字段)需要兼容老版本。
- 参数联动性:校验返回的多个参数的实际结果是否符合需求,如:返回一个商户的列表,总数字段和列表数据是否一致。
- 业务:从业务中来,到业务中去。接口测试是对业务逻辑的测试覆盖,对业务架构的理解。
2.2.接口测试Case设计?
Case参考点:输入参数测试,功能测试,逻辑测试,异常情况。
设计思路:a)优先级-针对所有接口,外部接口 > 系统内部核心接口 > 系统内部非核心接口。
b)优先级-针对单接口, 正向用例 > 逆向用例(通常情况,非绝对);前置条件 > 默认参数 > 参数必填 > 参数关联 > 参数类型限制 > 参数数据范围限制。
3.接口自动化演进
接口自动化演进,通常是从手动测试 -> 工具测试 -> 代码测试 -> 平台服务化演进。
平台:通用的接口自动化测试平台,简而言之满足接口自动化测试的Web平台,如:Numen。优点:通用性强,上手快,一键式,配套服务全等;缺点:业务契合度,灵活性,维护成本,API扩展等。
3.1.接口测试工具?
代理抓包工具
Fillder, http://www.telerik.com/fiddler
Charles, https://www.charlesproxy.com/
Wireshark, https://www.wireshark.org/
调试工具
Firebug(Firefox), https://addons.mozilla.org/en-US/firefox/addon/firebug/
DevTools(Chrome), https://github.com/CN-Chrome-DevTools/CN-Chrome-DevTools
Json&Url encode工具
json在线解析,格式验证, http://json.cn/
json压缩转义, http://www.sojson.com/yasuo.html
jsonview插件(Chrome), https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?hl=zh-cn
url encode工具, http://tool.chinaz.com/Tools/URLEncode.aspx
测试工具
PostMan, https://chrome.google.com/webstore/detail/postman/
SoapUI, https://www.soapui.org/
Jmeter, http://jmeter.apache.org/
3.2.接口自动化框架设计?
接口自动化测试框架设计关键点,其实可以用Driven、Organize、Support、CI概括。
4.外面团队,如何做接口自动化?
Java:java + httpclient + junit/testng + ant/maven + Jenkins
java + jmeter.jar + + junit/testng + ant/maven + Jenkins
Python:python + (robotFrameWork) + (requests) + (xlrd) + pyUnit + Jenkins
Ruby:ruby + (cucumber/rspec) + (http/net) + TestUnit + Jenkins