BizUnit 4.0 测试步骤 - MQSC (IBM WebSphere MQ)。





5.00/5 (1投票)
BizUnit 4.0 中的新测试步骤,用于 MQSC
- 下载 TEST_PRO_HT1-noexe.zip - 27 KB
- 下载 BizUnit.TestSteps-noexe.zip - 2.7 KB
- 下载 BizTalk_PRO_MQSC-noexe.zip - 21.3 KB
介绍
正如我们所知,BizTalk 项目作为中间件通常是关键任务,它总是位于不同应用程序之间,而 BizTalk 部分出现故障会导致其他系统停滞。因此,本文将介绍使用 BizUnit 4.0 对 BizTalk 进行自动化测试。
BizUnit 4.0 - 现已推出。这是一个主要版本,进行了重大更改,使得创建编码测试和 XAML 测试更加容易。新版本 4.0 (BizUnit.TestSteps) 默认不支持 MQSC,您需要添加对 BizUnit.MQSeriesSteps 的引用,但它只接受 XML 配置,而不是 C# 代码,并且 BizUnit.MQSeriesSteps 也已弃用。因此,我在 BizUnit.TestSteps 中创建了新的测试步骤。
本文涵盖:
- 非常简单的 BizTalk 项目,它读取文件并将消息放入 MQSC。
- 如何在 BizUnit 4.0 中创建新的 MQSCStepHT 测试步骤,它像其他测试步骤(C# 和 XML/XAML)一样方便地访问 MQSC。
- 用于使用 MQSCStepHT 的测试项目
背景
BizUnit (参考:http://bizunit.codeplex.com/)
采用自动化测试策略对于降低软件开发项目相关的风险至关重要,它是确保交付高质量软件的关键。然而,开发自动化测试的开销通常被认为过高,从而成为不采用自动化测试的原因。
BizUnit 能够快速开发自动化测试。BizUnit 是一个灵活且可扩展的声明式测试框架,旨在快速实现分布式系统的自动化测试,例如,它广泛用于测试 BizTalk 解决方案。BizUnit 是完全可扩展的。其方法是通过通用可重用测试步骤来构建测试用例,测试用例在 XML 中定义,这使得它们可以自动生成,并且还可以对不同环境(例如,测试、暂存和生产环境)的 URL 进行“修复”。在 XML 中定义测试用例可以自动生成测试用例。
此 BizUnit 测试将执行以下操作:
- 将输入文件复制到 BizTalk 项目的接收位置。
- 读取 MQ 中的输出数据
- 根据输出文件格式 (XSD) 验证 MQ 数据
- 验证文件内容 (XPATH)
先决条件
- 您必须熟悉 BizTalk
- 对 BizUnit 有所了解
- 所需软件
- Visual Studio 2010
- BizTalk 2010
- BizUnit 4.0 (4.0.154.0) (http://bizunit.codeplex.com/releases/view/66850)
- IBM WebSphere 上的消息队列
使用代码
项目:BizTalk MQSC
这将是我们使用 BizUnit 进行测试的项目。所以我们需要先创建这个项目。
这将是一个非常简单的 BizTalk 项目,足以满足我们即时需求。在这里,我们以保险公司场景为例,我们接收有关保单的基本查询。保单详细信息存储在大型机系统中,我们通过 MQ 将数据传递给大型机。(各位,请不要考虑场景标准化。我知道在现实生活中这将是 HIPAA)
我将此 BizTalk 项目附加到本文中,以便您可以直接部署以进行测试。
项目工件:
- 两个模式,一个用于输入,另一个用于大型机输入(BizTalk 项目的输出)
- 一个映射,用于执行输入文件和大型机文件之间的映射
- 编排,用于设计消息流并绑定端口
输入模式
输入消息的结构。我们在此获取保单持有人 ID、姓名、地址和雇主 ID。

此模式的实例
<ns0:Ind xmlns:ns0="http://HT1_MQ.SchIN">
<ID>ABC009</ID>
<FName>Himanshu</FName>
<LName>Thawait</LName>
<Address>KCMO</Address>
<EmployerID>iGate01</EmployerID>
</ns0:Ind>
大型机输入消息的结构。需要团体保单号和会员号来提取所有详细信息
此模式的实例
将是 BizTalk 项目的输出
映射
一个非常简单的映射,它将传入消息的 ID 字段映射到大型机模式的 MemNum 字段,并将 EmployeeID 映射到 GrpPolicyNum 字段,通过附加“GRP:”使用 String Concatenate functoid。

业务流程
这是我们的编排,它有一个接收端口,用于从文件夹拾取消息(输入 XML 文件)并将其传递给 Rec 形状,然后它使用 Expression 形状和编排变量 (Trace Log) 记录事件日志,并使用上述映射为大型机构建消息。它再次记录关于进程完成的事件日志,并将此消息发送到与 MQSC 绑定的发送端口 (H1_MQ_SEN)。
如何指定 MQSC 绑定
这里有个窍门:MQSC 无法在 64 位 BizTalk Host Instance 上运行,因此您需要为您的编排和连接到 MQSC 的端口创建一个 32 位 Host Instance。

部署
项目已准备好部署,分配 snk,为应用程序命名,设置配置和服务器,然后部署。有关部署的详细信息:(http://msdn.microsoft.com/en-us/library/aa559168.aspx)
项目:BizUnit.TestSteps-Ench-创建 MQSCStepHT 测试步骤
在详细介绍之前,我想强调一下先决条件 #2(对 BizUnit 有所了解)。我假设到目前为止您已经下载并安装了 BizUnit 4.0,并且还解压缩了其源代码“BizUnit.Source”到 C:\Program Files\BizUnit\BizUnit 4.0\Source(默认位置)。
我不会将整个 BizUnit.TestStep 附加到本文中。您需要将以下类添加到您现有的 BizUnit.TestStep 中。
现在是时候为 MQSC 添加新的测试步骤了
- 转到“BizTalk\BizUnit4.0_Src\Src\BizUnit.TestSteps”并打开“BizUnit.TestSteps”
- 添加对“amqmdnet.dll”的引用。我使用的是 ver 1.0.0.2。这是 IBM 的 .NET 版 WebSphere MQ 类的实现 DLL。引用应如下所示:

- 向项目中添加新的“MQSCHT”文件夹
- 将“MQSeriesHelper.cs”从 C:\Program Files\BizUnit\BizUnit 4.0\Source\BizUnit4.0_Src\Src\BizUnit.MQSeriesSteps\Utilities 复制到“MQSCHT”。这是 Kevin B. Smith 创建的用于处理 MQSC 的辅助类。
- 在“MQSCHT”中添加新的类文件“MQSCGetStepHT.cs”
MQSCGetStepHT.cs 的代码
代码本身很容易理解。不过,最好稍微解释一下。此类核心是 TestStepBase,所有 BizUnit 测试步骤都必须继承自它,才能使其成为 BizUnit 测试步骤。它有两个抽象方法需要在此实现。
它有一个构造函数,用于初始化 Sub Step。subStep 是“由测试步骤执行的子步骤列表,可能有一个或多个子步骤。每个子步骤都会被调用,并且数据通常会从一个传递到下一个。”
Execute(Context context):这里是为 MQSC 读取编写的实际逻辑和代码。执行测试步骤的逻辑。参数:context:当前 TestCase 中使用的测试上下文
Validate (Context context):您可以在此处编写验证逻辑,例如检查某些必需的属性及其有效值。这将在测试步骤执行时运行。
///Himanshu Thawait
///Test step to work with MQSC. using amqmdnet.dll and MQSeriesHelper.cs
using System;
using System.Collections.ObjectModel;
using System.IO;
using BizUnit.TestSteps.Common;
using BizUnit.Xaml;
namespace BizUnit.TestSteps.MQSCStepHT
{
public class MQSCGetStepHT : TestStepBase
{
private string message;
/// <summary>
/// Que Manager details server (port)
/// </summary>
public string queueManager { get; set; }
/// <summary>
/// Query name
/// </summary>
public string queue { get; set; }
/// <summary>
/// Wait time out
/// </summary>
public int waitTimeout { get; set; }
/// <summary>
/// Used for Sub steps
/// </summary>
public MQSCGetStepHT()
{
SubSteps = new Collection<SubStepBase>();
}
/// <summary>
/// Read the data from MQ
/// </summary>
/// <param name="context"></param>
public override void Execute(Context context)
{
context.LogInfo("Reading queue: {0}, search queueManager: {1}", queue, queueManager);
message = MQSeriesHelper.ReadMessage(queueManager, queue, waitTimeout, context);
context.LogData("MQSeries output message:", message);
// SubSteps
// Check it against the validate steps to see if it matches one of them
foreach (var subStep in SubSteps)
{
try
{
Stream fileData = StreamHelper.LoadMemoryStream(message);
// Try the validation and catch the exception
fileData = subStep.Execute(fileData, context);
}
catch (Exception ex)
{
context.LogException(ex);
throw;
}
}
}
/// <summary>
/// Validation on MQ and Data data
/// </summary>
/// <param name="context"></param>
public override void Validate(Context context)
{
if (string.IsNullOrEmpty(queueManager))
{
throw new StepValidationException("queueManager may not be null or empty", this);
}
if (string.IsNullOrEmpty(queue))
{
throw new StepValidationException("queue may not be null or empty", this);
}
}
}
}
MQSeriesHelper.cs 的代码
构建
项目:测试项目
最后,我们一切就绪,可以为 MQSC 编写测试用例。此测试项目将使用与 BizTalk MQSC 项目相同的文件夹下拉位置、模式和 XML 文件(显然,因为我们将测试该项目)。
- 文件下拉位置:\\FileServer\Share\HT1\IN_MQ\ 与 BizTalk MQSC 项目使用的位置相同
- 输入文件:IN_MQ.xml
- 模式:SchOUT.xsd,与 BizTalk MQSC 的输出消息(大型机模式)相同
HT1_MQ.cs 的代码
此类中有两个测试用例。一个是使用 BizUnit.TestSteps.File(开箱即用的测试步骤)将 XML 文件复制到 BizTalk 拾取位置,另一个是使用我们的 BizUnit.TestSteps.MQSCStepHT 从 MQSC 读取数据。
这里需要记住的事情是:
RunTest() 是关键。您编写的任何代码(在 MQSCStepHT 中)在调用此 RunTest() 之前都不会实际执行。因此,如果您要调试代码,请等待此函数被调用,然后您的断点才会命中(在 MQSCStepHT 中)。
要了解 BizUnit 测试步骤,请阅读:“BizUnit 入门指南.pdf”,它随 BizUnit 4.0 一起安装。默认位置 C:\Program Files\BizUnit\BizUnit 4.0
在我的测试用例中,我决定将代码分为 6 个步骤。
- 步骤 1:创建 TestCase 对象,它实际上将包含许多内容的测试用例。
- 步骤 2:准备步骤,您在此设置要分配给执行步骤的内容。例如,设置文件下拉位置并分配源文件路径。
- 步骤 3:执行步骤,您在此将步骤 2 分配给步骤 1 的 testcase。
- 步骤 4:这是一个可选步骤,您可以在其中将 testcase 保存为 XAML 文件格式。因为 BizUnit 也可以很好地处理基于 XAML 的测试步骤。
- 步骤 5:创建 BizUnit 实例来运行。将步骤 1 的 testcase 分配给 BizUnit 对象。
- 步骤 6:通过 RunTest() 实际运行测试。
这是完整的代码:
using BizUnit.TestSteps.Common;
using BizUnit.TestSteps.DataLoaders.File;
using BizUnit.TestSteps.File;
using BizUnit.TestSteps.MQSCStepHT;
using BizUnit.TestSteps.ValidationSteps.Xml;
using BizUnit.Xaml;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace HT1.TestData
{
[TestClass]
public class HT1_MQ
{
[TestMethod]
public void MQ_TC1_CopyFileToProcess()
{
//1. Creat test case
var TC1 = new TestCase { Name = "H31 TC2", Category = "In Run", Preconditions = "H31 TC1" };
//2.0 Prepration for **Execution Step**- Copy file to IN folder
var createStep = new CreateStep();
createStep.CreationPath = @"\\FileServer\Share\HT1\IN_MQ\IN_MQ.xml";
//2.3 Source File
var dataLoder = new FileDataLoader { FilePath = @"\\FileServer\Share\HT1\IN_MQ.xml" };
createStep.DataSource = dataLoder;
//3 Execution Step- Copy file
TC1.ExecutionSteps.Add(createStep);
//4 Optional steps- Save Test case to XMAL file
TestCase.SaveToFile(TC1, TC1.Name + ".xmal");
//5.Create BizUnit instance to run
var bizunit = new BizUnit.BizUnit(TC1);
//6.Actually run the test
bizunit.RunTest();
}
[TestMethod]
public void MQ_TC2_Read()
{
//1. Create Test case
var TC1 = new TestCase { Name = "H31.MQ.TC1", Category = "IN run", Purpose = "Verify MQData" };
//2.0 Prepration for **Execution Step**- Setup MQSC setting
var mqscStep = new MQSCGetStepHT();
mqscStep.queueManager = "MQSCMger";
mqscStep.queue="MQSC.TEST.IN";
//2.1 Validate XML again Schems
var xmlValidationStep = new XmlValidationStep();
var schemaDefination = new SchemaDefinition
{
XmlSchemaPath = @"\\FileServer\Share\HT1\SchOUT.xsd",
XmlSchemaNameSpace = "http://HT1_MQ.SchOUT"
};
//2.2 Adding schemt to validate
xmlValidationStep.XmlSchemas.Add(schemaDefination);
//2.3 Validate XML data Using XPath
var xpathRecCount = new XPathDefinition
{
Description = "Checking the GrpPolicyNum",
XPath = "/*[local-name()='Member' and namespace-uri()='http://HT1_MQ.SchOUT']/*[local-name()='GrpPolicyNum' and namespace-uri()='']",
Value = "GRP:iGate01"
};
//3 Execution Step- check MQ data
xmlValidationStep.XPathValidations.Add(xpathRecCount);
//3.1 sub step
mqscStep.SubSteps.Add(xmlValidationStep);
//3.2 Main step
TC1.ExecutionSteps.Add(mqscStep);
//4 Optional steps- Save Test case to XMAL file
TestCase.SaveToFile(TC1, TC1.Name + ".xmal");
//5.Create BizUnit instance to run
var bizunit = new BizUnit.BizUnit(TC1);
//6.Actually run the test
bizunit.RunTest();
}
}
}
MQ_TC2_Read()
在步骤 2(2.1、2.2、2.3)中包含了一些额外的内容,用于验证消息格式和其中的数据。
- 步骤 2.0:我们只是设置 MQSC 详细信息
- 步骤 2.1 和 2.2:我们知道数据是 XML 格式,并且我们有该 XML 的模式。因此,我们想根据模式验证 MQ 数据。
- 步骤 2.3:我们还想深入到节点级别并验证其中的值。所以我们使用 xpath 查询来获取节点的值。我们从 BizTalk 模式编辑器“实例 xpath”属性中获取了这个 xpath 查询。
获取实例 xpath
现在是时候运行了
BizUnit 测试用例将像任何其他测试用例一样运行。只需选择您的测试用例,右键单击并点击运行。
正如您所见,您可以选择多个测试用例来运行。要指定测试用例执行的永久顺序,您可以添加“Order test”,在这里您可以看到测试用例列表并以所需的顺序选择它们。然后,您无需选择单个测试用例,只需选择并运行此 Order test 文件。
需要记住的事情:如果您想调试代码并命中断点,请右键单击测试用例并选择“Debug Selection”。
测试结果
运行测试用例时,会在 VS 底部的窗体中出现“Test Result”选项卡。在这里,您可以看到测试用例的状态,如 pass、failed、aborted 和 running。要查看详细信息,请右键单击测试结果并选择“View Test Result Details”。
这是测试详情的样子,让我们看看如何读取它。
它有两部分:
- Common Result 只会提供有关谁在何时在哪个计算机上运行等信息。
- Standard Console Output:在这里您会得到大部分信息。我标记了 4 个地方,让我们看看每个地方告诉我们什么。
- 告诉我们 MQSC 的配置值
- 告诉我们 MQSC 中有什么数据
- 将要验证模式和值
- 3.1:表示值符合预期。所以测试通过了

每次测试运行都会将完整的详细信息存储在“.trx”文件中,即“Visual Studio Test Results File”格式,位于“TestResults”文件夹中。文件名包含运行此测试用例的用户以及计算机名称以及日期时间戳。
最后,完成了,希望它能帮到您。
下一步
我已经为 RESTful 服务和 Oracle 编写了测试步骤,我将为此创建类似的帖子。
参考
BizUnit 4.0:http://bizunit.codeplex.com/
BizUnit 文件步骤,我也喜欢文章风格:https://codeproject.org.cn/Articles/243970/BizUnit-4-0-and-BizTalk-2010
历史
- 版本 1.0 日期:2013-02-21