身份验证
简介
要能够与 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
项目中的所有测试都以已认证的状态开始。
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
中。
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
来提供正确的凭据。
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: [
...
]
})