测试的重要性
本主题概述了导致测试不足的思维模式,介绍了与无法测试 BizTalk 解决方案相关的风险,并将手动测试的陷阱与自动测试的优势进行了对比。
测试为“开销”
遗憾的是,随着对投资回报率 () 需求的不断增加,项目的测试阶段通常被视为可以缩减的项目计划的第一个方面之一。
反对测试 BizTalk 解决方案的一个论点是,“我们不需要测试我们的解决方案,因为 Microsoft 已经彻底测试了BizTalk Server。 虽然 Microsoft 确实会全面测试BizTalk Server,但不同的使用方案几乎需要对吞吐量、高可用性、适配器使用情况、延迟、跟踪要求、业务流程使用情况和自定义代码的业务需求进行无数次排列。 由于BizTalk Server非常灵活,并且可以适应许多不同的使用方案,因此无法预测和测试所有这些方案。 此外,应在BizTalk Server环境中应用的默认设置进行优化,以适应每种使用方案。 确定特定使用方案的最佳设置的唯一方法是测试解决方案、测量各种参数、优化环境和重新测试。 请考虑下图,该图描绘了BizTalk Server解决方案的示例物理体系结构。
示例物理 BizTalk 体系结构
在上图中可以看到,BizTalk Server解决方案包含许多移动部件,包括运行BizTalk Server的多台计算机、运行SQL Server的计算机、服务器群集节点和 Active Directory 域。 系统启动并运行后,将应用许多配置调整,以根据业务需求优化应用程序,从而最大程度地提高解决方案的整体 ROI。 此单一方案表明有许多变量在起作用。 除了环境的物理体系结构外,还考虑下图,该图描绘了消息流通过BizTalk Server。
示例逻辑 BizTalk 消息流
当我们查看流经BizTalk Server的消息的逻辑关系图时,可以看到需要按项目进行测试的其他变量,包括自定义发送和接收管道组件以及可从 BizTalk 业务流程调用的自定义类。 鉴于自定义组件和 BizTalk 组件的类型复杂性和用法因项目而异,因此对每个特定使用方案执行测试变得很明显。
测试方法和时间线
为了确保测试有效且高效地执行,测试工具应完全自动化,以便可以轻松重现,并将人为错误的可能性降至最低。 此外,在规划项目时,应分配足够的时间进行测试。 极简的测试方法包括类似于下面的手动步骤:
手动将一个或多个消息加载到接收终结点,例如文件删除或使用 SOAP 客户端调用 Web 服务。
手动验证消息的正确内容和结构。 由于项目中通常存在多个架构,因此消息可能是平面文件和 XML 的混合体,也可能包含跨字段依赖项。
注意
其中一个示例是涉及 SWIFT 消息的任何项目。 这些是具有跨字段依赖关系的平面文件消息。 也就是说,一个字段的值依赖于另一个 – 此处不会执行简单的 XSD 验证;因此,SWIFT 加速器使用 BizTalk 规则引擎来验证消息。 有关 SWIFT 加速器的详细信息。
手动检查BizTalk Server计算机上的事件日志以查找错误。
如果使用) 验证活动信息是否正确记录,请手动检查 BAM 数据库 (。
如上所述使用手动过程进行测试是主观的且容易出错。 对于 10 个不同的测试用例,请考虑必须检查具有跨字段依赖项的一百行 SWIFT 消息。 大多数项目开发人员将无法或即使他们能够,也不会倾向于可靠和准确地从事此类任务。 实施主观的手动、容易出错的测试过程会增加项目的风险,并增加失败的可能性。
项目规划时间线通常会放大失败的风险,这些项目规划时间线未包含足够的测试时间。 项目测试策略通常依赖于在上线日期前一周左右安排的单个手动测试通过。 这种有限的测试使项目面临风险。 鉴于测试时间线有限,如果检测到任何问题,则项目可能会延迟,因为没有分配时间来解决问题。 此外,如果发现并修复了问题,则可能没有足够的时间在系统上线之前执行后续测试。
“单一最终生成,单次测试通过,项目直播”测试的现实是,它经常导致项目延迟,项目超出预算,甚至更糟的是,项目完全失败! 对于任务关键型系统,这种测试方法是一场等待发生的灾难。
有效且高效地测试
由于适当的测试通常被视为一种昂贵的奢侈品,而不是一个整体的要求,所以它往往被贴在项目的尾部。 鉴于异类企业环境中使用的软件和硬件堆栈的复杂性,这种方法是不现实的。 实现可按需重新运行的自动化测试方法是有效且高效地测试的最佳方式,并且是最终为企业带来卓越 ROI 的成功项目的组成部分。 通过在项目开始时投资通过系统对每个代码路径进行完整的端到端功能测试,你正在生成测试资产。 这些资产需要投资 (即开发时间) ,以便从以后提高测试效率和效率中获益。 为了最大程度地减少项目派生此类框架所需的投资,建议使用 Visual Studio 2010 负载测试框架。 Visual Studio 2010 包括成功测试所需的大多数常见测试步骤,是本指南后面介绍的测试方案中使用的框架。