审校 | 孙淑娟
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站建设、无为网络推广、微信小程序开发、无为网络营销、无为企业策划、无为品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供无为建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
如果说质量保证(QA)是确定产品或服务是否满足特定要求的系统过程,那么质量保证系统则是研发过程中不可或缺的一部分,它起到了确保产品质量的作用。
在本文中,我将向您介绍在开发Milvus矢量数据库(Vector Database)时所采用的QA框架,并涵盖Milvus中的主要测试模块、以及可用于提高QA测试效率的方法和工具。
鉴于系统架构对于QA测试的重要性,QA工程师只有对系统越熟悉,才越有可能制定出合理、有效的测试计划。
Milvus架构
Milvus 2.0采用的是云原生、分布式的分层架构。其中,SDK是数据在Milvus中流动的主要入口。通过对被频繁使用的SDK开展功能性测试,我们将能够检测出Milvus系统内部的问题。除了功能测试之外,我们还应该对矢量数据库进行单元测试、部署测试、可靠性测试、稳定性测试、以及性能测试。
云原生和分布式架构为QA测试带来了便利和挑战。与本地部署运行的系统不同,在Kubernetes集群上部署和运行的Milvus实例,可以确保在与软件开发相同的环境下,进行软件测试。然而,其缺点在于分布式架构的复杂性,会带来更多的不确定性,这会导致系统QA测试的繁琐。例如,Milvus 2.0使用不同组件的微服务,会导致服务和节点数量的增加,系统出错几率的增大。因此,我们需要更加全面的QA计划,来提高测试的效率。
Milvus的QA需要对软件开发过程中出现的问题予以测试和管理。
如下图所示,我们应当根据Milvus的特性和用户需求,按照优先级的顺序,开展不同类型的QA测试。
QA测试和优先级
在Milvus中,QA测试主要针对如下几个方面进行:
软件在开发过程中可能会出现许多问题。这些问题可能源于QA工程师本人,也可能来自开源社区的Milvus用户。不过,QA团队应负责找出这些问题。
Milvus中问题管理的工作流程
在创建问题时,他们首先需要进行分类。在分流的过程中,被检查出的新问题应确保带有足够多的问题详细信息,以便开发人员的确认、接受、以及尝试修复。而在修复完成之后,问题属主则需要验证其修复,判断是否可以最终关闭该问题。
一种常见的误解是:QA和开发是相互独立的。而事实是为了确保系统的质量,开发人员和QA工程师都需要通力协作,将QA贯穿整个生命周期。
将QA引入整个软件研发的生命周期如上图所示,一个完整的软件研发生命周期包括三个阶段:
下面,让我们来详细说明Milvus中的六个测试模块:
单元测试
单元测试可以协助尽早地识别软件错误,并为代码的重组提供验证标准。根据Milvus的拉式请求(pull request,PR)验收标准,代码单元测试的覆盖率应达到80%。
在Milvus中,功能测试的主要目的是为了验证接口是否可以按照设计进行运行。通过围绕着PyMilvus和SDK开展,功能测试会涉及到如下两个方面:
下图描绘了目前基于主流pytest的功能测试框架。该框架为PyMilvus添加了一个包装器(wrapper),并通过自动化测试接口进行测试。
Milvus中的功能测试框架
考虑到测试方式在共享时,部分功能需要复用,因此我们可以采用上述测试框架,而无需直接使用PyMilvus接口。此外,该框架还包含了一个“校验(check)”模块,为期望值和实际值的校验带来便利。
其tests/python_client/testcases目录中包含了多达2700个功能测试用例,并完全覆盖了几乎所有的PyMilvus接口。而且功能测试能够严格地监督每一个PR的质量。
由于Milvus有standalone和cluster两种模式,因此我们可以使用Docker Compose或Helm两种重要的方法,对其进行部署。同时,在部署了Milvus之后,用户可以采取重启或升级测试两种类别。其中,重启测试是指测试数据持久性的过程,即重启后的数据是否仍然可用。升级测试则是指测试数据地兼容性,以防止在Milvus中插入不兼容的数据格式的过程。如下图所示,两种类型的部署测试可以共享相同的工作流程:
部署测试工作流程
在重启测试中,两个部署会使用相同的Docker镜像。但是,在升级测试中,首个部署会使用前一个版本的Docker镜像,而第二个部署使用的是更高版本的Docker镜像。测试的结果和数据会被保存在Volumes文件或持久卷声明中。
首个测试在运行时会创建多个集合,并且会对每个集合进行不同的操作。而在第二个测试运行时,它会重点验证已创建的集合是否仍可用于CRUD操作,以及是否可以进一步创建新的集合。
云原生分布式系统的可靠性测试,通常采用的是混沌工程(Chaos Engineering)方法,其目的是要将错误和系统故障扼杀在萌芽状态。换句话说,在混沌工程测试中,我们有目的地创建系统故障,以识别压力测试中的问题,并在系统故障真正开始造成危害之前予以修复。在Milvus的混沌测试中,我们可以选择Chaos Mesh作为创建混沌的工具,来创建如下故障类型:
Milvus 中的可靠性测试框架
上图展示了Milvus中可进行自动化混沌测试的可靠性测试框架。其流程为:
checkers = {
Op.create: CreateChecker(),
Op.insert: InsertFlushChecker(),
Op.flush: InsertFlushChecker(flush=True),
Op.index: IndexChecker(),
Op.search: SearchChecker(),
Op.query: QueryChecker()
}
下表描述了稳定性和性能测试的目的、测试场景和指标。
稳定性测试和性能测试会共享同一组工作流程:
稳定性测试和性能测试的工作流程
从模块测试部分可以看出,大部分测试的流程其实都差不多,主要是修改Milvus服务端和客户端的配置,传递API参数。当有多种配置时,不同配置的组合越是多样化,实验和测试可以覆盖的场景也就越广。因此,代码和程序的重用,对于提高测试效率显得非常关键。
SDK测试框架
为了加快测试进程,我们可以在原始测试框架中添加一个API_request包装器,并将其按照API网关进行设置。此类API网关将负责收集所有API请求,然后将它们传递给Milvus,以便集体接收响应,并传递回客户端。这样的设计能够使得捕获诸如参数和返回结果等日志信息,变得更加容易。此外,SDK测试框架中的checker组件也可以验证和检查Milvus的结果。所有的检查方法都可以在该checker组件中被定义。
使用SDK测试框架,我们也可以将一些关键性的初始化过程,封装到一个函数中,以削减大量繁琐的代码。还值得注意的是,每个单独的测试用例都与其独特的集合相关,从而确保了数据的相互隔离。例如,在执行测试用例时,pytest-xdist可以利用pytest的扩展,并行执行所有单独的测试用例,从而大幅提高效率。
GitHub Action
GitHub Action会因为其以下特点,被用于提高QA效率:
除了上述特点,采用GitHub Action的另一个原因在于部署测试和可靠性测试需要独立的隔离环境,而GitHub Action非常适合对小规模数据集进行日常检查。
工具为了使QA测试更加有效,我们可以使用多种工具。
基准测试工具概览
分享文章:一文搞懂开放源码软件(OSS)质量保证
分享链接:http://www.gawzjz.com/qtweb2/news41/15391.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联