集成测试与 TAF 自动测试框架
在企业级 PLM 开发中,随着业务系统越来越复杂,任何一次微小的元数据更新或 Method 修改,都可能导致其他不相干的模块发生逻辑失效(Regression 衰退)。如果全部依赖人工在前端浏览器上点点点进行黑盒测试,不仅耗时耗力,而且容易遗漏。
Aras 提供了专业的 TAF (Test Automation Framework,测试自动化框架) 体系,支持通过代码驱动的 AML 集成测试 对业务系统进行大规模的回归测试。
1. 什么是 AML 集成测试?
传统的 UI 自动化测试(如 Selenium)执行慢、易受表单 UI 控件变动影响且维护极其困难。而 Aras 平台是完全基于 AML 元数据服务驱动的,因此最有效的测试手段是 AML 集成测试:
- 测试原理:测试工程模拟外部客户端,通过 IOM API 组装 AML 请求(比如创建一个
Part并尝试推进其 Lifecycle 状态),发送到被测服务器。 - 判定方法:测试代码通过断言(Assert)机制,验证服务器返回的响应 AML 中是否包含正确的结果(如:验证
Part状态是否成功变为Released,或者由于权限不足如期报错<faultstring>)。
2. TAF 自动化测试工程搭建
TAF 框架通常运行在 Visual Studio 中,基于 C# 类库和 NUnit(或 MS Test)单元测试框架构建。
2.1 依赖安装
- 在 Visual Studio 中,新建一个 .NET 类库工程。
- 通过 NuGet 包管理器,引入 NUnit 测试库以及 Aras 的核心开发集
Aras.IOM.dll。 - 安装官方提供的 Aras Innovator AML Integration Test Plugin (VS 插件),以获取便捷的 XML/AML 测试模版。
2.2 配置连接信息 (App.config)
为了让测试工程在运行时能够准确定位被测试的服务器(如本地的 LDE 或 CI 中的临时测试库),必须在 App.config 中声明连接参数:
xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<!-- 被测环境的连接详情 -->
<add key="ServerUrl" value="http://localhost/InnovatorServer" />
<add key="Database" value="TestDB" />
<add key="Username" value="test_user" />
<add key="Password" value="password123" />
</appSettings>
</configuration>3. 编写第一个 AML 集成测试用例
以下为一个标准的 NUnit 集成测试类示例。该测试验证了“创建一个设计变更申请(Design Request)后,其默认的初始生命周期状态必须是 Draft”:
csharp
using NUnit.Framework;
using Aras.IOM;
using System.Configuration;
namespace Aras.DevOps.Test
{
[TestFixture]
public class DesignRequestTests
{
private HttpServerConnection _conn;
private Innovator _innovator;
[SetUp]
public void Init()
{
// 1. 初始化从 App.config 读取连接参数并登录
string url = ConfigurationManager.AppSettings["ServerUrl"];
string db = ConfigurationManager.AppSettings["Database"];
string user = ConfigurationManager.AppSettings["Username"];
string pwd = ConfigurationManager.AppSettings["Password"];
_conn = IomFactory.CreateHttpServerConnection(url, db, user, pwd);
Item loginResult = _conn.Login();
Assert.IsFalse(loginResult.isError(), "测试服务器登录失败,请检查配置!");
_innovator = new Innovator(_conn);
}
[Test]
public void CreateDesignRequest_Should_DefaultToDraftState()
{
// 2. 构造测试 AML:创建一条新的 Design Request
Item dr = _innovator.newItem("Design_Request", "add");
dr.setProperty("title", "TAF 自动化测试用例 - 变更测试");
dr.setProperty("description", "由自动化回归流水线发起");
// 3. 执行物理提交
Item result = dr.apply();
// 4. 进行断言验证
Assert.IsFalse(result.isError(), $"保存 Design Request 失败,错误: {result.getErrorDetail()}");
// 验证系统自动赋予的 state 属性是否为 "Draft"
string state = result.getProperty("state");
Assert.AreEqual("Draft", state, "Design Request 的初始状态不为 Draft!");
// 5. 垃圾清理 (TearDown Clean):为了不污染测试库,测试结束后将测试数据删除
Item deleteItem = _innovator.newItem("Design_Request", "delete");
deleteItem.setID(result.getID());
deleteItem.apply();
}
[TearDown]
public void Cleanup()
{
// 6. 注销登录释放连接
if (_conn != null && _conn.AsServerConnection().IsLoggedIn())
{
_conn.Logout();
}
}
}
}4. TAF 与 CI/CD 持续集成集成
在企业级部署中,自动化测试是流水线合并的第一道门禁:
- 分支合并触发:当有开发人员发起 Pull Request 准备将本地修改合并进主仓时,Azure DevOps CI 会在云端启动构建。
- 临时环境拉起:流水线通过脚本(XDT 变换等)自动复制一份代码树与数据库镜像,搭建隔离的临时测试实例。
- 元数据部署:自动运行
Import.exe将本次 PR 中导出的 Package XML 包导入该临时测试库。 - 运行 TAF 脚本:调用命令行
vstest.console.exe执行测试工程中所有的单元与集成测试用例。 - 结果评审:
- 如果 TAF 报错(测试断言失败),PR 将被强行置为“禁止合并”状态,并向开发者发送邮件警报。
- 只有全部测试用例绿灯通过,才允许进行人工同行审查(Code Review)并最终合并进 SDE。
