跳转到主要内容

身份验证

简介

要能够与 Grafana UI 交互,您需要登录到 Grafana。 @grafana/plugin-e2e 提供了一种声明式的方式来处理身份验证和创建用户。在本指南中,您将看到如何使用和未使用基于角色的访问控制 (RBAC) 在插件中执行此操作的示例。

不使用 RBAC 的插件

如果您的插件不使用 RBAC,您可以使用默认的服务器管理员凭据进行登录。

在以下示例中,有一个名为 auth设置项目。该项目调用 @grafana/plugin-e2e 包中的函数,使用 admin:admin 登录到 Grafana。认证状态以以下文件名模式存储在磁盘上: <plugin-root>/playwright/.auth/<username>.json

第二个项目,run-tests,在 ./tests 目录中运行所有测试。该项目重用了来自 auth 项目的认证状态。因此,登录只发生一次,run-tests 项目中的所有测试都以已认证的状态开始。

playwright.config.ts
import { dirname } from 'path';
import { defineConfig, devices } from '@playwright/test';

const pluginE2eAuth = `${dirname(require.resolve('@grafana/plugin-e2e'))}/auth`;

export default defineConfig({
...
projects: [
{
name: 'auth',
testDir: pluginE2eAuth,
testMatch: [/.*\.js/],
},
{
name: 'run-tests',
use: {
...devices['Desktop Chrome'],
// @grafana/plugin-e2e writes the auth state to this file,
// the path should not be modified
storageState: 'playwright/.auth/admin.json',
},
dependencies: ['auth'],
}
],
});

使用 RBAC 的插件

如果您的插件使用 RBAC,您可能想编写测试来验证某些插件功能是否基于角色。

@grafana/plugin-e2e 工具允许您在 Playwright 配置文件中定义具有角色的用户。在以下示例中,在 createViewerUserAndAuthenticate 设置项目中创建了一个具有 Viewer 角色的新用户。在下一个项目中,在运行测试时重用了具有查看器角色的用户的认证状态。请注意,针对 Viewer 角色的特定测试已被添加到专门的 testDir 中。

playwright.config.ts
import { dirname } from 'path';
import { defineConfig, devices } from '@playwright/test';

const pluginE2eAuth = `${dirname(require.resolve('@grafana/plugin-e2e'))}/auth`;

export default defineConfig<PluginOptions>({
...
projects: [
{
name: 'createViewerUserAndAuthenticate',
testDir: pluginE2eAuth,
testMatch: [/.*auth\.setup\.ts/],
use: {
user: {
user: 'viewer',
password: 'password',
role: 'Viewer',
},
},
},
{
name: 'run-tests-for-viewer',
testDir: './tests/viewer',
use: {
...devices['Desktop Chrome'],
// @grafana/plugin-e2e writes the auth state to this file,
// the path should not be modified
storageState: 'playwright/.auth/viewer.json',
},
dependencies: ['createViewerUserAndAuthenticate'],
},
]
})

管理用户

当在设置项目中定义一个用户(如上例中的 RBAC 示例)时,plugin-e2e 将使用 Grafana HTTP API 创建用户账户。此操作需要更高的权限,因此默认情况下将使用服务器管理员凭据 admin:admin。如果端到端测试针对的是使用 create-plugin 搭建的 开发环境,这将正常工作。但是,对于其他测试环境,服务器管理员的密码可能不同。在这种情况下,我们将搜索 GRAFANA_ADMIN_USER 和 GRAFANA_ADMIN_PASSWORD 环境变量。此外,您可以通过在全局选项中设置 grafanaAPICredentials 来提供正确的凭据。

playwright.config.ts
import { dirname } from 'path';
import { defineConfig, devices } from '@playwright/test';

const pluginE2eAuth = `${dirname(require.resolve('@grafana/plugin-e2e'))}/auth`;

export default defineConfig<PluginOptions>({
testDir: './tests',
use: {
baseURL: process.env.GRAFANA_URL || 'https://127.0.0.1:3000',
grafanaAPICredentials: {
user: process.env.GRAFANA_ADMIN_USER || 'admin',
password: process.env.GRAFANA_ADMIN_PASSWORD || 'admin',
},
},
projects: [
...
]
})