EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:实现自定义EasyTest命令

EasyTest功能测试框架提供了一组涵盖大多数常见用例的预定义命令。要支持特定方案,您可以实施自定义命令。本主题描述了自定义FillDateTimeValue命令的实现,该命令能够指定相对于当前日期的DateTime值。当应用程序的行为取决于当前日期时,可以在测试中使用此命令。

注意

移动应用程序不支持EasyTest功能测试。

提示

DevExpress代码示例数据库(http://www.devexpress.com/example=E3018)中提供了完整的示例项目。

继承命令类

要实现自定义EasyTest命令,请从DevExpress.EasyTest.Framework命名空间继承Command抽象类。建议您在XAF解决方案的单独的类库项目中实现该类,以便将其内置到单独的程序集中,该程序集可在其他XAF应用程序中重复使用。重写Command.InternalExecute虚拟方法并在其中实现命令逻辑。使用基类的Command.Parameters属性访问命令的参数。实例化CommandException类以处理错误。适配器公开的ICommandAdapter.CreateTestControl方法参数通过标题查找控件,并将其包装在ITestControl接口周围。若要与控件进行通信,请使用ITestControl.GetInterface <T>方法。以下代码段说明了FillDateTimeValueCommand命令的实现。

using System.Globalization;
using DevExpress.EasyTest.Framework;
// ...
public class FillDateTimeValueCommand : Command {
    private int GetIntegerParameterValue(string parameterName) {
        int result = 0;
        Parameter parameter = Parameters[parameterName];
        if (parameter != null)
        {
            if(!Int32.TryParse(parameter.Value, out result)) {
                throw new CommandException(string.Format(
                    "'{0}' value is incorrect", parameterName), this.StartPosition);
            }
        }
        return result;
    }
    protected override void InternalExecute(ICommandAdapter adapter) {
        int deltaDays = GetIntegerParameterValue("Days");
        int deltaHours = GetIntegerParameterValue("Hours");
        int deltaMinutes = GetIntegerParameterValue("Minutes");
        string cultureName = Parameters["Culture"] != null ? Parameters["Culture"].Value : null;
        CultureInfo currentCulture =
            cultureName != null ? CultureInfo.GetCultureInfo(cultureName) : null;
        string fieldName = Parameters.MainParameter.Value;

        ITestControl testControl = adapter.CreateTestControl(TestControlType.Field, fieldName);
        DateTime dateTime = DateTime.Now.Add(new TimeSpan(deltaDays, deltaHours, deltaMinutes, 0));
        string dateTimeValue = currentCulture != null ? 
            dateTime.ToString(currentCulture) : dateTime.ToString();
        testControl.GetInterface<IControlText>().Text = dateTimeValue;
    }
}

该命令的主要参数指定要填充的字段标题。它还需要Days,hours和Minutes额外的参数,这些参数指定要指定的时间与当前时间之间的时差。Culture额外参数旨在解决任何特定于本地化的问题。

请注意,IControlText接口作为GetInterface <T>方法的通用参数传递。这意味着命令的目标控件提供了可编辑的文本。ITestControl主题中列出了其他受支持的接口。

注册自定义命令

WinAdapterWebAdapter类负责测试时运行的应用程序。在此示例中,我们将覆盖默认的WinAdapterWebAdapter类。这应该在单独的类库项目中完成。这些类非常简单,包含重写的WinAdapter.RegisterCommands方法。

ExtendedWinAdapter类:

using DevExpress.ExpressApp.EasyTest.WinAdapter;
using DevExpress.EasyTest.Framework;
using AdditionalCommands;

namespace ExtendedAdapters {
    public class ExtendedWinAdapter : WinAdapter {
        public override void RegisterCommands(IRegisterCommand registrator) {
            base.RegisterCommands(registrator);
            registrator.RegisterCommand("FillDateTimeValue", typeof(FillDateTimeValueCommand));
        }
    }
}

在同一个类库项目中,打开AssemblyInfo.csAssemblyInfo.vb)文件并注册适配器。

[assembly: DevExpress.EasyTest.Framework.Adapter(typeof(ExtendedAdapters.ExtendedWebAdapter))]

ExtendedWebAdapter类:

using DevExpress.ExpressApp.EasyTest.WebAdapter;
using DevExpress.EasyTest.Framework;
using AdditionalCommands;

namespace ExtendedAdapters {
    public class ExtendedWebAdapter : WebAdapter {
        public override void RegisterCommands(IRegisterCommand registrator) {
            base.RegisterCommands(registrator);
            registrator.RegisterCommand("FillDateTimeValue", typeof(FillDateTimeValueCommand));
            ScriptParser scriptParser = ((ScriptParser)registrator);
        }
    }
}

在同一个类库项目中,打开AssemblyInfo.csAssemblyInfo.vb)文件并注册适配器。

[assembly: DevExpress.EasyTest.Framework.Adapter(typeof(ExtendedAdapters.ExtendedWebAdapter))]

生成的解决方案结构如下图所示(突出显示了新文件和修改过的文件)。

CustomEasyTestCommand_SolutionStructure

配置EasyTest以使用自定义适配器类

为了使用自定义适配器程序集而不是默认程序集,必须按以下方式修改EasyTest配置文件

<Options>
    <!-- ... -->
    <Aliases>
        <Alias Name="WinAdapterFileName" 
        Value="[SolutionPath]\ExtendedWinAdapter\bin\EasyTest\ExtendedWinAdapter.dll" />
        <Alias Name="WebAdapterFileName" 
        Value="[SolutionPath]\ExtendedWebAdapter\bin\EasyTest\ExtendedWebAdapter.dll" />
    <!-- ... -->
  </Aliases>
</Options>

使用FillDateTimeValue命令的示例脚本

要查看运行中的FillDateTimeValue命令,请通过模块设计器从业务类库中添加事件类。然后,创建并运行以下EasyTest脚本。

#DropDB AdditionalCommands
#Application AdditionalCommandsWin
#Application AdditionalCommandsWeb

*Action Navigation(Scheduler Event)

*Action New

*FillDateTimeValue Start Date/Time
 Culture = en-US
 Days = -1
 Hours = 1
*FillDateTimeValue End Date/Time
 Culture = en-US

*Action Save

调试自定义命令

当需要调试自定义EasyTest命令实现时,请使用以下方法

  • 将包含FillDateTimeValue命令实现的类库项目设置为StartUp。
  • 在命令的代码中设置所需的断点。
  • 打开项目属性,然后在“调试”选项卡下修改“启动外部程序”和“命令行参数”选项。第一个应指向TestExecutor实用程序,第二个应指向使用该命令的脚本。

    CustomEasyTestCommand_Debug

现在,您可以在命令的代码中设置断点并进行调试。

相关文章

转载保留此链接,注明出处