Appearance
第48讲:测试平台开发技术栈讲解
本课时我们开始进入平台开发技术栈的学习。
为什么需要开发测试平台
我们先看下为什么需要测试开发平台,通常我们在公司里会使用大量的开源测试工具和云平台,常见的开源工具如 Appium、Selenium、Requests,常见的测试平台如 Jenkins、SonarQube 等。当这些平台无法满足公司需求的时候,我们就需要进行定制或重新开发,通常情况下我不建议你直接盲目地重复造轮子,如果已有的开源测试平台可以满足需求,就使用已有的开源项目,然后围绕开源项目进行功能的增强和改造。只有当行业里现有平台无法满足需求时,我们才考虑重新开发一个平台。
第二点是我们还需要整合公司内部的多套平台,做内容和流程的整合。同时公司可能也会有一些特殊的定制需求,这时我们就可以去开发一个测试平台了。
在开发平台之前,大家一定要切记,不要轻易地去重复造轮子,因为这是一个非常大的坑,填坑需要非常多的人力成本,所以一定要谨慎地去评估第一条,一定要确认没有已有的开源平台可以支撑,我们才需要重新去做一个新的。
常见的测试平台开发模式
既然需求和场景都有了,接下来我们看下常见的测试平台如何开发,首先在整个行业里开发方式分为两类:
大一统模式,这方面有经典的技术,比如 Django、Rails、各种框架,这类框架入门比较容易,上手比较简单,它是大一统的,前端、后端都可以整合到这各平台进行开发,所以更新、维护也会非常的方便。它通常会使用模板技术去渲染前端界面,比如 Django 在 Python 里面就是一个非常好的工具,可以帮我们快速地构建出一个小测试平台,特别适合一些简单的项目场景。
前后端分离模式,这种模式第一适合多人协作,第二适合多个技术栈进行整合的场景。在这种情况下,前端与后端的逻辑会有严格的分工,后端的会通过接口,比如 JSON 接口,对外提供服务能力;而前端整合多个平台,把各个平台所提供的接口全部整合进来,并且使用 SPA 框架来完成关键流程的定义。后端框架既可以是小型的 API 框架,比如 Flask,也可以是大型的 Web 开发框架,比如 Django。
具体使用哪一种技术看公司的需要,如果是单人维护,你可以使用 Django;如果是多人维护,尤其是既涉及前端、后端,又涉及分工,建议你使用前后端分离的模式进行开发,这个时候你就可以借助 SPA 框架设计出更灵活的场景。当然这两种模式技术上不是完全独立的,也可以使用 大一统模式的 Django 作为后端框架。
常用技术架构与组件
接下来,我们来看一下常用的技术架构与对应的组件。
比如前端技术架构,我们可以使用什么框架来完成用户的交互呢?比如我们可以使用 Bootstrap 框架,阿里的 Antd,以及前端的框架 Vue、React。
除此之外还包括后端的框架,比如 Django、Flask、Spring Boot。
然后是数据的存储,当我们有了一个框架,有用户行为,就会自然沉淀下数据,比如我们的测试用例、测试的结果,就需要用数据库进行存储,通常我会用 MySQL、ES、Neo4j 等。
通常我们会有一些任务执行过程,比如需要定期执行、异步执行,这些执行模式不是实时的,那我们就需要任务调度的架构,这方面也有很多工具,我推荐使用开源的测试平台 Jenkins,Jenkins 可以帮我们管理大部分的任务调度,Jenkins 的功能其实非常强大。
还有就是数据报表,比如 Echarts、Vega、Kibana、Grafana,我们可以利用这些成熟的数据渲染报表框架,帮我们去设计数据分析功能。
前端技术架构解析
接下来,看一下每个技术栈具体的技术。
前台设计
首先是前台设计,我们可以使用 Bootstrap、Semantic-ui、Antd 帮我们设计出非常优美的框架,通常我们不会设计得过于酷炫,而是追求简约和简洁,这样可以让使用者更关注内在的业务。可以参考 gitlab、github、sonarqube 等平台的设计。
前端 JS 和 UI 框架的内容结合到一起,也有一些非常成熟的框架,比如 Vutify、Element UI。
测试平台案例
这是我们公司自己开发的一个平台的案例。你可以看到这个平台有顶栏、边栏,边栏里面有菜单,右侧有具体的数据列表,加上一些快捷菜单,还包括各种导航功能。
后端技术架构解析
然后我们再来看一下后端技术架构。
后端开发框架
后端技术架构通常会使用两种风格的技术栈,第一种叫迷你型的 API 框架,常见的比如 Python 的 Flask 和 Java 的 Sparkjava。还有一类是大而全的框架,比如 Python 的 Django 和 Java 的 Spring Boot 全家桶。
Python Flask 框架
我们来看一下 Python 的 Flask 框架,非常简单,只需通过这样的几行代码,你就可以创建出一个后端的 http 接口。通常有一些非常小的功能组件,我们会独立使用 Flask 来进行开发,完成这个功能,最后通过 SPA 前端页面调用这个接口就可以了。
Sparkjava 框架
Java 里面也有一个非常便捷的功能,比如 Sparkjava ,也是几行代码就可以帮你创建出一个接口,是非常便捷的。
除了这两个框架之外,如果你的功能非常多,那你就使用 Django、Spring Boot 这种大的 Web 开发平台。
任务调度管理设计
我们再来看任务调度,前面我推荐过 Jenkins,它的功能非常的强大,它支持异步的任务调度,可以说是任务调度里面最强大的框架,在这方面,我建议你直接与这个平台做一个整合,而不需要从零开发。
关系型数据库、搜索系统、图数据库的应用场景
除此之外,我们还会用到数据存储,通常我们会遇到这样几个场景。
关系型数据库,比如用户、项目、用例之间的关系,这种数据我们就需要通过关系型数据库。
需要进行批量的检索的数据,比如我们的源代码、大量的数据,我们会存到搜索系统里面来进行检索。
图数据库的应用场景。通常它是网状数据的关系管理,比如代码的函数调用关系,我们就放到图数据库。
数据库
数据库方面,分为这几个类型给大家推荐几个技术栈。
关系型数据库,就是 MySQL、PostgreSql,通常 MySQL 是使用最多的。
非关系数据库,比如 Redis、RethinkDB、MongDB,通常我们把用于加速以及非常大的非关系数据存储在这里。
搜索引擎,我们使用 ElasticSearch 就可以解决。
图数据库,所有函数调用关系我们可以使用 Neo4J。
数据分析与数据展现技术
除了这些技术之外,我们有了数据存储了,自然需要对数据做分析和展现。
我们可以使用可视化的框架,比如,百度的 EChart、D3.js、Vega、yWorks 等各种各样的 H5 的图形渲染控件来帮我们做分析。除了每一个 UI 的绘图组件之外,还有一些通用的数据分析平台,比如 Kibana、Grafana,也可以把这些平台直接整合进来。
比如 Grafana,支持调用各种各样的数据来帮你定制报表。
这个是 Kibana,可以检索 ElasticSearch 图形的各种区别,也可以给你渲染出一些非常酷炫的数据报表。
还有允许定制的测试的进展分析、漏测分析,我们都可以基于已有的数据,汇集出这样的数据报表。
函数调用关系,我们可以使用 Neo4J 把网状数据检索出来,还包括页面跳转关系,我们都可以用 Neo4J 进行存储。
Sonarqube 测试平台示例
我们来看一下行业里面已有的开源平台怎么使用。
比如行业里面使用的一个非常知名的平台 Sonarqube,它是一个代码审计平台。这个平台前台有一个基本的用户交互界面。后台使用的是关系数据库 MySQL,后来的版本使用了PostgreSQL(简称 PG)。它的大数据检索使用 ElasticSearch,把大量数据放在里面来进行检索,这是一个比较典型的架构。
关于测试平台开发所需要的技术栈我就讲解到这里,你可以研究一下技术栈,看一下哪些技术适合你的公司,然后进行研发。