代码改变世界

接口自动化测试设计

2018-05-16 14:54  玲小喵  阅读(490)  评论(0编辑  收藏  举报

1.接口测试基础

1.1.什么是接口测试?

1.2.接口测试原理?

 

1.3.接口测试分类?

1.4.为什么接口测试?

image2016-8-28%2019%3A35%3A36.png?versio

    1).UI:通常指 Web、App的测试;2).Service:一般针对接口、服务,如 HTTP、WebService 接口测试;3).Unit:包含比较多,如:Web应用的dao、service、model,controller的junit单元测 试,javascript、css的前端单元测试,大部分应由开发做测试保证。

 

1.4.接口测试范围?

    新增及改动接口的测试(接口的改动点,可通过代码及配置 diff 测试,圈定最小测试范围。服务端接口迭代过程,需测试接口依次增多。测试时间足够条件下,当然需要进行全回归测试。但时间较短,应考虑接口的重要性与优先级,优先对核心且调用频繁的接口测试。)新增及改动业务功能测试。接口的性能与安全测试(是否需要对接口实施性能和安全测试,取决于接口特点。一个对第三方电商平台提供支付功能的接口,如:支付宝接口,性能和安全测试是 必须要例行化测试的。一个系统内部调用的获取列表页接口,性能和安全性考虑优先级相对不那么高。整体而言,从接口的业务特点,即流量大小、调用方式、服务 架构、业务闭环的重要性等角度考虑。)

 

2.接口测试策略

               接口依赖关系检查,通常用户的一个操作可能对应服务端调用多个接口完成,从业务操作角度来看,各种业务操作所涉及的多个接口之间调用进行测试。依赖关系检 查,主要通过接口的输出值为另一接口的输入值来实现的,因此在进行接口测试之前,需要分析所测试接口的输入值是通过客户端还是其他接口输出来获取的,在设 计测试用例时,加入接口的依赖关系说明以便于测试。

2.1.接口测试关注点?

image2016-8-28%2019%3A36%3A50.png?versio

2.2.接口测试Case设计?

Case参考点:输入参数测试,功能测试,逻辑测试,异常情况。

设计思路:a)优先级-针对所有接口,外部接口 > 系统内部核心接口 > 系统内部非核心接口。

                 b)优先级-针对单接口, 正向用例 > 逆向用例(通常情况,非绝对);前置条件 > 默认参数 > 参数必填 > 参数关联 > 参数类型限制 > 参数数据范围限制。

Case覆盖:主流程 -> 分支流程 -> 异常流程。

 

3.接口自动化演进

image2016-8-28%2019%3A38%3A50.png?versio

    接口自动化演进,通常是从手动测试 -> 工具测试 -> 代码测试 -> 平台服务化演进。

    手动:从客户端的业务场景测试去覆盖服务层接口,借助Fillder、Charles、FireBug等工具抓包分析。优点:简单,模拟真实业务场景;缺点:接口逻辑覆盖不够,异常和输入校验不足,重复繁琐,回归成本高。

    工具:使用PostMan,HttpRequest,Jmeter, SoapUI 等工具做接口测试。优点:容易保证接口逻辑覆盖,便于异常和输入校验,提高回归效率;缺点:缺乏自定义灵活性,接口依赖处理繁琐,不便自动化工程化。

    代码: 选择如,Java + Httpclient,Python + Requests, PHP + Requests/cURL/HTTPFul,搭建接口自动化框架,开发接口自动化case。优点:灵活性好,扩展性强,逻辑覆盖容易,异常和输入校验充 分,回归效率高;缺点:存在一定学习成本,框架及case脚本需持续维护。

    平台:通用的接口自动化测试平台,简而言之满足接口自动化测试的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.接口自动化框架设计?

image2016-8-28%2019%3A37%3A55.png?versio

接口自动化测试框架设计关键点,其实可以用Driven、Organize、Support、CI概括。

Driven:Data Driven(数据驱动),接口测试关注输入、输出及各种异常数据,归根结底其实就是做数据测试。如何设计合理的参数化实现,降低测试数据维护成本,是自 动化框架设计的重要内容。KeyWord Driven(关键字驱动,即封装),将测试过程中公共过程、通用步骤尽量封装为通用函数,其中分别为业务、过程common 函数。合理的封装函数设计,将使得自动化脚本简洁化、一致性,可维护性高。

Organize:组织。考虑两个维度,如何管理组织自动化工程?如何组织自动化case?以Java语言举例,接口自动化case较少只有几个,创建一个普通java工程项目,在 main方法中,罗列写出case实现即可。无可厚非,这是一种简单实现。但随着接口数量增加,接口case越来越多,这种方式的维护成本越来越高,冗余越来越重。我们需要考虑将自动化工程化而不是脚本化,即做工程管理,如使用maven管理工程,配置各类jar包依赖,定义测试等。测试case使用单测 工具管理组织,如:junit/TestNG,有什么好处?定义了case的执行顺序,通用丰富的assert验证,结果统计收集等。

Support:接口自动化测试不只是模拟一个请求发送及响应解析的过程,做为框架需考虑的远不只这些。如:json数据的比对,数据库增删改查操作,接口的数据mock构造,md5值校验,url的unicode/encode,report,email等等。

CI:自动化框架搭建了,自动化case工程化了。选择什么方式调度,什么时候执行。IDE 手动调度执行,bat/sh?CI 是一种高效的机制,每次代码编译打包部署,都应该触发CI的自动化执行,自动化框架需要考虑CI的集成。

 

4.外面团队,如何做接口自动化?

测试工具:PostMan, SoapUI,Jmeter……

自动化框架

    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

    PHP:php + requests + phpUnit + Jenkins

    NodeJS:node.js + mocha +supertest + Jenkins