【发布时间】:2020-07-05 13:32:11
【问题描述】:
在我的 azure devops 管道(托管)中,我看到测试任务超时。
对应的yaml是
- task: DotNetCoreCLI@2
displayName: 'dotnet test'
inputs:
command: test
projects: '**/*.sln'
arguments: '-v n /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:ParallelizeTestCollections=false'
使用 dotnet core 或 .Net Framework 执行测试时会发生超时。 (他们有两个目标框架)。
如果我在本地运行测试,它们会在几秒钟内完成(也在 DevOps-Server 上的 .Net-Framework 上)
我认为这是测试中的一个死锁,但我找不到任何提示如何分析这个死锁。
是否有可能在超时发生时获取测试进程的内存转储? 我在 Azure 上尝试了调试标志,但这并没有输出任何对我有帮助的东西。
这些是任务日志中的最后几行:
Test run for d:\a\1\s\MyCompany.Searching.Tests\bin\Debug\netcoreapp3.1\win7-x64\MyCompany.Searching.Tests.dll(.NETCoreApp,Version=v3.1)
Microsoft (R) Test Execution Command Line Tool Version 16.6.0
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.4.2+2d84eb3141 (64-bit .NET Core 3.1.5)
[xUnit.net 00:00:01.14] Discovering: MyCompany.Searching.Tests
[xUnit.net 00:00:01.50] Discovered: MyCompany.Searching.Tests
[xUnit.net 00:00:01.50] MyCompany.Searching.Tests: Skipping test case with duplicate ID '7b88604fa90df0e95e130fc06b3acd3a8c4f9267' ('MyCompany.Searching.Tests.Fields.DateAndTimeTest.TestMatch(search: "30.09.2018", expected: ["1", "2", "3"])' and 'MyCompany.Searching.Tests.Fields.DateAndTimeTest.TestMatch(search: "30.09.2018", expected: ["1", "2", "3"])')
[xUnit.net 00:00:01.50] MyCompany.Searching.Tests: Skipping test case with duplicate ID '7b88604fa90df0e95e130fc06b3acd3a8c4f9267' ('MyCompany.Searching.Tests.Fields.DateAndTimeTest.TestMatch(search: "30.09.2018", expected: ["1", "2", "3"])' and 'MyCompany.Searching.Tests.Fields.DateAndTimeTest.TestMatch(search: "30.09.2018", expected: ["1", "2", "3"])')
[xUnit.net 00:00:01.50] MyCompany.Searching.Tests: Skipping test case with duplicate ID 'e5a229256a7d594e50105659370af9bc179b7fc4' ('MyCompany.Searching.Tests.Fields.GermanFullTextTest.TestStringMatchWords(search: "grosse Leuchte", expectedWords: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...], expectedNgrams: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...])' and 'MyCompany.Searching.Tests.Fields.GermanFullTextTest.TestStringMatchWords(search: "grosse Leuchte", expectedWords: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...], expectedNgrams: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...])')
[xUnit.net 00:00:01.50] MyCompany.Searching.Tests: Skipping test case with duplicate ID 'ef6d0e06fe061293ddaa576122e2a955dc41fa84' ('MyCompany.Searching.Tests.Fields.GermanFullTextTest.TestStringMatchWords(search: "grosse Klasse", expectedWords: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...], expectedNgrams: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...])' and 'MyCompany.Searching.Tests.Fields.GermanFullTextTest.TestStringMatchWords(search: "grosse Klasse", expectedWords: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...], expectedNgrams: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...])')
[xUnit.net 00:00:01.50] MyCompany.Searching.Tests: Skipping test case with duplicate ID '6f439b06f22861b65ffde3549b020d4aec3e5e42' ('MyCompany.Searching.Tests.Fields.GermanFullTextTest.TestStringMatchNgrams(search: "grosse Leuchte", expectedWords: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...], expectedNgrams: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...])' and 'MyCompany.Searching.Tests.Fields.GermanFullTextTest.TestStringMatchNgrams(search: "grosse Leuchte", expectedWords: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...], expectedNgrams: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...])')
[xUnit.net 00:00:01.50] MyCompany.Searching.Tests: Skipping test case with duplicate ID 'a98581450c7a4b65735e16fbddfea5fc3dfa4fca' ('MyCompany.Searching.Tests.Fields.GermanFullTextTest.TestStringMatchNgrams(search: "grosse Klasse", expectedWords: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...], expectedNgrams: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...])' and 'MyCompany.Searching.Tests.Fields.GermanFullTextTest.TestStringMatchNgrams(search: "grosse Klasse", expectedWords: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...], expectedNgrams: ["Eine kleine oder große Feuchtraumleuchte im Keller"..., "Eine Raumleuchte für kleine oder große Kellerräume"...])')
[xUnit.net 00:00:01.50] Starting: MyCompany.Searching.Tests
Attempting to cancel the build...
Attempting to cancel the build...
##[error]The task has timed out.
Finishing: dotnet test
作为一种解决方法,我将[Collection("Searching")] 添加到我的所有测试类中。现在它正在运行。
在我看来,这不是一个解决方案。我想在本地和服务器上并行执行测试。
如果我的代码中存在多线程错误,我想找到并修复它。
另一方面,也可以禁用服务器上所有测试的并行执行。但是 yaml 中的 /p:ParallelizeTestCollections=false 并没有这样做。
【问题讨论】:
-
您是否尝试使用调试标志运行管道并检查其他信息?
-
是的,我试过了。我没有找到任何可能相关的信息。你有什么可能有帮助的提示吗?
-
今天它在 .Net Framework 测试中失败了。所以这个问题不仅限于.Net Core xUnit。
-
@Martin Demberger 您可以将解决方法转换为答案,这对遇到相同问题的其他成员会有所帮助。这应该是测试代码的问题
标签: c# unit-testing azure-devops azure-pipelines xunit