身份验证
简介
为了能够与 Grafana UI 交互,你需要登录到 Grafana。@grafana/plugin-e2e
提供了一种声明式的方式来处理身份验证和创建用户。在本指南中,你将看到如何在插件中使用和不使用基于角色的访问控制 (RBAC) 来实现这一点。
不使用 RBAC 的插件
如果你的插件不使用 RBAC,你可以使用默认的服务器管理员凭据登录。
在以下示例中,有一个名为 auth
的 setup project。该项目调用 @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
setup 项目中创建了一个具有 Viewer
角色的新用户。在下一个项目中,在运行测试时,将重用具有 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'],
},
]
})
管理用户
当在 setup 项目中定义 user
时(如上面的 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: [
...
]
})