测试引擎可扩展性(预览版)

备注

预览功能不适合生产使用且功能可能受限。 这些功能在正式发布之前已经可用,以便客户可以抢先体验并提供反馈。

概览

Power Apps 测试引擎具有强大的可扩展性框架,允许通过各种扩展点扩展核心测试功能。 本文解释:

  • Microsoft 如何对第一方扩展进行签名和验证
  • 扩展性模型如何使用托管扩展性框架(MEF)工作
  • 组织创建自己的扩展的选项

Microsoft 签名的组件

重要提示

在公共预览版阶段, pac test run 命令仅加载 Microsoft 签名的扩展。 这种设计确保了测试引擎平台的安全性、稳定性和性能。

Microsoft 生成、签名和验证第一方组件,以确保它们符合质量和安全标准。 这些组件包括:

  • 核心身份验证提供程序
  • 画布应用和模型驱动应用提供程序
  • 标准 Power Fx 功能和作

扩展性框架(MEF)

测试引擎使用 托管扩展性框架(MEF) 来启用可插拔架构。 该框架允许三种主要类型的扩展:

身份验证扩展

身份验证扩展支持通过以下方式进行身份验证 Power Platform:

  • 存储状态身份验证 - 默认的基于浏览器的身份验证方法
  • 基于证书的身份验证 - 用于非交互式测试执行
  • 自定义身份验证提供程序 - 适用于专用身份验证方案

有关详细信息,请参阅 测试引擎中的身份验证。

提供程序扩展

提供程序扩展支持测试不同类型的应用程序:

  • 画布应用程序提供商 - 用于测试 Power Apps 画布应用程序
  • 模型驱动应用提供程序 - 用于测试 Dataverse 模型驱动应用
  • Power Fx Provider - 用于独立执行 Power Fx 语句
  • 门户提供商 - 用于自动化作 Power Apps

有关详细信息,请参阅 画布应用程序模型驱动应用程序Dataverse 扩展

Power Fx 扩展

Power Fx 扩展通过自定义函数添加新的测试功能:

  • 用户定义函数 - 在测试计划中定义的低代码函数
  • C# ReflectionFunction 实现 - 在 C# 模块中实现的自定义函数

有关详细信息,请参阅 Power Fx 函数C# ReflectionFunction 实现

扩展开发选项

组织有多种扩展测试引擎的选项:

使用开源版本

测试引擎 Power Apps 在 MIT 许可下作为开源项目提供。 第一方 Microsoft、第三方团队和组织可以:

  • 为专用测试方案创建新的提供程序
  • 开发自定义身份验证机制
  • 构建新的 C# ReflectionFunction 实现
  • 创建扩展核心功能的模块
  • 提交贡献以供核心产品考虑

Power Fx 用户定义函数

对于更简单的方案,可以直接在测试计划中创建用户定义的函数:

testSuite:
  testCases:
    - testCaseName: "Test with custom functions"
      userDefineFunctions:
        - name: "FormatDateString"
          parameters: [date]
          expression: "Text(date, 'yyyy-MM-dd')"
      steps:
        # Use the custom function in your test steps
        - action: PowerFxTestStep
          expression: FormatDateString(Now())

使用 ReflectionFunction 的自定义 C# Power Fx 函数

对于更复杂的方案,组织可以通过实现类 ReflectionFunction 并通过模块注册它们来开发自定义 C# 函数:

// Define your function class
public class SampleFunction : ReflectionFunction
{
    public SampleFunction() : base(DPath.Root.Append(new DName("Preview")), "Sample", FormulaType.Blank)
    {
    }

    public BlankValue Execute()
    {
        Console.WriteLine("Sample function executed");
        return BlankValue.NewBlank();
    }
}

// Register your function in a module
[Export(typeof(ITestEngineModule))]
public class TestEngineSampleModule : ITestEngineModule
{
    public void RegisterPowerFxFunction(PowerFxConfig config, ITestInfraFunctions testInfraFunctions, 
        ITestWebProvider testWebProvider, ISingleTestInstanceState singleTestInstanceState, 
        ITestState testState, IFileSystem fileSystem)
    {
        config.AddFunction(new SampleFunction());
    }
    
    // Implement other required interface methods...
}

与测试引擎团队合作

使用开源测试引擎开发有价值扩展的组织可以考虑为其扩展创建拉取请求,以使其在官方产品中可用。 该过程通常涉及:

  1. 开发 - 使用开源测试引擎创建扩展
  2. 验证 - 在您自己的环境中彻底测试您的扩展
  3. 协作 - 与核心测试引擎团队合作评估扩展
  4. 集成 - 如果获得批准,Microsoft 将对扩展进行签名并将其集成到产品中

这种协作模式支持创新,同时保持官方测试引擎产品的安全性和可靠性。

技术集成点

以下部分介绍测试引擎可扩展性如何与核心技术(如 Playwright 和功能生命周期)集成。 了解这些集成点有助于您有效地开发和部署自定义扩展。

剧作家集成

Power Apps 测试引擎建立在 Playwright 上,它为浏览器自动化提供了基础。 自定义扩展可以与 Playwright 的 IBrowserContext 交互,以创建复杂的基于浏览器的测试功能。

功能生命周期

新扩展遵循 功能生命周期

  1. 预览命名空间 - 新扩展首先在预览命名空间中可用,以进行早期测试
  2. TestEngine 命名空间 - 验证后,扩展移动到核心 TestEngine 命名空间

可扩展性模型的优势

可扩展性模型提供了显着的好处:

  • 标准化 - Microsoft 签名的组件确保一致的质量和安全性
  • 创新 - 开源模型允许社区驱动的创新
  • 灵活性 - 组织可以针对独特需求创建专门的扩展
  • 集成 - 有价值的扩展被考虑包含在官方产品中