เซิร์ฟเวอร์ Azure DevOps: เหตุใดขั้นตอนการทดสอบ Visual Studio จึงใช้เวลานานมากในการรันการทดสอบหน่วย

ในระบบบิลด์ Azure DevOps Server ที่ติดตั้งในสถานที่ ฉันมี สร้างไปป์ไลน์ด้วย ภาพ ขั้นตอนการทดสอบสตูดิโอ ขั้นตอนได้รับการกำหนดค่าให้ค้นหาและเรียกใช้การทดสอบหน่วย XUnit ใน DLL

ขั้นตอนถูกกำหนดผ่าน GUI นี่คือคุณสมบัติของมัน:

Version: 2.*
Select tests using: Test assemblies
Test files:
    **\*test*.dll
    !**\*TestAdapter.dll
    !**\obj\**
Search folder: $(System.DefaultWorkingDirectory)
Select test platform using: Version
Test platform version: Latest

ขั้นตอนดำเนินการและผ่านสำเร็จ โดยระบุการทดสอบ 18 รายการ อย่างไรก็ตาม การทำเช่นนั้นใช้เวลานานเกินสมควร: ~51 วินาที

บันทึกการเรียกใช้แสดงว่าใช้เวลาประมาณ 40 วินาทีก่อนที่จะเปิดตัว vstest.console.exe ซึ่งดูเหมือนว่าจะไม่ทำอะไรเลย โปรดดูบรรทัดนี้ในบันทึกฉบับเต็มด้านล่าง:

2019-09-23T07:11:35.7961563Z ========================================================

คำถามของฉัน - เหตุใดขั้นตอนการทดสอบ Visual Studio จึงใช้เวลานานมาก จะทำอย่างไรให้เสียเวลาน้อยลง?

อัปเดต 1: จากการทดลอง ฉันได้สร้าง repo git ใหม่ที่มีเฉพาะ (~100) DLL ที่โซลูชันของฉันสร้างขึ้น ฉันสร้างไปป์ไลน์ใหม่ที่ดึง DLL เหล่านี้เท่านั้นและรันการทดสอบหน่วย เมื่อฉันวิ่งสิ่งนี้มันวิ่งเร็วขึ้นมาก โดยเฉพาะสองบรรทัดในบันทึกที่เดิมใช้เวลา 40 วินาที ตอนนี้ใช้เวลาน้อยกว่าหนึ่งวินาที

อัปเดต 2: ฉันพยายามเร่งความเร็วโดยการระบุเส้นทางแบบเต็มไปยังการทดสอบ DLL และลบรูปแบบ ** ทั้งหมดออกจากคุณสมบัติ 'ไฟล์ทดสอบ' ขั้นตอนยังคงเดินช้าเช่นเดิม


2019-09-23T07:11:32.4121152Z ##[section]Starting: run unit tests
2019-09-23T07:11:32.4135871Z ==============================================================================
2019-09-23T07:11:32.4136477Z Task         : Visual Studio Test
2019-09-23T07:11:32.4136755Z Description  : Run unit and functional tests (Selenium, Appium, Coded UI test, etc.) using the Visual Studio Test (VsTest) runner. Test frameworks that have a Visual Studio test adapter such as MsTest, xUnit, NUnit, Chutzpah (for JavaScript tests using QUnit, Mocha and Jasmine), etc. can be run. Tests can be distributed on multiple agents using this task (version 2).
2019-09-23T07:11:32.4137066Z Version      : 2.143.8
2019-09-23T07:11:32.4137295Z Author       : Microsoft Corporation
2019-09-23T07:11:32.4137526Z Help         : [More information](https://go.microsoft.com/fwlink/?LinkId=835764)
2019-09-23T07:11:32.4138042Z ==============================================================================
2019-09-23T07:11:35.0894195Z SystemVssConnection exists true
2019-09-23T07:11:35.0937440Z SystemVssConnection exists true
2019-09-23T07:11:35.2406351Z Running tests using vstest.console.exe runner.
2019-09-23T07:11:35.2407337Z ======================================================
2019-09-23T07:11:35.2408408Z Test selector : Test assemblies
2019-09-23T07:11:35.2409125Z Test filter criteria : null
2019-09-23T07:11:35.2409694Z Search folder : C:\pool\_work\238\s
2019-09-23T07:11:35.2412135Z VisualStudio version selected for test execution : latest
2019-09-23T07:11:35.2758339Z Run in parallel : false
2019-09-23T07:11:35.2810059Z Run in isolation : false
2019-09-23T07:11:35.2813902Z Path to custom adapters : null
2019-09-23T07:11:35.2831140Z Other console options : null
2019-09-23T07:11:35.2883526Z Code coverage enabled : false
2019-09-23T07:11:35.2884892Z Diagnostics enabled : false
2019-09-23T07:11:35.2937817Z SystemVssConnection exists true
2019-09-23T07:11:35.3039161Z Run the tests locally using vstest.console.exe
2019-09-23T07:11:35.3040102Z ========================================================
2019-09-23T07:11:35.3075806Z Test selector : Test assemblies
2019-09-23T07:11:35.3094635Z Test assemblies : **\*test*.dll,!**\*TestAdapter.dll,!**\obj\**
2019-09-23T07:11:35.3095999Z Test filter criteria : null
2019-09-23T07:11:35.3114780Z Search folder : C:\pool\_work\238\s
2019-09-23T07:11:35.3125782Z Run settings file : C:\pool\_work\238\s
2019-09-23T07:11:35.3144368Z Run in parallel : false
2019-09-23T07:11:35.3158394Z Run in isolation : false
2019-09-23T07:11:35.3243577Z Path to custom adapters : null
2019-09-23T07:11:35.3244967Z Other console options : null
2019-09-23T07:11:35.3269743Z Code coverage enabled : false
2019-09-23T07:11:35.3273300Z Diagnostics enabled : false
2019-09-23T07:11:35.3286973Z Rerun failed tests: false
2019-09-23T07:11:35.3308152Z VisualStudio version selected for test execution : latest
2019-09-23T07:11:35.7961563Z ========================================================
2019-09-23T07:11:50.3641983Z ======================================================
2019-09-23T07:12:16.2956956Z [command]"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" @C:\pool\_work\_temp\60ff2cb1-ddd1-11e9-a3ed-db0a48eb3ef5.txt
2019-09-23T07:12:16.9940929Z Microsoft (R) Test Execution Command Line Tool Version 15.9.0
2019-09-23T07:12:16.9941829Z Copyright (c) Microsoft Corporation.  All rights reserved.
2019-09-23T07:12:16.9942101Z 
2019-09-23T07:12:16.9942399Z vstest.console.exe 
2019-09-23T07:12:16.9942679Z "C:\pool\_work\238\s\REDACTED\bin\Release\REDACTED.Tests.dll"
2019-09-23T07:12:16.9942954Z /logger:"trx"
2019-09-23T07:12:16.9943238Z /TestAdapterPath:"C:\pool\_work\238\s"
2019-09-23T07:12:17.6998070Z Starting test execution, please wait...
2019-09-23T07:12:20.5147395Z [xUnit.net 00:00:00.6296658]   Discovering: REDACTED.Tests
2019-09-23T07:12:20.6880418Z [xUnit.net 00:00:00.8113825]   Discovered:  REDACTED.Tests
2019-09-23T07:12:20.6955571Z [xUnit.net 00:00:00.8192449]   Starting:    REDACTED.Tests
2019-09-23T07:12:21.9022641Z Passed   REDACTED 1
2019-09-23T07:12:21.9024375Z Passed   REDACTED 2
2019-09-23T07:12:21.9024811Z Passed   REDACTED 3
2019-09-23T07:12:21.9025086Z Passed   REDACTED 4
2019-09-23T07:12:21.9025460Z Passed   REDACTED 5
2019-09-23T07:12:21.9026429Z Passed   REDACTED 6
2019-09-23T07:12:21.9027211Z Passed   REDACTED 7
2019-09-23T07:12:21.9027581Z Passed   REDACTED 8
2019-09-23T07:12:21.9027938Z Passed   REDACTED 9
2019-09-23T07:12:21.9028266Z [xUnit.net 00:00:01.9910390]   Finished:    REDACTED.Tests
2019-09-23T07:12:22.3918748Z Passed   REDACTED 10
2019-09-23T07:12:22.3920336Z Passed   REDACTED 11
2019-09-23T07:12:22.3920912Z Passed   REDACTED 12
2019-09-23T07:12:22.3922185Z Passed   REDACTED 13
2019-09-23T07:12:22.3923090Z Passed   REDACTED 14
2019-09-23T07:12:22.3925098Z Passed   REDACTED 15
2019-09-23T07:12:22.3926473Z Passed   REDACTED 16
2019-09-23T07:12:22.3928334Z Passed   REDACTED 17
2019-09-23T07:12:22.3930288Z Passed   REDACTED 18
2019-09-23T07:12:22.4707999Z Results File: C:\pool\_work\238\s\TestResults\REDACTED_2019-09-23_10_12_21.trx
2019-09-23T07:12:22.4743977Z 
2019-09-23T07:12:22.4746692Z Total tests: 18. Passed: 18. Failed: 0. Skipped: 0.
2019-09-23T07:12:22.4748446Z Test Run Successful.
2019-09-23T07:12:22.4764305Z Test execution time: 2.7962 Seconds
2019-09-23T07:12:23.0702219Z ##[section]Async Command Start: Publish test results
2019-09-23T07:12:23.3336706Z Publishing test results to test run '432'
2019-09-23T07:12:23.3338983Z Test results remaining: 18. Test run id: 432
2019-09-23T07:12:24.1461381Z Published Test Run : http://REDACTED/Runs#runId=432&_a=runCharts
2019-09-23T07:12:24.1474239Z ##[section]Async Command End: Publish test results
2019-09-23T07:12:24.1476508Z ##[section]Finishing: run unit tests

comment
แต่ละครั้งใช้เวลาประมาณ 40 วินาทีใช่ไหม?   -  person Levi Lu-MSFT    schedule 24.09.2019
comment
@levi-lu-msft ขอบคุณมากครับ ใช่ ใช้เวลาเท่ากันในการวิ่งทุกครั้ง นอกจากนี้ฉันเพิ่งเพิ่ม UPDATE ให้กับคำถาม   -  person urig    schedule 25.09.2019
comment
คุณสามารถเปิด system.debug เพื่อตรวจสอบรายละเอียดเกี่ยวกับสิ่งที่ vstest กำลังทำอยู่จริง ดูเหมือนว่าการค้นหา test.dll กับตัวกรองแหล่งที่มาจะระงับการดำเนินการ คุณสามารถลองจำกัดโฟลเดอร์การค้นหาให้แคบลงเหลือโฟลเดอร์ bin/release หรือระบุตำแหน่งไฟล์ dll ทดสอบโดยละเอียดเพื่อประหยัดเวลา เช่น.$(System.DefaultWorkingDirectory)\**\$(BuildConfiguration)\*Test*.dll   -  person Levi Lu-MSFT    schedule 26.09.2019
comment
@LeviLu-MSFT ขอบคุณ โปรดดูการอัปเดต 2 ของฉัน ฉันลบรูปแบบ ** และแทนที่ด้วยเส้นทางที่แน่นอนเพื่อทดสอบ DLL ยังคงวิ่งช้าอยู่ ตอนนี้จะพยายามเปิดใช้งานบันทึกการแก้ไขข้อบกพร่องและจะรายงานกลับ   -  person urig    schedule 26.09.2019
comment
ฉันเห็นว่าคุณทำการทดสอบเหล่านี้กับตัวแทนที่โฮสต์เอง คุณสามารถลองเรียกใช้การทดสอบเหล่านี้บนตัวแทนอื่นหรือตัวแทนที่โฮสต์โดย Microsoft เพื่อตรวจสอบว่ามีสาเหตุมาจากประสิทธิภาพต่ำของตัวแทนของคุณหรือไม่   -  person Levi Lu-MSFT    schedule 27.09.2019


คำตอบ (1)


สาเหตุที่แท้จริงคือมีไฟล์มากกว่า 100,000 ไฟล์สำหรับขั้นตอน Visual Studio ที่จะสแกนหาการทดสอบใน Search folder

เพื่อแก้ไขปัญหา ฉันชี้โฟลเดอร์ค้นหาไปยังโฟลเดอร์ bin ที่เฉพาะเจาะจงมากขึ้นที่ด้านล่างของแผนผังโฟลเดอร์ ซึ่งช่วยลดจำนวนไฟล์ที่สแกน และลดระยะเวลาการทำงานโดยรวมสำหรับขั้นตอนนี้ลงอย่างมาก

person urig    schedule 03.10.2019