2013-02-20 15 views
10

के बजाय इकाई परीक्षण मामलों को चलाने के लिए VSTest का उपयोग करना मेरे पास एक TFS2010 सर्वर पर एक x64 प्लेटफ़ॉर्म सी # समाधान (VS2012) है। मैंने इस समाधान के लिए एक यूनिट टेस्ट प्रोजेक्ट (x64) संलग्न किया है और एक बिल्ड परिभाषा बनाई है। जब मैं निर्माण को कतार में डालता हूं, तो यह सफल होता है लेकिन इकाई परीक्षण के मामलों को निष्पादित नहीं किया जाएगा। ऐसा इसलिए है क्योंकि एमएसटीएस्ट 32 बिट एप्लीकेशन है। इसलिए, मैंने एमएसटीएस्ट के बजाय VSTest (VSTest.console.exe) को आमंत्रित करने के लिए डिफ़ॉल्ट निर्माण प्रक्रिया टेम्पलेट (DefaultTemplate.xaml) को कस्टमाइज़ करने का निर्णय लिया। यह काफी जटिल है और मैं VSTest के लिए टूलबॉक्स में बिल्ड गतिविधि जोड़ने में असमर्थ हूं।एमएसटीएस्ट

क्या किसी ने इस तरह के अनुकूलन किया है? मैंने अन्य दृष्टिकोणों को भी कॉन्फ़िगर किया है जैसे .unsettings फ़ाइल को कॉन्फ़िगर करना। क्या हमारे पास एक VSTest एडाप्टर इंटरफ़ेस है जिसे .runsettings फ़ाइल में जोड़ा जा सकता है?

उत्तर

15

वीएसटीएस्ट के माध्यम से इकाई परीक्षण निष्पादित करना और एमएसटीएस्ट के माध्यम से परीक्षण परिणामों को प्रकाशित करने से मुझे एक सफल परिणाम मिला।

# Get the UnitTest Binaries 
$files = Get-ChildItem $TestAssembliesDir\*est*.dll 

# VSTest.console.exe path 
$VSTestPath = 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe' 

# MSTest path 
$MSTestpath = "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe" 
# Loop through the test assemblies and add them to the VSTestFiles 

$VSTestFiles = '' 
foreach($file in $files) 
{ 
    $VSTestFiles += "`"$file`"" 
    $VSTestFiles += " " 
} 

# Run the UnitTests using VSTest 
&$VSTestPath $vstestplatform "/Framework:Framework45" "/InIsolation" $VSTestFiles "/logger:trx" 

# Get TRX files 
$TrxFilesList = Get-ChildItem $TestResDir\*.trx 
$TrxFiles = '' 
$loop = 1 
foreach($file in $TrxFilesList) 
{ 
    $TrxFiles = "$file" 
    # copy the trx file into a space-less named trx 
    $newTrxFileName = "$BuildUri" + "_" + "$loop" + ".trx" 

    copy-item $TrxFiles -destination $TestResDir\$newTrxFileName 

    $loop = $loop + 1 
    $newTrxFile += "$TestResDir\$newTrxFileName" 
    $newTrxFile += " " 
} 

# specify MSTest arguments 
$mspubl = "/publish:"+$TeamProjColUri 
$msteampr = "/teamproject:" + $TeamProj 
$mspublbuild = "/publishbuild:" +$BuildUri 
$mspubresfile = "/publishresultsfile:" +"`"$newTrxFile`"" 
#Publish test results through MSTest 
&$MSTestpath $mstestplatform $flavor $mspubl $msteampr $mspublbuild $mspubresfile 
+0

ग्रेट। विशेष रूप से जेनरेट की गई ट्रिक्स फ़ाइल खोजने के लिए हिस्सा। धन्यवाद। – paulroho

+0

'$ MSTestpath' क्यों घोषित किया गया है और कभी भी उपयोग नहीं किया जाता है? '$ TestResDir' कहां घोषित किया गया है और यह किस पर सेट है? –

0

यह सीधे आपको प्रश्न का उत्तर नहीं देता है, लेकिन इससे मदद मिल सकती है। मैंने टीमसिटी के लिए भी यही काम किया। मैंने vstest.console.exe को कॉल करने के लिए कमांड लाइन का उपयोग किया और एक .runsettings फ़ाइल बनाई।

मैंने रनेटिंग फ़ाइल के लिए इस Microsoft template का उपयोग किया। ध्यान दें कि मेरी मशीन पर, लाइन 5 में टिप्पणी में उल्लिखित पथ .runsettings स्थान से संबंधित है, न कि .sln।

यदि आप/logger: vstest.console.exe का trx विकल्प का उपयोग करते हैं, तो यह एमएसटीएस्ट (परिणाम विज़ुअलाइजेशन के लिए अच्छा) के समान प्रारूप में आउटपुट उत्पन्न करेगा।

4

मुझे TFS2010 निर्माण प्रक्रिया के लिए MSTest.exe के बजाय VSTest.Console.exe का उपयोग करने की सटीक आवश्यकता है जो VFS2012/.NET 4.5 x64 अनुप्रयोग को संकलित करता है, जबकि TFS2012 को अपग्रेड करने के लिए अपग्रेड की प्रतीक्षा करता है।

मैंने जो दृष्टिकोण लिया है, वह बिल्ड स्क्रिप्ट XAML को संपादित करना था, यूनिट परीक्षणों के लिए मौजूदा वर्कफ़्लो को हटा दिया गया था और इसे एक वर्धित वर्कफ़्लो के साथ बदल दिया गया था जो VSTest.Console.exe पैरामीटर बनाता है और फिर VSTest.Console.exe को निष्पादित करता है InvokeProcess। मैंने तब सुनिश्चित किया कि आखिरकार ब्लॉक में परीक्षण परिणाम के बावजूद कि हम बिल्ड सर्वर पर VS2012 स्थापना से MSTest.exe का उपयोग कर परीक्षण परिणामों और कोड कवरेज को TFS में प्रकाशित करते हैं।

दुर्भाग्यवश मैं एक्सएएमएल को उत्तर में पोस्ट नहीं कर सकता क्योंकि यह वर्ण की लंबाई से अधिक है, लेकिन मेरे पास एक टेक्स्ट फ़ाइल है जिसमें स्निपेट को डिफ़ॉल्ट टेम्पलेट.एक्सएएमएल में प्रतिस्थापित किया जाना है और इसे किसके साथ बदलना है। फ़ाइल here मिल सकती है। कृपया ध्यान दें कि यद्यपि यह दृष्टिकोण काम करता है यह एक हैक है।

एक और विकल्प एमएसटीएस्ट या वीएसटीएस्ट के बजाय एनयूनीट का उपयोग करना होगा। इस समर्थन के रूप में 64-बिट बाइनरी। यह article बताता है कि TFS2010 बिल्ड स्क्रिप्ट में NUnit को कैसे एकीकृत किया जाए, और ऐसा करने के लिए आवश्यक टूल और संसाधनों के लिंक हैं। एनयूनीट के साथ एकमात्र मुद्दे कोड कवरेज (अभी तक एक और टूल की आवश्यकता है, इन परिणामों को टीएफएस में कैसे प्रकाशित करें) और एमएसटीएस्ट-स्टाइल एकीकरण परीक्षण जैसे डिप्लॉयमेंट इटैम और टेस्टकॉन्टेक्स्ट जैसे गुणों का उपयोग करके परीक्षण करें, यही कारण है कि मैं कहां काम करता हूं VSTest.Console.exe दृष्टिकोण।

और जो मैंने पढ़ा है उससे TFS2012 बिल्ड स्क्रिप्ट से VSTest.Console.exe को आसान एकीकरण प्रदान करता है, इसलिए यदि आप कभी भी TFS2012 में अपग्रेड करते हैं तो VSTest.Console.exe हैक जिसे मैंने दस्तावेज किया है, की आवश्यकता नहीं हो सकती है।

+0

मैं खोज की है परीक्षण श्रेणियों को निर्दिष्ट है, खासकर जब आप एक विशेष परीक्षण वर्ग से संबंधित परीक्षण अनदेखी करने के लिए परीक्षा निष्पादन स्थापित करना चाहते हैं के साथ एक समस्या यह है कि: नीचे दिए गए PowerShell स्क्रिप्ट है। मैंने टेस्टकेसफिल्टर नामक एक्सएएमएल बनाने और VSTest.Console सेट करने के लिए एक नया तर्क जोड़कर इसे पार कर लिया।EXE का TestCaseFilter पैरामीटर यदि बिल्ड परिभाषा का TestCaseFilter तर्क निर्दिष्ट किया गया है। Misc के तहत बिल्ड परिभाषा में, आप टेस्टकेसफिल्टर को जो कुछ भी चाहते हैं उसे सेट कर सकते हैं, मेरे मामले में "TestCategory! = IntegrationTest" –

+0

धन्यवाद बहुत सारे कोस्टा :) मैं इकाई परीक्षण के लिए सबसे कम निष्पादन भाग करने में सक्षम था एक शक्तिशक्ति लिपि के माध्यम से मामलों। लेकिन मुझे परिणाम प्रकाशित करने में कुछ समस्याएं आ रही हैं। इसके लिए आपके समाधान के माध्यम से जाओ। एक बार फिर धन्यवाद! – Arkanoid

+0

हैलो @ अर्कनोइड, आपको अपनी पावरशेल स्क्रिप्ट को फेंकने की आवश्यकता नहीं हो सकती है, जैसा कि मैं एकत्र कर रहा हूं, वैसे ही यह वही काम करेगा जैसा मैंने सीधे एक्सएएमएल में किया है। जब तक आपकी PowerShell स्क्रिप्ट में आपको एक TRX फ़ाइल उत्पन्न करने के लिए VSTest.Console.exe मिलता है तो आप उस TRX फ़ाइल को TFS में प्रकाशित करने के लिए MSTest.exe को कॉल कर सकते हैं, और MSTest.exe को कॉल VSTest.Console के बावजूद बनाया गया है .exe सफल था। –

संबंधित मुद्दे