zoukankan      html  css  js  c++  java
  • 自动化接口测试平台搭建之路

    背景

    工具选择

    架构设计及技术实现

      参数设计

      断言

      持续集成

      测试集编写

    总结

    背景

    1.目前公司发展比较迅速还处于不停堆业务阶段所以迭代比较频繁导致人工回归的成本越来越大

    2.在有限的测试资源情况下开发自测的需求占比不低后端频繁发布容易心里没底

    3.该平台主要使用用户是测试同学编写接口用例不能有太多的代码量

    4.自动化是为了提高测试的效率需要考虑投入产出比维护成本要低

     

    Ps好的自动化项目一定是需要关注ROI的这也是贯穿我们整个设计的核心思想

     

    工具选型

    javapython对比就接口自动化而言,两者从成熟度来说差不多;和公司语言保持一致,有利于后期的白盒测试组内成员会java的更多

    TestNgJunit对比TestNG包含了JUnit4的核心功能外,更加灵活、方便;

    Jenkins:轻量级、成熟的持续集成工具,插件多,基本上要用到的功能都能支持

     

    所以我们最终确定的方案是通过Java+TestNg+jenkins去实现

     

    架构设计及技术实现

    3.1参数设计

    首先接口参数非常多有些是只要环境一样值全部都是同一个有些参数是有时效性或者执行一次后就不能再被执行的而大部分是每个接口甚至同一个接口都是不同的值所以为了接口的低维护成本和编写成本我这里把所有的接口分成了三大类全局参数接口协议域名环境请求头参数等和非全局参数接口路径接口入参请求方式等)、动态参数

    3.1.1 全局参数

    这类参数我们基本都是放在配置文件里这样只要改一个地方就可以而不需要每个地方去改下重点说一下环境这个参数因为我们整个是通过jenkins去集成的所以在jenkins上会去传不同的环境入参其他所有的全局参数基本都依赖这个值以下是我的实现方式

    首先在在testNg.xml文件中接收jenkins中传过来的参数

    然后在BeforeTest中先去获取这个参数如下

    @Parameters({ "env" })

    @BeforeTest

    public void getEnv(String environment) {

    ...

    ...

    }

    3.1.2 非全局参数

    为了接口参数更方便的管理编写和维护所以我们采用数据分离的方式另外我们在我们的持续集成方案中需要支持多个环境所以我们在设计上需要区分环境每个应用部署完后我们只希望跑对应的接口用例而不是全部都跑一遍所以我们需要区分应用

     

    3.1.3 动态参数

    为了我们接口用例的可维护性所以我们需要尽可能缩短维护的时间那很多接口的参数是有时效性的比如token也有些参数是用过后就不能再继续用的比如库存那有两个方案一个是每次执行前都恢复下数据但这样可能太重了不仅要恢复数据库可能缓存这些也要考虑所以我们用了第二个方案就是动态参数化从而保证不用频繁的修改

    主要涉及两个方法一是从上个接口的响应值中提取指定的参数二是在后面的接口去用这个参数

     

    3.2断言

    断言是自动化测试的重要组成部分也就是实际值和预期值的比较我这边也简单给它分成了二大类静态断言动态断言

    动态断言期望值从数据库/redis/es查出来后再去和实际值比较适用范围经常变的重要字段如库存等

    静态断言把期望值设为固定值也是最常见的适用范围接口返回状态接口的json格式等

    这里说下我们这边实现静态断言的方式静态断言也有好几种一是直接通过响应值中是否包含你预期值中的字符串这种优点就是编写比较快但是会有偏差所以我们用的是在响应值中通过jsonpath把值提取出来后再去比较但是往往我们的一次断言中需要断言的肯定不止一个字段所以我们会把这些都塞到数组中最后直接拿预期值数组和实际值数组去比较以下是我们execl中的截图

     

    Ps因为我们需要考虑到维护成本所以我们在断言选择上需要做一些取舍

     

    3.3持续集成

    我们期望是在某个应用发布后能自动触发执行我们对应模块的测试集并且当有执行失败用例时能实现钉钉告警卡点并且发送报告以下是我们的设计流程图

     

    Ps之所以用jenkins就是jenkins已经集成了非常多的成熟插件而且可以通过get/post接口远程去通过参数化去执行jenkins中的任务包括发送邮件及钉钉告警这样在我们整个框架搭建上就节省了很多编写代码的成本而只需要去关注接口自动化本身的脚本编写上

     

    3.4测试集编写

    基于以上的背景所以要求代码量要尽可能的少这里主要用到TestNg中的@DataProvider@test通过@DataProviderexecl中读取对应的参数然后通过@test去执行对应的测试集以下是我们一个测试集所有的代码量

      

    总结

    好的自动化项目一定是为了解放更多的人力但如果投入和产出不成正比那注定是没有意义的整个项目也还有很多不足的地方或待优化的地方目前正在组内推广中期望在质量保障上能带来更多的收益

     

  • 相关阅读:
    iOS:分组的表格视图UITableView,可以折叠和展开
    iOS:带主标题、副标题、图像类型的表格视图UITableView
    iOS:多个单元格的删除(方法二):
    iOS:多个单元格的删除(方法一)
    iOS:UITableViewCell自定义单元格
    iOS:删除、插入、移动单元格
    iOS:UITableView表格视图控件
    iOS:UIImageView图像视图控件
    iOS:UIScrollView控件和UIPageControl控件的详解
    淘宝卖家工具推荐
  • 原文地址:https://www.cnblogs.com/liyunfeng111/p/14495817.html
Copyright © 2011-2022 走看看