跳至主要内容

身份验证

简介

为了能够与 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 配置文件中定义具有角色的用户。在以下示例中,一个具有 Viewer 角色的新用户在 createViewerUserAndAuthenticate 设置项目中创建。在下一个项目中,当运行测试时,会重用具有查看者角色的用户的认证状态。请注意,特定于 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'],
},
]
})

管理用户

当在设置项目中定义一个 user(如上面的 RBAC 示例中)时,plugin-e2e 会使用 Grafana HTTP API 创建用户帐户。此操作需要提升的权限,因此默认情况下会使用服务器管理员凭据 admin:admin。如果端到端测试的目标是使用 create-plugin 架构的 开发环境,这将正常工作。但是,对于其他测试环境,服务器管理员密码可能不同。在这种情况下,您可以通过在全局选项中设置 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: 'https://127.0.0.1:3000',
grafanaAPICredentials: {
user: 'admin',
password: process.env.PASSWORD,
},
},
projects: [
...
]
})