一个软件系统的配置具有多个层面,可以是系统级别的配置,也可以是功能级别的配置。很多开发人员有这样的经历——当一个功能某个变量需要通过配置来提供时,就会将这个变量放在配置文件中,并存放到一个特定目录下。如果没有一个统一的流程去规划这个过程,那么每个测试工程师都会按照自己喜欢的模式去定义配置文件格式,比如 XML、Properties、JSON等,并且都存放在自己认为合适的地方,导致配置文件混乱,不方便使用且难以管理。所以配置模块的目的就是让其他模块通过配置模块来统一管理配置项
因此,我们需要实现如下功能:
一、配置的保存和读取
配置文件的保存和读取是配置模块的基本功能之一,所有配置都被保存在文件或数据库中,以供读取,所以该模块需要实现配置数据的序列化和反序列化功能。同时,不同消费者的定义字段和数据完全不同,所以该模块也要有对不同配置进行序列化和反序列化的额能力。
二、配置自动生成和默认值
对软件的使用者来说,在不了解软件系统的情况下创建配置文件时不太可能的,所以,如果一个系统或模块再使用前没有任何配置,那么在运行的过程中也需要对默认值进行初始化,并生成相应的初始化配置文件。
三、动态配置能力
并不是所有的配置都需要放在一个地方集中管理,有时需要在测试执行的过程中生成配置文件,比如针对单个测试用例的配置。这时,测试配置模块需要给其他模块提供接口,以生成、存储和读取相应的配置项。
四、带逻辑功能的配置
有些选项配置在完成之后,需要执行一些特定的逻辑,这些逻辑的功能本身可能比较简单,不足以单独封装成一个模块。这是就需要有一个功能让开发者实现这一逻辑,我们称之为带逻辑功能的配置。比如,实现一个配置的过程,一旦测试用例执行错误数超过5个,就发送通知邮件。如果单独做这个功能,可以在测试执行层面上简单地实现。如果作为一个扩展的配置,就需要通过带逻辑功能的配置来实现,而非通过将代码插入测试执行的模块来实现。