跳至主要内容

Grafana 功能切换

简介

Grafana 使用一种称为 功能切换 的机制,以在运行时启用或禁用代码。插件可以选择对功能切换的状态做出反应,以根据需要更改其行为;如果它们这样做,您可以在端到端测试中涵盖这一点。本指南描述了 @grafana/plugin-e2e 的功能,这些功能使处理功能切换变得更容易。

将功能切换配置传递给 Grafana

配置在整个 Grafana 堆栈中可用的功能切换的最简单方法是在启动 Grafana 实例时指定操作环境变量。有关如何操作的说明,请参阅 我们的文档

在端到端测试中覆盖前端功能切换

@grafana/plugin-e2e 工具允许您覆盖 Grafana 配置为使用的前端功能切换。您可以通过在 Playwright 配置文件中指定自定义选项 featureToggles 来做到这一点。

// playwright.config.ts
import { defineConfig, devices } from '@playwright/test';
import { PluginOptions } from '@grafana/plugin-e2e';

export default defineConfig<PluginOptions>({
testDir: './tests',
reporter: 'html',
use: {
baseURL: 'https://127.0.0.1:3000',
featureToggles: {
experimentalPluginQueryEditor: false,
experimentalPluginConfigEditor: true,
},
},
...
}
注意

以这种方式定义的功能切换会传播到 window.grafanaBootData.settings.featureToggles。这意味着它们只会对 Grafana 的前端产生影响。如果您需要功能切换对整个堆栈产生影响,请参阅 上一节

在特定测试文件中覆盖功能切换

要覆盖特定测试文件中测试的功能切换,请使用如下代码。

import { test, expect } from '@grafana/plugin-e2e';

test.use({
featureToggles: {
experimentalPluginQueryEditor: true,
},
});

检查您的测试中是否启用了某个功能

使用 isFeatureToggleEnabled 固定装置来确定某个功能切换是否已启用。在幕后,isFeatureToggleEnabled 检查给定功能是否在 window.grafanaBootData.settings.featureToggles 对象中定义并启用。

import { test, expect } from '@grafana/plugin-e2e';
import * as semver from 'semver';

test('valid credentials should return a 200 status code', async ({
createDataSourceConfigPage,
page,
isFeatureToggleEnabled,
}) => {
const configPage = await createDataSourceConfigPage({ type: 'grafana-snowflake-datasource' });
await configPage.getByGrafanaSelector('Data source connection URL').fill('https://127.0.0.1:9090');
const isSecureSocksDSProxyEnabled = await isFeatureToggleEnabled('secureSocksDSProxyEnabled');
if (isSecureSocksDSProxyEnabled) {
page.getByLabel('Enabled').check();
}
await expect(configPage.saveAndTest()).toBeOK();
});