PnxContext

PnxTest测试框架通过PnxContext来对测试运行过程中的环境变量、数据、参数等进行统一的上下文管理

参数的设定与读取

设定参数:PnxContext.setProperty

读取参数:PnxContext.getProperty, PnxContext.getString, PnxContext.getBoolean...

示范:

PnxContext.setProperty("checkedProperty", 1024);
PnxAssert.assertThat(PnxContext.getInt("checkedProperty")).isEqualTo(1024);

PnxContext.setProperty("checkedProperty", 0);
PnxAssert.assertThat(PnxContext.getBoolean("checkedProperty")).isFalse();

PnxContext.setProperty("checkedProperty", "false");
PnxAssert.assertThat(PnxContext.getBoolean("checkedProperty")).isFalse();

PnxContext.setProperty("checkedProperty", "pnxTest");
PnxAssert.assertThat(PnxContext.getString("checkedProperty")).isEqualTo("pnxTest");

测试环境

PnxTest中测试环境的配置是通过properties文件进行管理的。测试环境的配置文件必须放置在“测试配置”文件夹下(默认为项目根目录下test-config),文件名称需符合规定的格式:<环境ID>.env.properties

例如有下面的环境: dev -- 开发环境 qa -- 测试环境 uat -- 预发布环境 prod -- 生产环境

那么在test-config文件夹下创建文件:

test-config/
    -- dev.env.properties
    -- qa.env.properties
    -- uat.env.properties
    -- prod.env.properties

如果设定的当前环境为qa, 那么框架就会自动装载qa.env.properties中的内容。例如qa.env.properties文件内容为:

pnxtest.http.baseUrl = https://qa.pnxtest.com/api

在测试程序中通过 PnxContext.getString("pnxtest.http.baseUrl")获取该值

设置当前环境ID

可以通过以下途径指定当前的测试环境:

  1. IDE模式:
  2. @PnxTestApplication
  3. resources/application.properties设置默认值:pnx.environment.id = yourEnvId
  4. 在测试应用程序开始跑之前通过API指定:PnxContext.setTestEnvironmentId("prod") *不推荐这种方式,写死后无法通过其他动态设置
  5. CLI命令行模式:通过-env 参数动态指定

变量参数

PnxContext支持变量参数的解析,方便参数之间的相互引用。例如:

appName = pnx
appSubName = ${appName}test  

#如果通过API:PnxContext.getString("appSubName")获取到的值为“pnxtest”

敏感数据保护

对于一些敏感数据,如数据库连接密码,我们可能不希望直接暴露在环境文件中,可以把加密后文本放在环境设置中,PnxContext会自动解密。这样对敏感数据可以从展示层面做保护。

示范:

database.connection.password = secret.sfasd3G8f#A

#说明:
# “sfasd3G8f#A”为加密后的文本
# 加密&解密方法可以通过ICryptoConfig自行配置

常用API

#设置当前的运行环境
#参数为envID
PnxContext.setTestEnvironmentId(String envID);

#获取当前的环境ID
#返回当前环境的ID
PnxContext.getTestEnvironmentId()

#设定参数
PnxContext.setProperty(String key, Object value);

#获取参数
PnxContext.getProperty(String key);
PnxContext.getString(String key, String defaultValue);
PnxContext.getInt(String key, int defaultValue);
PnxContext.getBoolean(String key, boolean defaultValue);
PnxContext.getBean(String key, Class<?> T);
...