天天看点

10个.NET提升效率测试工具和开源框架

作者:码上尽宝

.NET测试工具的作用是帮助开发人员编写和运行测试代码,以确保应用程序的质量和稳定性。好的测试可以帮助开发人员提高测试效率。今天我整理我平时用于项目测试的工具和类库,整理后推荐10个用于.NET项目测试的工具和开源类库,希望能帮助到大家,同一类的我尽量推荐一个,也欢迎大家推荐你在平时中使用的那个测试框架或者类库。

10个.NET提升效率测试工具和开源框架

1、NUnit

NUnit 是适用于所有 .Net 语言的单元测试框架。最初从JUnit移植而来,当前的生产版本版本 3 已完全重写,具有许多新功能并支持广泛的 .NET 平台。和Visual Studio自带MSTest测试框架一个,可以用于单元测试和集成测试。有人问我为什么不用自带的MSTest,其实我也答不上来,感觉都是比较好的测试框架。如果一定要说个理由,感觉性能比较好点,扩展性好点,然后习惯用它。还是那句话,测试框架看你团队用什么,大家一致即可,合适就好。

2、Moq

.NET 最流行和友好的模拟库。个人感觉虽然功能不及收费的Just Mock ,但是是开源的,免费的,作为单元测试足够使用,所以使用的最多,也最广泛的一个模拟库。利用 .NET Linq 表达式树和 lambda 表达式的 .NET 模拟库,这使其成为最高效、类型安全和重构友好的模拟库可用。它支持模拟接口和类。它的 API 非常简单明了,不需要任何先验知识或模拟概念的经验。

using Moq;
using NUnit.Framework;

[TestFixture]
public class OrderServiceTests
{
    [Test]
    public void PlaceOrder_WithValidOrder_CallsSaveMethod()
    {
        // Moq IOrderRepository 接口,不查下数据库
        var mockRepository = new Mock<IOrderRepository>();
        var orderService = new OrderService(mockRepository.Object);
        var order = new Order { Id = 1, Customer = "John Doe", TotalAmount = 100 };

        // 执行
        orderService.PlaceOrder(order);

        // 断言
        mockRepository.Verify(x => x.Save(order), Times.Once);
    }
}           

3、AutoFixture

这是一个.NET Core测试工具,可以用于自动生成测试数据和测试对象。为了更快地编写可维护的单元测试。AutoFixture 它提供了测试数据生成器模式的通用实现,使开发人员更容易进行测试驱动开发,从而使测试开发人员能够专注于每个测试用例本身逻辑,减少数据构造。提高开发效率。以下是AutoFixture的官方实例:

[Fact]
public void IntroductoryTest()
{
    // Arrange
    Fixture fixture = new Fixture();

    int expectedNumber = fixture.Create<int>();
    MyClass sut = fixture.Create<MyClass>();
    // Act
    int result = sut.Echo(expectedNumber);
    // Assert
    Assert.Equal(expectedNumber, result);
}           

4、Coverlet

这是一个.NET Core测试工具,可以用于生成代码覆盖率报告,支持.NET 的跨平台代码覆盖框架,支持行、分支和方法覆盖。它适用于所有平台上的 .NET Core。这款一般偏向测试管理的工具,开源用于自动化考核团队测试覆盖率,甚至开源集成Jenkins进行编译自动化进行单元测试报告生产,用于生产发布的一个指标。如下图一个测试报告,包含代码的覆盖情况使用不同颜色标识。代码覆盖率等异常情况都会清晰给出。

dotnet test --collect:"XPlat Code Coverage"           
10个.NET提升效率测试工具和开源框架

5、TestServer

TestServer是一个.NET Core测试工具,可以用于编写集成测试和端到端测试。提供一些开箱即用的工具,用于快速进行 ASP.NET Core 应用程序的集成测试。.Net Core 自带的,只需要引用Microsoft.AspNetCore.TestHost.dll 程序集,然后进行简单配置,就可以用于编写集成测试和端到端测试。它可以帮助我们创建一个虚拟的HTTP服务器,并模拟HTTP请求和响应,从而测试整个应用程序的集成和交互。

TestServer的作用有以下几点:

  1. 模拟HTTP请求和响应:TestServer可以帮助我们模拟HTTP请求和响应,从而测试整个应用程序的集成和交互。我们可以使用HTTP客户端来发送请求,并验证响应是否符合预期。
  2. 配置应用程序:TestServer可以帮助我们配置应用程序,包括中间件、服务、路由和控制器等。我们可以在测试中模拟不同的环境和场景,从而测试应用程序的不同方面和功能。
  3. 提高测试效率:TestServer可以提高测试效率,减少测试代码的编写时间和工作量。我们可以使用TestServer来编写集成测试和端到端测试,从而覆盖应用程序的不同方面和功能。

如下是一个简单的集成测试Demo:

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using NUnit.Framework;
using System.Net.Http;
using System.Threading.Tasks;

[TestFixture]
public class StartupTests
{
    private readonly TestServer _server;
    private readonly HttpClient _client;

    public StartupTests()
    {
        // Arrange
        _server = new TestServer(new WebHostBuilder().UseStartup<Startup>());
        _client = _server.CreateClient();
    }

    [Test]
    public async Task GetValues_ReturnsValues()
    {
        // Act
        var response = await _client.GetAsync("/api/values");
        var content = await response.Content.ReadAsStringAsync();

        // Assert
        Assert.IsTrue(content.Contains("value1"));
        Assert.IsTrue(content.Contains("value2"));
    }
}           

6、FluentAssertions

FluentAssertions是一个.NET断言库,可以用于编写更具可读性的测试代码,Fluent Assertions 是一组 .NET 扩展方法,可让您更自然地指定 TDD 或 BDD 式单元测试的预期结果。它提供了一系列的断言方法,可以让测试代码更加简洁和易于理解。

FluentAssertions的作用有以下几点:

  1. 提高测试代码的可读性:FluentAssertions提供了一系列的断言方法,可以让测试代码更加简洁和易于理解。我们可以使用FluentAssertions来编写更加自然和直观的测试代码,从而提高测试代码的可读性。
  2. 支持链式编程:FluentAssertions支持链式编程,可以让测试代码更加简洁和易于理解。我们可以使用链式编程来编写更加流畅和优雅的测试代码,从而提高测试代码的可读性和可维护性。
  3. 提供丰富的断言方法:FluentAssertions提供了一系列的断言方法,可以满足不同的测试需求。我们可以使用这些断言方法来验证对象的属性、方法、异常、集合等,从而编写更加全面和有效的测试代码。
  4. 支持自定义断言方法:FluentAssertions支持自定义断言方法,可以让测试代码更加灵活和可扩展。我们可以使用自定义断言方法来验证特定的业务逻辑和需求,从而编写更加定制化和高效的测试代码。

如下是一个简单的断言demo:

string actual = "ABCDEFGHI";
actual.Should().StartWith("AB").And.EndWith("HI").And.Contain("EF").And.HaveLength(9);

IEnumerable<int> numbers = new[] { 1, 2, 3 };
numbers.Should().OnlyContain(n => n > 0);
numbers.Should().HaveCount(4, "because we thought we put four items in the collection");           

7、BenchmarkDotNet

BenchmarkDotNet是一个.NET开源测试类库,可以用于编写高性能的基准测试,并生成相应的测试报告。它支持多种测试场景,如方法调用、内存分配、算法性能等,可以帮助我们评估应用程序的性能和优化方案。可帮助您将方法转化为基准、跟踪其性能并共享可重现的测量实验。这并不比编写单元测试难!在引擎盖下,由于perfolizer统计引擎,它执行了很多保证可靠和精确结果的魔法。BenchmarkDotNet 可以保护您免受常见的基准测试错误的影响,并在您的基准设计或获得的测量结果出现问题时向您发出警告。结果以用户友好的形式呈现,突出显示有关实验的所有重要事实。该库被包括 .NET Runtime 在内的14300 多个项目采用,并得到.NET Foundation的支持。

[SimpleJob(RuntimeMoniker.Net472, baseline: true)]
[SimpleJob(RuntimeMoniker.NetCoreApp30)]
[SimpleJob(RuntimeMoniker.NativeAot70)]
[SimpleJob(RuntimeMoniker.Mono)]
[RPlotExporter]
public class Md5VsSha256
{
    private SHA256 sha256 = SHA256.Create();
    private MD5 md5 = MD5.Create();
    private byte[] data;

    [Params(1000, 10000)]
    public int N;

    [GlobalSetup]
    public void Setup()
    {
        data = new byte[N];
        new Random(42).NextBytes(data);
    }

    [Benchmark]
    public byte[] Sha256() => sha256.ComputeHash(data);

    [Benchmark]
    public byte[] Md5() => md5.ComputeHash(data);
}           
BenchmarkDotNet=v0.12.0, OS=Windows 10.0.17763.805 (1809/October2018Update/Redstone5)
Intel Core i7-7700K CPU 4.20GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
  [Host]       : .NET Framework 4.7.2 (4.7.3468.0), X64 RyuJIT
  Net472       : .NET Framework 4.7.2 (4.7.3468.0), X64 RyuJIT
  NetCoreApp30 : .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), X64 RyuJIT
  NativeAot70  : .NET 7.0.0-preview.4.22172.7, X64 NativeAOT
  Mono         : Mono 6.4.0 (Visual Studio), X64


| Method |       Runtime |     N |       Mean |     Error |    StdDev | Ratio |
|------- |-------------- |------ |-----------:|----------:|----------:|------:|
| Sha256 |    .NET 4.7.2 |  1000 |   7.735 us | 0.1913 us | 0.4034 us |  1.00 |
| Sha256 | .NET Core 3.0 |  1000 |   3.989 us | 0.0796 us | 0.0745 us |  0.50 |
| Sha256 | NativeAOT 7.0 |  1000 |   4.091 us | 0.0811 us | 0.1562 us |  0.53 |
| Sha256 |          Mono |  1000 |  13.117 us | 0.2485 us | 0.5019 us |  1.70 |
|        |               |       |            |           |           |       |
|    Md5 |    .NET 4.7.2 |  1000 |   2.872 us | 0.0552 us | 0.0737 us |  1.00 |
|    Md5 | .NET Core 3.0 |  1000 |   1.848 us | 0.0348 us | 0.0326 us |  0.64 |
|    Md5 | NativeAOT 7.0 |  1000 |   1.817 us | 0.0359 us | 0.0427 us |  0.63 |
|    Md5 |          Mono |  1000 |   3.574 us | 0.0678 us | 0.0753 us |  1.24 |
|        |               |       |            |           |           |       |
| Sha256 |    .NET 4.7.2 | 10000 |  74.509 us | 1.5787 us | 4.6052 us |  1.00 |
| Sha256 | .NET Core 3.0 | 10000 |  36.049 us | 0.7151 us | 1.0025 us |  0.49 |
| Sha256 | NativeAOT 7.0 | 10000 |  36.253 us | 0.7076 us | 0.7571 us |  0.49 |
| Sha256 |          Mono | 10000 | 116.350 us | 2.2555 us | 3.0110 us |  1.58 |
|        |               |       |            |           |           |       |
|    Md5 |    .NET 4.7.2 | 10000 |  17.308 us | 0.3361 us | 0.4250 us |  1.00 |
|    Md5 | .NET Core 3.0 | 10000 |  15.726 us | 0.2064 us | 0.1930 us |  0.90 |
|    Md5 | NativeAOT 7.0 | 10000 |  15.627 us | 0.2631 us | 0.2461 us |  0.89 |
|    Md5 |          Mono | 10000 |  30.205 us | 0.5868 us | 0.6522 us |  1.74 |
           

8、Visual Studio性能探查器(Performance Profiler)

不能忽略的Visual Studio自带的性能探查器(Performance Profiler),一个功能强大的Debug性能测试工具。可以用于分析应用程序的性能瓶颈。它支持多种性能分析器,如CPU性能分析器、内存性能分析器、I/O性能分析器等,可以帮助我们找到应用程序的性能瓶颈和优化方案。以下是一些常用的性能探查器:

  1. CPU性能分析器:可以用于分析CPU使用情况和瓶颈,以及找到CPU密集型代码和方法调用。
  2. 内存性能分析器:可以用于分析内存使用情况和瓶颈,以及找到内存泄漏和大对象分配等问题。
  3. I/O性能分析器:可以用于分析磁盘、网络和数据库等I/O操作的性能瓶颈,以及找到慢查询和瓶颈操作等问题。
  4. GPU性能分析器:可以用于分析图形处理器(GPU)的使用情况和瓶颈,以及找到GPU密集型代码和图形渲染问题。

使用性能探查器需要先启动性能分析器,然后选择相应的性能分析器和分析选项,最后运行应用程序并进行性能分析。性能探查器会生成相应的性能报告和分析结果,以帮助我们找到应用程序的性能瓶颈和优化方案。同时,使用性能探查器需要谨慎,需要根据实际情况来选择合适的性能分析器和选项,并设置相应的参数和选项,以保证性能分析结果的准确性和可靠性。

10个.NET提升效率测试工具和开源框架

9、Postman

Postman 是一个用于构建和使用 API 的 API 平台。Postman 简化了 API 生命周期的每个步骤并简化了协作,因此您可以更快地创建更好的 API。一个接口开发调试的必备工具,可以使用Postman来测试.NET应用程序的API接口,包括GET、POST、PUT、DELETE等请求方法。可以使用Postman的测试脚本来编写自动化测试脚本,以便于进行持续集成和持续交付。最新版本还支持grpc 测试非常给力,是目前我最喜欢的接口开发测试界面必备工具。环境变量,自定义扩展都是大杀器,可以提高测试效率。是我必备工具之一。

10个.NET提升效率测试工具和开源框架

10、JMeter

这是一个开源的Java开发压测工具,可以用于模拟多种协议和场景。但是它作为一个流行的压力测试工具,在测试.NET应用程序的性能和稳定性也必不可少。尤其现在互联网需要高并发,高可用,高性能的场景下面,对每个接口进行压测是必要的。分析测试结果,找到性能瓶颈和优化方案。可以使用JMeter的图表和统计数据来分析测试结果,也可以使用JMeter的性能分析器来分析性能瓶颈和优化方案。

10个.NET提升效率测试工具和开源框架

伙计们,这些压测工具都具有不同的特点和优势,可以根据实际需求和场景来选择。这些工具和框架都非常优秀,可以帮助我们编写高质量的测试代码,并提高测试效率和质量。选择哪个工具和框架,可以根据个人的需求和喜好来决定。欢迎大家在留言区评论,你还有用到那些测试工具,或者使用这些工具碰到的哪些问题。欢迎大家评论,谢谢!

10个.NET提升效率测试工具和开源框架

一张推荐图片,让这个夏天充满安宁

继续阅读