谈Rest接口自动化测试(12.23)

在19日写的自动化测试文章里面曾经谈到过接口自动化测试,这篇文章做为补充。

要知道原来对于接口的测试,我们经常会采用类似SoapUI,Postman等工具进行测试,或者再定制些脚本让基于上面工具录制的脚本能够自动运行。在我们的SOA管控平台里面也会做接口的自动化测试,而这部分功能实现即基本全部是自己写定制代码来实现,并不具备太好的通用性。

今天专门针对Http Rest接口来谈下接口自动化测试的方法实现。

基于Java+TestNG+Rest Assured进行自动化测试

可以看到TestNG和Rest Assured是两个用于自动化测试的独立类库,这种方法偏白盒测试,需要自己编写测试代码,但是灵活性却相当高,同时可以和类似Jekins工具集合,当然也就可以和我们DevOps平台集成。

Rest-Assured 是一个测试Restful Web Service的Java类库,我们可以创建高度定制的HTTP请求以发送到Restful服务器。这使我们能够测试各种各样的请求组合,依次测试核心业务逻辑的不同组合。Rest-Assured库提供了验证从服器收到的HTTP响应的功能。例如我们可以验证状态码,状态信息,标题甚至是响应的正文。这使Rest-Assured成为一个非常灵活,可用于测试的Java库。

而TestNG是一个开源自动化测试框架,其灵感来自JUnit和NUnit,TestNG还涵盖了整个核心的JUnit4功能,但引入了一些新的功能,使其功能更强大,使用更方便。优势:支持依赖测试方法,并行测试,负载测试,局部故障;灵活的插件API;支持多线程测试;可以看到TestNG不仅仅可以测试Rest接口,也可以测试标准的Java API接口方法。

https://www.cnblogs.com/wade-xu/p/4229805.html

注:上面这篇文章可以看到采用TestNG实现接口自动化测试,同时进行扩展,将测试脚本管理和测试数据管理分离。同时测试数据全部体现在Excel中。从Excel中读入测试输入,同时将测试接口输出到Excel中。

https://my.oschina.net/u/4112294/blog/3037471

注:上面这篇文章谈到TestNG和Rest Assured相结合如何进行接口自动化测试,同时如何和Jekins持续集成工具集成,将测试结果报告进行输出。

Rest Assured 自带支持对JSON、xml的解析,同时也提供了类似hasITems ,is,equalTo等静态方法供使用。尽管Rest Assured 提供了校验方法,但是在实际API自动化测试过程中,因为往往需要校验的字段非常多,建议还是直接先把要校验的JSON字段解析出来,再通过TestNG提供的Assert类进行校验。

对于Rest Assured的参考网站如下:

官方网站: http://rest-assured.io/

gitHub: https://github.com/rest-assured/rest-assured

帮助文档: https://github.com/rest-assured/rest-assured/wiki/Usage

javadoc: http://www.javadoc.io/doc/io.rest-assured/rest-assured/3.0.2

LuckyFrame开源测试平台

LuckyFrame测试平台是一款免费开源的测试平台,最大的特点是全纬度覆盖了接口自动化、WEB UI自动化、APP自动化,并且支持分布式测试。

既然是一个完整的测试平台,那么自然会提供测试用例管理,测试数据管理,测试执行,质量管理,测试结果和测试报告查看等相关的功能。这个平台提供在线的Demo可以查看。

LuckyFrame自动化测试框架分为两个项目,一个服务端项目(LuckyFrameWeb),一个客户端项目(LuckyFrameClient),服务端项目主要负责自动化过程的管理,比如用例管理、测试任务管理等等。客户端其实就是测试执行机,主要负责测试用例以及任务的执行。

Web项目主要分为系统管理、UTP、 质量管理、测试工具\测试环境管理等模块。

具体演示地址: http://www.luckyframe.cn/page/lfdemo.html

这个平台感觉有些思路还是可以借鉴,在前面DevOps整个子系统划分的文章里面我也谈到,对于测试管理既可以是一个简单的模块放在DevOps支撑平台里面,也可以是一个独立的子系统,然后再实现和DevOps支撑平台的集成。

Http Runner自动化测试框架

HttpRunner 是一个基于 Python 开发的测试框架,2018年python开发者大会上,了解到HttpRuuner开源自动化测试框架,采用YAML/JSON格式管理用例,能录制和转换生成用例功能,充分做到用例与测试代码分离,相比excel维护测试场景数据更加简洁。在此,利用业余时间研究这个框架去实现接口自动化测试。

HttpRunner 是一款面向 HTTP(S) 协议的通用开源测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

https://v1.httprunner.org/

设计理念

充分复用优秀的开源项目,不追求重复造轮子,而是将强大的轮子组装成战车

遵循约定大于配置的准则,在框架功能中融入自动化测试最佳工程实践

追求投入产出比,一份投入即可实现多种测试需求

核心特性

继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求

测试用例与代码分离,采用YAML/JSON的形式描述测试场景,保障测试用例具备可维护性

测试用例支持分层机制,充分实现测试用例的复用

测试用例支持参数化和数据驱动机制

使用 skip 机制实现对测试用例的分组执行控制

测试请求支持完善的 hook 机制

借助辅助函数(debugtalk.py),在测试脚本中轻松实现复杂的动态计算逻辑

基于 HAR 实现接口录制和用例生成功能(har2case)

结合 Locust 框架,无需额外的工作即可实现分布式性能测试

执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完美结合

测试结果统计报告简洁清晰,附带详尽统计信息和日志记录

具有可扩展性,便于扩展实现 Web 平台

HTTPrunner可以应用于一些简单的接口测试,或者是不会有大改动的接口的回归测试,这样也挺方便的。但是对于一些复杂的测试不如采用Rest Assured功能强和灵活,毕竟Rest Assured基于Java,可以灵活进行Java代码脚本的扩展。