From 5124bd2dc7b0be7028b8d1a63420cc4af03b8a53 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 18 Jul 2025 12:50:12 +0800 Subject: [PATCH 1/4] Add `AbpEfCoreNavigationHelper_Tests`. --- .../AbpEfCoreNavigationHelper_Tests.cs | 65 +++++++++++++++++++ .../AbpEntityFrameworkCoreTestModule.cs | 9 +++ .../TestMigrationsDbContext.cs | 26 ++++++++ .../Volo/Abp/TestApp/Domain/BlogPost.cs | 44 +++++++++++++ .../EntityFrameworkCore/TestAppDbContext.cs | 27 ++++++++ 5 files changed, 171 insertions(+) create mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs create mode 100644 framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/Domain/BlogPost.cs diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs new file mode 100644 index 0000000000..b878920776 --- /dev/null +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.TestApp.Domain; +using Xunit; + +namespace Volo.Abp.EntityFrameworkCore; + +public class AbpEfCoreNavigationHelper_Tests : EntityFrameworkCoreTestBase +{ + private readonly IRepository _blogRepository; + private readonly IRepository _postRepository; + + public AbpEfCoreNavigationHelper_Tests() + { + _blogRepository = GetRequiredService>(); + _postRepository = GetRequiredService>(); + } + + [Fact] + public async Task Performance_Test() + { + var stopWatch = Stopwatch.StartNew(); + + await WithUnitOfWorkAsync(async () => + { + for (var i = 0; i < 5 * 1000; i++) + { + await _blogRepository.InsertAsync( + new Blog(Guid.NewGuid()) + { + Name = "Blog" + i, + BlogPosts = new List + { + new BlogPost + { + Post = new Post(Guid.NewGuid()) + { + Title = "Post" + i + } + } + } + }); + } + }); + + stopWatch.Stop(); + stopWatch.Elapsed.ShouldBeLessThan(TimeSpan.FromSeconds(106)); + + stopWatch.Restart(); + var blogs = await _blogRepository.GetListAsync(includeDetails: true); + var posts = await _postRepository.GetListAsync(includeDetails: true); + blogs.Count.ShouldBe(5 * 1000); + blogs.SelectMany(x => x.BlogPosts.Select(y => y.Post)).Count().ShouldBe(5 * 1000); + posts.Count.ShouldBe(5 * 1000); + posts.SelectMany(x => x.BlogPosts.Select(y => y.Blog)).Count().ShouldBe(5 * 1000); + + stopWatch.Stop(); + stopWatch.Elapsed.ShouldBeLessThan(TimeSpan.FromSeconds(1)); + } +} diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs index e75af9a556..691383643d 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs @@ -53,6 +53,15 @@ public class AbpEntityFrameworkCoreTestModule : AbpModule { opt.DefaultWithDetailsFunc = q => q.Include(p => p.OneToOne).ThenInclude(x => x.OneToOne).Include(p => p.OneToMany).ThenInclude(x => x.OneToMany).Include(p => p.ManyToMany); }); + + options.Entity(opt => + { + opt.DefaultWithDetailsFunc = q => q.Include(p => p.BlogPosts).ThenInclude(bp => bp.Post); + }); + options.Entity(opt => + { + opt.DefaultWithDetailsFunc = q => q.Include(p => p.BlogPosts).ThenInclude(bp => bp.Blog); + }); }); context.Services.AddAbpDbContext(options => diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs index 6841f8d504..aac69f3935 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs @@ -30,6 +30,10 @@ public class TestMigrationsDbContext : AbpDbContext public DbSet AppEntityWithNavigationsForeign { get; set; } + public DbSet Blogs { get; set; } + public DbSet Posts { get; set; } + public DbSet BlogPosts { get; set; } + public TestMigrationsDbContext(DbContextOptions options) : base(options) { @@ -97,5 +101,27 @@ public class TestMigrationsDbContext : AbpDbContext { b.ConfigureByConvention(); }); + + modelBuilder.Entity(b => + { + b.ConfigureByConvention(); + b.HasMany(bp => bp.BlogPosts) + .WithOne(bp => bp.Blog) + .HasForeignKey(bp => bp.BlogId); + }); + + modelBuilder.Entity(b => + { + b.ConfigureByConvention(); + b.HasMany(bp => bp.BlogPosts) + .WithOne(bp => bp.Post) + .HasForeignKey(bp => bp.PostId); + }); + + modelBuilder.Entity(b => + { + b.ConfigureByConvention(); + b.HasKey(p => new { p.BlogId, p.PostId }); + }); } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/Domain/BlogPost.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/Domain/BlogPost.cs new file mode 100644 index 0000000000..e08f7f0c64 --- /dev/null +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/Domain/BlogPost.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Domain.Entities.Auditing; + +namespace Volo.Abp.TestApp.Domain; + +public class Blog : FullAuditedAggregateRoot +{ + public Blog(Guid id) + : base(id) + { + } + + public string Name { get; set; } + + public List BlogPosts { get; set; } +} + +public class Post : FullAuditedAggregateRoot +{ + public Post(Guid id) + : base(id) + { + } + + public string Title { get; set; } + + public List BlogPosts { get; set; } +} + +public class BlogPost : Entity +{ + public Guid BlogId { get; set; } + public Blog Blog { get; set; } + + public Guid PostId { get; set; } + public Post Post { get; set; } + + public override object[] GetKeys() + { + return new object[] { BlogId, PostId }; + } +} diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs index fbbac40844..8791dde46b 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs @@ -1,6 +1,7 @@ using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.Extensions.Logging; using Volo.Abp.DependencyInjection; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; @@ -36,6 +37,10 @@ public class TestAppDbContext : AbpDbContext, IThirdDbContext, public DbSet AppEntityWithNavigationsForeign { get; set; } + public DbSet Blogs { get; set; } + public DbSet Posts { get; set; } + public DbSet BlogPosts { get; set; } + public TestAppDbContext(DbContextOptions options) : base(options) { @@ -123,6 +128,28 @@ public class TestAppDbContext : AbpDbContext, IThirdDbContext, b.ConfigureByConvention(); }); + modelBuilder.Entity(b => + { + b.ConfigureByConvention(); + b.HasMany(bp => bp.BlogPosts) + .WithOne(bp => bp.Blog) + .HasForeignKey(bp => bp.BlogId); + }); + + modelBuilder.Entity(b => + { + b.ConfigureByConvention(); + b.HasMany(bp => bp.BlogPosts) + .WithOne(bp => bp.Post) + .HasForeignKey(bp => bp.PostId); + }); + + modelBuilder.Entity(b => + { + b.ConfigureByConvention(); + b.HasKey(p => new { p.BlogId, p.PostId }); + }); + modelBuilder.TryConfigureObjectExtensions(); } } From a3e2ccc88166b2e00e742d4d00e449be4e58245d Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 18 Jul 2025 13:14:56 +0800 Subject: [PATCH 2/4] Skip performance test on GitHub Actions CI --- .../AbpEfCoreNavigationHelper_Tests.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs index b878920776..4533a66d72 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs @@ -24,6 +24,12 @@ public class AbpEfCoreNavigationHelper_Tests : EntityFrameworkCoreTestBase [Fact] public async Task Performance_Test() { + if (!Environment.GetEnvironmentVariable("GITHUB_ACTIONS").IsNullOrWhiteSpace()) + { + //Skipping this unit test due to insufficient performance on the Github CI machine. + return; + } + var stopWatch = Stopwatch.StartNew(); await WithUnitOfWorkAsync(async () => @@ -49,7 +55,7 @@ public class AbpEfCoreNavigationHelper_Tests : EntityFrameworkCoreTestBase }); stopWatch.Stop(); - stopWatch.Elapsed.ShouldBeLessThan(TimeSpan.FromSeconds(106)); + stopWatch.Elapsed.ShouldBeLessThan(TimeSpan.FromSeconds(10)); stopWatch.Restart(); var blogs = await _blogRepository.GetListAsync(includeDetails: true); From fafb76172f4099c7611dc3179da55e487ece64bf Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 18 Jul 2025 15:42:33 +0800 Subject: [PATCH 3/4] Refactor BlogPost entity and remove Post entity from tests --- .../ChangeTrackers/AbpEntityEntry.cs | 10 +-- .../AbpEfCoreNavigationHelper_Tests.cs | 62 +++++++++++++------ .../AbpEntityFrameworkCoreTestModule.cs | 6 +- .../TestMigrationsDbContext.cs | 10 --- .../Volo/Abp/TestApp/Domain/BlogPost.cs | 19 +----- .../EntityFrameworkCore/TestAppDbContext.cs | 10 --- 6 files changed, 49 insertions(+), 68 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEntityEntry.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEntityEntry.cs index 4b8a531db1..8d597f85b5 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEntityEntry.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEntityEntry.cs @@ -21,10 +21,7 @@ public class AbpEntityEntry { return _isModified || EntityEntry.State == EntityState.Modified || NavigationEntries.Any(n => n.IsModified); } - set - { - _isModified = value; - } + set => _isModified = value; } public AbpEntityEntry(string id, EntityEntry entityEntry) @@ -46,14 +43,11 @@ public class AbpEntityEntry continue; } - var navigation = EntityEntry.Navigations.FirstOrDefault(n => n.Metadata.Name == navigationEntry.Name); - - var currentValue = AbpNavigationEntry.GetOriginalValue(navigation?.CurrentValue); + var currentValue = AbpNavigationEntry.GetOriginalValue(navigationEntry.NavigationEntry.CurrentValue); if (currentValue == null) { continue; } - switch (navigationEntry.OriginalValue) { case null: diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs index 4533a66d72..c1ff65b76b 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs @@ -1,7 +1,7 @@ using System; -using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Shouldly; using Volo.Abp.Domain.Repositories; @@ -13,12 +13,10 @@ namespace Volo.Abp.EntityFrameworkCore; public class AbpEfCoreNavigationHelper_Tests : EntityFrameworkCoreTestBase { private readonly IRepository _blogRepository; - private readonly IRepository _postRepository; public AbpEfCoreNavigationHelper_Tests() { _blogRepository = GetRequiredService>(); - _postRepository = GetRequiredService>(); } [Fact] @@ -30,8 +28,12 @@ public class AbpEfCoreNavigationHelper_Tests : EntityFrameworkCoreTestBase return; } - var stopWatch = Stopwatch.StartNew(); + //These time taken varies on different machines. + //I used relatively large values, but it can also check for performance problem. + var batchUpdateTime = TimeSpan.FromSeconds(30); + var queryTime = TimeSpan.FromSeconds(10); + var stopWatch = Stopwatch.StartNew(); await WithUnitOfWorkAsync(async () => { for (var i = 0; i < 5 * 1000; i++) @@ -40,32 +42,54 @@ public class AbpEfCoreNavigationHelper_Tests : EntityFrameworkCoreTestBase new Blog(Guid.NewGuid()) { Name = "Blog" + i, - BlogPosts = new List - { - new BlogPost + BlogPosts = + [ + new BlogPost(Guid.NewGuid()) { - Post = new Post(Guid.NewGuid()) - { - Title = "Post" + i - } + Title = "Post" + i } - } + ] }); } }); - stopWatch.Stop(); - stopWatch.Elapsed.ShouldBeLessThan(TimeSpan.FromSeconds(10)); + stopWatch.Elapsed.ShouldBeLessThan(batchUpdateTime); + stopWatch.Restart(); var blogs = await _blogRepository.GetListAsync(includeDetails: true); - var posts = await _postRepository.GetListAsync(includeDetails: true); blogs.Count.ShouldBe(5 * 1000); - blogs.SelectMany(x => x.BlogPosts.Select(y => y.Post)).Count().ShouldBe(5 * 1000); - posts.Count.ShouldBe(5 * 1000); - posts.SelectMany(x => x.BlogPosts.Select(y => y.Blog)).Count().ShouldBe(5 * 1000); + blogs.SelectMany(x => x.BlogPosts).Count().ShouldBe(5 * 1000); + stopWatch.Stop(); + stopWatch.Elapsed.ShouldBeLessThan(queryTime); + + var blogId = blogs.First().Id; + stopWatch.Restart(); + await WithUnitOfWorkAsync(async () => + { + var blog = await _blogRepository.GetAsync(blogId); + blog.ShouldNotBeNull(); + for (var i = 0; i < 5 * 1000; i++) + { + blog.BlogPosts.Add( + new BlogPost(Guid.NewGuid()) + { + Title = "NewPost" + i + }); + } + await _blogRepository.UpdateAsync(blog); + }); + stopWatch.Stop(); + stopWatch.Elapsed.ShouldBeLessThan(batchUpdateTime); + + + var cancellationTokenSource = new CancellationTokenSource(); + cancellationTokenSource.CancelAfter(batchUpdateTime); + stopWatch.Restart(); + var blog = await _blogRepository.GetAsync(blogId, cancellationToken: cancellationTokenSource.Token); + blog.BlogPosts.Count.ShouldBe(5 * 1000 + 1); stopWatch.Stop(); - stopWatch.Elapsed.ShouldBeLessThan(TimeSpan.FromSeconds(1)); + stopWatch.Elapsed.ShouldBeLessThan(queryTime); } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs index 691383643d..22c0b92477 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreTestModule.cs @@ -56,11 +56,7 @@ public class AbpEntityFrameworkCoreTestModule : AbpModule options.Entity(opt => { - opt.DefaultWithDetailsFunc = q => q.Include(p => p.BlogPosts).ThenInclude(bp => bp.Post); - }); - options.Entity(opt => - { - opt.DefaultWithDetailsFunc = q => q.Include(p => p.BlogPosts).ThenInclude(bp => bp.Blog); + opt.DefaultWithDetailsFunc = q => q.Include(p => p.BlogPosts); }); }); diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs index aac69f3935..d05e367ff7 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs @@ -31,7 +31,6 @@ public class TestMigrationsDbContext : AbpDbContext public DbSet AppEntityWithNavigationsForeign { get; set; } public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } public DbSet BlogPosts { get; set; } public TestMigrationsDbContext(DbContextOptions options) @@ -110,18 +109,9 @@ public class TestMigrationsDbContext : AbpDbContext .HasForeignKey(bp => bp.BlogId); }); - modelBuilder.Entity(b => - { - b.ConfigureByConvention(); - b.HasMany(bp => bp.BlogPosts) - .WithOne(bp => bp.Post) - .HasForeignKey(bp => bp.PostId); - }); - modelBuilder.Entity(b => { b.ConfigureByConvention(); - b.HasKey(p => new { p.BlogId, p.PostId }); }); } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/Domain/BlogPost.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/Domain/BlogPost.cs index e08f7f0c64..9ef826176b 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/Domain/BlogPost.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/Domain/BlogPost.cs @@ -17,28 +17,15 @@ public class Blog : FullAuditedAggregateRoot public List BlogPosts { get; set; } } -public class Post : FullAuditedAggregateRoot +public class BlogPost : Entity { - public Post(Guid id) + public BlogPost(Guid id) : base(id) { } - public string Title { get; set; } - - public List BlogPosts { get; set; } -} - -public class BlogPost : Entity -{ public Guid BlogId { get; set; } public Blog Blog { get; set; } - public Guid PostId { get; set; } - public Post Post { get; set; } - - public override object[] GetKeys() - { - return new object[] { BlogId, PostId }; - } + public string Title { get; set; } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs index 8791dde46b..242809bf7c 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs @@ -38,7 +38,6 @@ public class TestAppDbContext : AbpDbContext, IThirdDbContext, public DbSet AppEntityWithNavigationsForeign { get; set; } public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } public DbSet BlogPosts { get; set; } public TestAppDbContext(DbContextOptions options) @@ -136,18 +135,9 @@ public class TestAppDbContext : AbpDbContext, IThirdDbContext, .HasForeignKey(bp => bp.BlogId); }); - modelBuilder.Entity(b => - { - b.ConfigureByConvention(); - b.HasMany(bp => bp.BlogPosts) - .WithOne(bp => bp.Post) - .HasForeignKey(bp => bp.PostId); - }); - modelBuilder.Entity(b => { b.ConfigureByConvention(); - b.HasKey(p => new { p.BlogId, p.PostId }); }); modelBuilder.TryConfigureObjectExtensions(); From 41afa537d8536157ddb541619807573a65650e16 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 18 Jul 2025 16:33:35 +0800 Subject: [PATCH 4/4] Adjust performance test thresholds for GitHub Actions --- .../AbpEfCoreNavigationHelper_Tests.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs index c1ff65b76b..578bc94417 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/AbpEfCoreNavigationHelper_Tests.cs @@ -22,17 +22,18 @@ public class AbpEfCoreNavigationHelper_Tests : EntityFrameworkCoreTestBase [Fact] public async Task Performance_Test() { - if (!Environment.GetEnvironmentVariable("GITHUB_ACTIONS").IsNullOrWhiteSpace()) - { - //Skipping this unit test due to insufficient performance on the Github CI machine. - return; - } - //These time taken varies on different machines. //I used relatively large values, but it can also check for performance problem. var batchUpdateTime = TimeSpan.FromSeconds(30); var queryTime = TimeSpan.FromSeconds(10); + if (!Environment.GetEnvironmentVariable("GITHUB_ACTIONS").IsNullOrWhiteSpace()) + { + batchUpdateTime = batchUpdateTime * 6; + queryTime = queryTime * 6; + } + + var stopWatch = Stopwatch.StartNew(); await WithUnitOfWorkAsync(async () => {