C#测试基类实现

C#测试基类实现

开发背景

在开发自动化测试工具时,我们经常面临对测试用例进行循环压力测试的需求。由于测试类的重复编写工作量较大,因此计划开发一个抽象基类来简化这一过程。

设计思路

测试流程

测试流程大致如下图所示:

测试流程
测试流程

整个测试流程包含一个外层大循环(circle),用于控制测试的总轮次。流程开始时,先执行带有@BeforeClass注解的方法。随后,对每个测试用例(即带有@Test注解的方法)进行循环测试,每个测试用例根据其自身的循环次数(count)进行多次执行。在每次测试用例执行前,先调用带有@Before注解的方法,紧接着执行具体的测试逻辑,最后调用带有@After注解的方法。如此实现了测试流程的自动化和分阶段管理。

测试结果

通过TestResult存储单个测试结果的信息,包括如下内容:

  • Id:唯一标识
  • Circle:测试循环次数
  • Case:测试用例名称
  • Description:测试用例描述
  • Count:测试用例执行次数
  • Status:测试状态,成功/失败
  • Message:失败时的错误信息

功能实现

测试属性

c#
/// <summary>[test]</summary>
[AttributeUsage(AttributeTargets.Method)]
public class TestAttribute : Attribute
{
    public int Grade { get; set; }
    public int Count { get; set; }
    public string Description { get; set; }

    public TestAttribute(int grade = int.MaxValue, int count = 1, string description = "null")
    {
        Grade = grade;
        Count = count;
        Description = description;
    }
}

TestAttribute用于标记测试方法

  • Grade: 测试等级,数值越小优先执行
  • Count: 测试执行次数
  • Description: 用例描述

方法注释

c#
/// <summary>[Before]</summary>
[AttributeUsage(AttributeTargets.Method)]
public class BeforeAttribute : Attribute { }
/// <summary>[BeforeClass]</summary>
[AttributeUsage(AttributeTargets.Method)]
public class BeforeClassAttribute : Attribute { }
/// <summary>[After]</summary>
[AttributeUsage(AttributeTargets.Method)]
public class AfterAttribute : Attribute { }
/// <summary>[AfterClass]</summary>
[AttributeUsage(AttributeTargets.Method)]
public class AfterClassAttribute : Attribute { }
  • BeforeAttributeBeforeClassAttributeAfterAttributeAfterClassAttribute:用于标记在测试前后和测试类前后需要执行的方法。

测试结果

c#
/// <summary>存储测试结果</summary>
public class TestResult
{
    public int Id { get; set; } // id
    public int Circle { get; set; } // 循环次数
    public string Case { get; set; } // 测试用例名称
    public string Description { get; set; } // 测试用例描述
    public int Count { get; set; } // 当前用例的执行次数
    public string Status { get; set; } // 测试状态,成功或失败
    public string Message { get; set; } // 失败时的错误信息
}

抽象基类

  • TestBase 是一个抽象类,接收一个 circle 参数,表示测试的循环次数。
  • _testResults包含存储测试结果成功和失败的测试用例计数,以及一个 OnResultUpdated 事件,用于在结果更新时触发通知。
  • RunTests运行所有测试
  • Stop停止测试。但是不会立刻停止,只有当前的测试用例结束后,才会停止
  • RunFailedTests运行失败的测试
  • GetAllTestResults获取所有测试结果
  • GetSuccessTestResults获取成功的测试结果
  • GetFailTestResults获取失败的测试结果
  • SetCaseCount设置指定测试用例的 Count 次数

使用方法

简单示例

BasicReportManager是一个自定义用来管理测试报告的类,可自由发挥。

测试执行

c#
ExampleTests exampleTests = new();
exampleTests.RunTests();

测试结果

BasicReportManager自动生成

测试结果
测试结果
配置用户环境变量
C#执行终端指令

评论区

评论加载中...