Qin Jun 的技术博客

DevOps & QA 专家

本人为公司DevOps流水线设计和实现的一整套质量保障体系,整套系统由Jenkins流水线结合各种测试服务组成,覆盖单元测试,接口测试,压力测试,UI测试,功能自动化测试,静态扫描,安全扫描,代码规格扫描,依赖扫描,Mock服务等多种自动化手段以及相应的质量门,全部由开源软件或基于开源软件二次开发的平台和服务组成,目前已经在笔者的公司成功落地并运行。

Jenkins流水线+单元测试服务+代码质量扫描服务+代码安全扫描服务+代码依赖扫描服务+代码规格扫描服务+接口测试服务+压力测试服务+UI测试服务+功能测试服务+其他辅助类的测试时服务(如Mock服务,测试数据服务等)。

接口测试服务(平台)一期,可以单独使用,也可以接入DevOps流水线作为接口质量门。

接口测试服务(平台)一期实现如下功能(基于开源系统二次开发)。

  1. 接口定义和管理。
  2. 接口自动化测试。
  3. 项目管理。
  4. 用户和权限管理。
  5. 流水线接入支持。

一期的问题有以下几个

  1. 在实际使用中依赖研发维护的接口定义,研发侧经常达不到这个要求,需要将接口定义和接口测试解耦(当然解耦从某些方面来说也是坏事)。
  2. 底层YAPI跑接口测试时有较多Bug,如测试无法结束,结果不显示,YAPI团队自己写的测试驱动代码实际使用中并不是特别健壮和稳定。
  3. 它是一个纯接口测试平台,只具备调用接口的能力,但是实际应用中,接口测试经常依赖其它操作才能顺利进行,如数据库操作,缓存操作,使用不是特别方便。
    所以我们又规划了接口测试平台(服务)二期

性能测试服务(平台)一期,可以单独使用,也可以接入DevOps流水线作为性能质量门。

性能测试服务(平台)一期实现如下功能(基于开源系统二次开发)。

  1. Artillery兼容的压测(https://github.com/artilleryio/artillery)。
  2. 性能测试。
  3. 项目管理。
  4. 用户和权限管理。

一期的问题有以下几个

  1. 底层依赖的压测工具Artillery与Jmeter等工具相比功能还是比较简陋。
  2. 压测用例和脚本管理相对简单,无法有效的组织用例和脚本。
  3. 用户和权限管理相对简单。
    所以我们又规划了性能测试平台(服务)二期。

Bug规范,公司Bug管理用的是Jira,所以本人基于Jira平台构建了Bug规范Workflow,也是Bug规范的一个具体实现

测试度量
质量度量
交付质量度量
过程质量度量
测试度量
效率度量

**Json结构是一个非常常见的数据交互格式,尤其是在使用HTTP协议交互的场景,一个常见的测试需求是校验整个JSON的格式是否符合要求,一般的解决办法是使用JSON Schema(类似于XML Schema),Jmeter作为压测工具在请求和响应中经常会见到Json格式的数据,但是Jmeter缺乏JSON schema校验的插件,所以本人实现了一个JSON schema校验插件 **
https://github.com/zeroneqin/tsplugin_jmeter

测试框架封装底层的测试逻辑,提供自动化测试的各种功能,使测试人员可以更快,更方便的构建自动化测试用例,本人基于工作中不同的测试需求,实现了一系列测试框架,较好的满足了业务的自动化测试需求。测试框架封装底层的测试逻辑,提供自动化测试的各种功能,使测试人员可以更快,更方便的构建自动化测试用例,本人基于不同的测试需求,实现了一系列测试框架,在实际工作场景中帮助团队提高自动化测试能力

  1. PSV测试框架。
    将测试用例中的逻辑再抽象,抽象为构建测试数据,执行测试,进行验证,分别对应P(POJO),S(Servide),V(Verification),将自动化用例书写标准化,提高编写效率。
    https://github.com/zeroneqin/tstest_psv
    https://github.com/zeroneqin/tstest_psv_python
  2. Template测试框架。
    类似于设计模式中的模板方法,将测试步骤在基础类中进行抽象,由具体测试用例进行实现。
    https://github.com/zeroneqin/tstest_template
  3. DataDriving测试框架。
    数据驱动模式,适用于有大量数据,并且只是数据不同,测试逻辑相同的自动化测试。
    https://github.com/zeroneqin/tstest_datadriving
    https://github.com/zeroneqin/tstest_datadriving_python
  4. POP测试框架
    对UI Page进行封装来进行UI自动化测试。
    https://github.com/zeroneqin/tstest_pop_selenium

功能自动化测试,针对软件功能做的自动化测试,一般也基于自动化框架来做,可能混合使用UI,接口,数据库,。

与单元测试的区别

  1. 测试覆盖点不同,单元测试关注代码方法和分支的覆盖率,功能自动化关注功能点的覆盖,单元测试覆盖率比较好量化,功能自动化覆盖率不太好量化。
  2. 单元测试更贴近代码和技术,功能自动化更贴近业务和功能。
  3. 使用的框架不同,单元测试一般使用单元测试框架如Java的Junit框架,功能自动化使用通用的自动化框架如Java的testng。

压力测试。
压测场景

  1. 性能是否满足设计指标或者达到常规水平
  2. 性能极限/性能瓶颈/性能摸底
  3. 稳定性
  4. 压力条件下系统问题和Bug
  5. 系统是否具有可扩展性
  6. 限流降级是否生效
  7. 单接口/全流程
    …….

单元测试规范
【原则】FIRST
F - Fast
I - Independent
R - Repeatable
S - Self Validating
T - Timely
【原则】AIR
A - Automatic
I - Independent
R - R-Repeatable

0%