IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    API 集成测试实践

    alswl发表于 2016-08-14 19:08:20
    love 0

    abao.png

    为了提高测试,工程师需要对自己提交的产物进行测试,一般是单元测试、集成测试。 之后提交物流转到 QA 团队,QA 团队根据需求描述对提交物进行测试, 这个测试过程非常耗费人力。 尤其是当开发交付的质量不高时候,很可能自身没有经过测试,会遇到主干流程都无法进行的状况。

    如果在 QA 人工介入测试之前,就进行一轮黑盒自动化集成测试,可以大大地提高 QA 团队的工作效率。 基于这样的判断,我们团队花了一些时间,将基于 API 的自动化测试系统搭建起来。 现在将这个系统的选型和运行状况拎出来,和大家分享。

    确认测试范围、目标和意义

    • 范围
      • 后台输出的 API 级别 URL
      • 使用场景
        • 打包时候的冒烟
        • Dev / QA 手工添加添加新特性用例
    • 目标
      • 覆盖大部分的 URL,当期设计为 top 10 URL,仅包含 GET 接口
      • 选型时,需要考虑非幂等(POST / DELETE / PUT)等接口
    • 意义
      • 提高开发效率,一种自动化的 IT 测试方案
      • 提高测试效率,减少人工集成测试成本
      • 提高工程质量,通过覆盖率提升,保证工程质量逐步提升,放心开发新功能

    特性需求

    选型一个系统,不是看市面上有哪些可以供选择,而是看我需要什么样特性的一款产品。 如果自己的需求和市面上的现成产品差异过大,也可以考虑自己定制。

    • Required
      • 开源
      • 免费
      • 使用 DSL 或者简单代码描述测试用例
      • 支持细粒度的单 API 测试和构建带过程的测试用例
      • HTTP API
    • Optional
      • CI 集成
      • UI

    挑选出来的选型和评价

    • API Monitoring and Testing · Runscope
      • 收费
      • 非开源
      • 有监控特性
    • Bamboo - Continuous integration, deployment & release management | Atlassian
      • 收费
      • CI
    • Continuous Integration Product and Features - CircleCI
      • CI
      • 收费
    • Sauce Labs
      • 客户端测试,收费
    • Apiary
      • API 设计工具 + API Test
    • http://frisbyjs.com/
      • code
      • npm
      • open source
      • NO UI
    • https://github.com/vowsjs/api-easy
      • 同上
      • 真是热爱造轮子的 JS 生态圈
    • https://github.com/visionmedia/supertest
      • 同上
      • 从 Star 看,这个质量最高
    • http://dareid.github.io/chakram/
      • code
      • npm
      • open source
      • NO UI
    • https://vrest.io/
      • 收费
      • 不开源
      • 无插件
    • http://swagger.io/open-source-integrations/
      • for API
      • 生态环境强大
      • https://github.com/cachecontrol/hippie-swagger
      • 用户端似乎在尝试用 swagger
    • http://robotframework.org/
      • 一个通用自动化测试工具
      • DSL
      • 扩展性较强
      • 活跃度在降低 https://github.com/robotframework/robotframework/graphs/contributors
    • https://cucumber.io/
      • https://cucumber.io/docs/reference
      • 和 Robotframework 相似,通用自动化测试工具
      • DSL
      • 活跃度降低 https://github.com/cucumber/cucumber-jvm/graphs/contributors
    • https://www.solanolabs.com/
      • Airbnb 在用
      • 收费
      • 云端的通用测试环境
    • https://github.com/christophd/citrus
      • http://www.citrusframework.org/
      • 依赖 mvn / ant,离代码太近
      • 项目不够活跃
    • 代码内测试
      • src/it/com/duitang/xxx
      • eg. tritornis
      • Spring
        • http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html
        • http://docs.spring.io/autorepo/docs/spring-framework/3.2.x/spring-framework-reference/html/testing.html

    这部分工作,是和团队的其他成员一起去看的,大家各自分头寻找一些产品,然后进行评测,给出结论。

    经过讨论,我们将重点关注放在这么几款下面:

    • supertest
    • robotframework
    • swagger
    • 讨论时候的新发现 https://github.com/svanoort/pyresttest

    搭建 demo,进行试用

    在确定选用那几款产品之后,就可以集中精力在几款候选者里面。搭建相应的环境,对他们进行实际测试。

    supertest:

    • 功能太简单了,简单到几乎可以自己写掉,不算一个 test framework

    pyresettest:

    • 哈哈哈,YAML based,dreamed feature
    • 支持 YAML / extractor / validator
    • 天生支持 host 为参数
    • create for me!!!

    hippie-swagger:

    • 在使用上,和 supertest 差异不大
    • 仍然需要自己定义,在 swagger 描述文件不存在时候会抛错,描述文件不符合时会抛错

    robotframework:

    • 较为复杂
    • 有 YAML 了,不用试了

    使用感觉

    经过一个季度的试用,我们基于 pyresttest 的项目 abao 运行较稳定。 尽量在工程师提交代码之后,运行一次,从而可以在早期发现问题。

    由于是基于 Python 的源代码,我们还给 pyresttest 开发了几款插件:

    • cookie_extractor:用来解析特定的 cookie
    • file_choice_generator:从文件随机选择预设数据
    • file_seq_generator:从文件顺序选择预设数据

    在和 CI 的配合方面,我们在 Jinkins 搭建了 abao / abao-master 项目, 前者响应每次 Push 请求,都会自动构建一遍,后者每天凌晨会将 master 运行一遍。

    感谢项目贡献者:

    project  : abao
     repo age : 5 months
     active   : 32 days
     commits  : 109
     authors  :
        39  Chery.Peng  35.8%
        33  3D          30.3%
        17  yanqi.chen  15.6%
        11  橙子        10.1%
         7  fiona66     6.4%
         2  雪糕        1.8%
    

    参考文档

    • Integrations Directory
    • http://www.infoq.com/cn/search.action?queryString=%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95&page=1&searchOrder=&sst=guKeEhPzzhUs7xpS
    • http://www.infoq.com/cn/news/2014/02/autotest-2013
    • http://www.infoq.com/cn/articles/cucumber-robotframework-comparison
    • http://www.infoq.com/cn/articles/http-api-automated-test-from-manual-to-platform
    • http://nerds.airbnb.com/testing-at-airbnb/
    • Google keywords
      • integration api test framework
      • github intergration test

    原文链接: https://blog.alswl.com/2016/08/api-integration-test/
    欢迎关注我的微信号:窥豹

    3a1ff193cee606bd1e2ea554a16353ee


沪ICP备19023445号-2号
友情链接