65.9K
CodeProject 正在变化。 阅读更多。
Home

通用测试框架

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (6投票s)

2020年7月29日

CPOL

1分钟阅读

viewsIcon

8205

downloadIcon

261

以动态方式“编程”任何测试用例的通用框架

引言

这个工具是一个非常通用的框架,用于以动态方式“编程”任何测试用例,一个动态的“最终状态机”,可以按照定义的顺序执行任何“测试块”。

每个“块”在其参数中可以进行大量配置,一个“块”的输出可以重定向到任何其他“块”的输入。 您可以通过在“InputRow”列的combobox中选择其编号来引用先前“块”的输出。

通过添加/删除可以轻松更改“块”的顺序。

Adding a new Testing Step

创建测试用例后,您可以将其保存到*.ETF文件中,以便以后使用此预定义的测试用例。

Loading Test File

测试运行完成后,将出现一个消息框显示结果,协议文件将写入“%appdata%”。

Test OK

29.07.2020 15:28:34: Creating Test Brick: OneStep ...
29.07.2020 15:28:34: Creating Test Brick: FindRegExp ...
29.07.2020 15:28:34: Creating Test Brick: AssertEqual ...
29.07.2020 15:34:17: STEP 1
29.07.2020 15:34:20: STEP 2
29.07.2020 15:34:20: Search for OK
29.07.2020 15:34:20: Found 1 times
29.07.2020 15:34:20: STEP 3
29.07.2020 15:34:20: EQ
29.07.2020 15:35:38: **** Test OK! ****

实现

有趣的是,如何通过添加或删除行来动态更改 WPF GUI(代码隐藏)。

Changing XAML

这个Grid是我们需要调整的对象。 首先,我们清除“旧”Grid并添加所有列和行。

private void CreateDataGrid()
{
 // Clear grid
 grdData.ColumnDefinitions.Clear();
 grdData.RowDefinitions.Clear();

 // Create Columns
 int nCol = 0;
 int nRow = 0;
 
 RowDefinition gridRow = new RowDefinition();
 gridRow.Height = new GridLength(25);
 grdData.RowDefinitions.Add(gridRow);

同样有趣的是,从基本实例创建派生类的可能性。

Class Diagram

TestBrickFactory通过了解其名称(Activator:https://docs.microsoft.com/en-us/dotnet/api/system.activator)从基本的TestClass“构建”一个特殊的“块”。

        public static TestClass CreateTestBrick(TestClass oBase, string sName) 
        {
            Logger.Instance.Write("Creating Test Brick: " + sName + "..."); 
            string sBrickName = "TestingFramework.Model." + sName; 

            var oType = Type.GetType(sBrickName); 
            TestClass oClass = null; 

            if (oType != null) 
                oClass = (TestClass)Activator.CreateInstance(oType, oBase);

            return oClass; 
        }

Using the Code

由于反射,添加新的测试“块”非常容易:这需要创建一个从抽象TestClass派生的新类,并重写单个虚拟方法ExecuteTestStep()

    class OneStep : TestClass
    {
        public OneStep(TestClass oBase) : base(oBase)
        {
            TestBrick = "OneStep";
        }

        public override string ExecuteTestStep()
        {
           // Do Smth!
        }
    }

历史

  • 2020年7月29日:发布(版本 1.0.1)
  • 2020年7月30日:添加章节“实现
  • 2020年8月10日:小更新版本 1.0.2
© . All rights reserved.