创建运行时文件
相关项: API 测试
注释: 必须使用 Framework 4.0 的目标框架编译 DLL。
添加 Using 语句
在运行时文件中,提供必需的 using 语句。在解决方案中,还必须添加对 .dll 文件的引用。.dll 文件位于产品安装的 /bin 文件夹中。必须始终添加对 HP.ST.Fwk.RunTimeFWK.dll 的引用。如果您正在使用内部日志记录,还必须添加对 log4net.dll 的引用。
以下示例显示 .cs 示例文件中的 Using 语句。
using HP.ST.Fwk.RunTimeFWK;
// If you need to implement Internal Logging
using log4net;
指定命名空间和类
定义命名空间并提供活动的运行时代码。您为自定义活动定义的类必须继承自 STActivityBase 类。例如:
namespace ReportMessageActivitySample
{
[Serializable]
public class ReportMessageActivitySample : STActivityBase
{
设置内部日志记录
使用内置的记录器管理器指示活动在运行时期间创建内部日志。此示例获取输入属性的属性值,并将输出仅发送到运行结果或发送到运行结果和输出窗口。例如:
/// <summary> /// Internal log
/// </summary>
private static readonly ILog log =
LogManager.GetLogger(typeof(ReportMessageActivitySample));
const string runResults = "Run Results";
const string runResultsAndOutputWindow = "Run Results and Output Window";
有关其他日志记录选项的详细信息,请参见 Assert 对象。
初始化属性
初始化您在签名文件中定义的自定义输入和输出属性。以下示例初始化三个输入属性: Status、Message 和 Destination。例如:
/// <summary>
/// Initializes properties.
/// </summary>
/// <param name="ctx">The runtime context</param>
public ReportMessageActivitySample(ISTRunTimeContext ctx, string name)
: base(ctx, name)
{
this.Status = String.Empty;
this.Message = String.Empty;
this.Destination = String.Empty;
}
检索属性值
此部分检索或设置输入属性值。例如:
/// <summary>
/// Gets or sets the status of the message to report.
/// </summary>
public string Status { get; set; }
/// <summary>
/// Gets or sets the details of the message to report.
/// </summary>
public string Message { get; set; }
/// <summary>
/// Gets or sets the destination where the message should be reported to.
/// </summary>
public string Destination { get; set; }
如果您具有的数组类型属性不是架构所描述的 (例如键/值对) ,则必须显式地初始化数组的所有成员并指示实际元素数。
以下示例初始化 MyArrayName 属性的 40 个元素。它包含 40 个键和值对。
this.MyArrayName = new MyPair[40];
for (int i=0; i<40; i++)
{
this.MyArrayName [i] = new MyPair();
}
public MyPair[] MyArrayName;
public class MyPair
{
string Key;
string Value;
}
对于由架构或 WSDL 定义的数组,您可以使用标准的选择链接源对话框 (API 测试)并直接链接到数组元素。
定义事件
定义一个或多个您稍后将调用的自定义事件。例如:
public event EventHandler CustomerEvent;
private void InvokeCustomerEvent(EventArgs MyArg)
{
EventHandler handler = this.CustomerEvent;
if (handler != null)
{
handler(this, MyArg);
}
}
执行步骤
执行步骤并向日志发送运行时信息。使用在 STActivityBase 类中定义的 STExecutionResult 数据类型及其 ExecuteStep 函数。例如:
protected override STExecutionResult ExecuteStep()
{
string DetailsReport;
if (this.Destination == runResultsAndOutputWindow)
{
LogInfo("\n" + this.Message.Replace("\\n", "\n"));
}
/// <summary>
/// Reports message to test results and output window.
/// </summary>
// The line-breaks replacements allow the printing of multiple lines in the report
DetailsReport = this.Message;
DetailsReport = DetailsReport.Replace("\\n", "<BR>");
DetailsReport = DetailsReport.Replace("\n", "<BR>");
this.Report("Message", DetailsReport);
如果您定义了一个自定义事件,请在调用 ExecuteStep 后调用该事件。
...
protected override STExecutionResult ExecuteStep()
{
InvokeCustomerEvent();
}
设置状态
设置测试运行的状态。ReportMessageActivitySample.cs 示例文件基于 STExecutionResult 值,使用枚举方法设置状态。例如:
switch (this.Status)
{
case "Done":
this.Report(ReportKeywords.StatusKeywordTag, ReportKeywords.DoneValueTag);
return new STExecutionResult(STExecutionStatus.Success);
case "Pass":
this.Report(ReportKeywords.StatusKeywordTag, ReportKeywords.SuccessValueTag);
return new STExecutionResult(STExecutionStatus.Success);
case "Fail":
this.Report(ReportKeywords.StatusKeywordTag, ReportKeywords.FailureValueTag);
return new STExecutionResult(STExecutionStatus.Success);
default:
return new STExecutionResult(STExecutionStatus.Success);
}
编译运行时文件
自定义代码后,可以编译 .dll。.dll 名称应与插件文件的名称相同。例如,运行时文件 ReportMessageActivitySample.dll 对应于 ReportMessageActivitySample.addin 文件。
在开发环境中创建运行时文件之后,从签名文件引用 .dll,从插件文件引用签名文件。