জেনকিন্স থেকে আপনি কীভাবে নুনিট পরীক্ষা চালাবেন?


108

আমি একটি সি # অ্যাপ্লিকেশনটির জন্য অটোমেটেড নুনিট পরীক্ষা চালাতে চাইছি, রাত্রে এবং প্রতিটি এসএনএন-তে প্রতিশ্রুতিবদ্ধ।

জেনকিনস-সিআই এটি কি এমন কিছু করতে পারে?
কোনও অনলাইন টিউটোরিয়াল আছে বা কীভাবে ডকুমেন্ট করতে হবে যা কোন দস্তাবেজের অনুরূপ সেটআপটি আমি দেখতে পারি?


আপনি খুঁজছেন অন্য কিছু আছে?
jglouie

1
আমি একটি অনুরূপ সেটআপ সহ একটি টিউটোরিয়াল বা কীভাবে নথির সন্ধান করছি।
ব্লুবেরিফিল্ডস

1
আপনি কি কমান্ডলাইন থেকে চান হিসাবে পরীক্ষা পরীক্ষা চলছে? যদি তা না হয় তবে এই পদক্ষেপটি 1
jglouie

উত্তর:


120

আপনার যা করা ঠিক তা করা আমার দরকার ছিল, জেনকিন্সকে এটি করার জন্য আমি কীভাবে সেটআপ করেছি:

  1. জেনকিন্সে নুনিট প্লাগইন যুক্ত করুন
  2. আপনার প্রকল্পে কনফিগার করুন -> বিল্ড -> একটি বিল্ড পদক্ষেপ যুক্ত করুন
  3. ড্রপডাউনটিতে নীচে স্ক্রোল করুন -> উইন্ডোজ ব্যাচ কমান্ড কার্যকর করুন
  4. আপনার এমএসবিল্ড পদক্ষেপের পরে এই পদক্ষেপটি স্থাপন করা হয়েছে তা নিশ্চিত করুন
  5. ভেরিয়েবলগুলি প্রতিস্থাপন করে নিম্নলিখিতটি যুক্ত করুন:

একক dll পরীক্ষা:

[পাথটোনইনিত] \ বিন \ নুনিট-কনসোল.এক্সে

নুনিট পরীক্ষা প্রকল্পগুলি ব্যবহার করে একাধিক dll পরীক্ষা :

[পাথ টনউনিত] \ বিন \ নুনিট-কনসোল.এক্সে

  1. পোস্ট-বিল্ড অ্যাকশনের অধীনে , প্রকাশিত নুনিট পরীক্ষার ফলাফলের প্রতিবেদনে টিক দিন
  2. টেক্সটবক্স পরীক্ষার রিপোর্ট এক্সএমএলগুলির জন্য , নুনিট-রেজাল্ট.এক্সএমএল প্রবেশ করুন

একবার আপনার প্রকল্পটি তৈরি হয়ে গেলে, নুনিট এখন চলবে এবং ফলাফলগুলি ড্যাশবোর্ডে (যদি আপনি আবহাওয়ার প্রতিবেদনের আইকনটি ঘুরে দেখেন) বা শেষ পরীক্ষার ফলাফলের অধীনে প্রকল্পের পৃষ্ঠায় দেখতে পাবে ।

আপনি ভিজুয়াল স্টুডিওর মধ্যে থেকে বা আপনার স্থানীয় বিল্ড প্রক্রিয়ার অংশ হিসাবে কমান্ডটি চালাতে পারেন।

এখানে আমি দুটি ব্লগ পোস্ট রেফারেন্সের জন্য ব্যবহার করেছি। আমার প্রয়োজনীয়তাগুলি ঠিক মতো ফিট করে এমন কোনও কিছুই আমি পাইনি:
অবিচ্ছিন্ন ইন্টিগ্রেশন সেটআপের জন্য 1-ঘন্টা গাইড: জেনকিনস পূরণ করে N নেট (2011)
হাডসন ব্যবহার করে নেট প্রকল্প তৈরি করার গাইড (২০০৮)


আমি সত্যিই দেখতে পাচ্ছি না যে এটি কীভাবে যথেষ্ট। কেবলমাত্র একটি (বা কয়েকটি) পরীক্ষার ঘড়ি রাখা কি স্বাভাবিক? আমাদের এগুলির একটি ভার রয়েছে এবং তারা প্রায়শই তৈরি এবং সরানো হয়। জেনকিনসে পরীক্ষার জন্য হার্ড কোড না করে এটি করার কোনও উপায় থাকা উচিত নয়?
আন্দ্রে সি। অ্যান্ডারসন

উত্স নিয়ন্ত্রণে একটি .bat বা .Cmd ফাইল ব্যবহারের জন্য বিল্ড স্টেপটিকে নির্দেশ করুন, যা আপনার NUnit কমান্ডটি সরিয়ে দেয়। এখন, আপনি জেনকিন্স পরিবর্তন না করে যতবার চান ততবার চালানো টেস্টগুলি সংশোধন করতে পারেন। আপনার NUnit পরীক্ষা প্রকল্পগুলির দিকেও নজর দেওয়া উচিত, কারণ এটি আপনাকেও সহায়তা করতে পারে। কীটি জেনকিন্সকে জানিয়েছে যে পরীক্ষার রিপোর্টের জন্য কোন এক্সএমএল ফাইল ব্যবহার করতে হবে।
রাল্ফ উইলগোস

4
কেবলমাত্র আপনার * .নিট ফাইলটি ডিএলএল ফাইলের পরিবর্তে প্যারামিটার হিসাবে ব্যবহার করুন, যেমন "C:\Program Files (x86)\NUnit 2.6.3\bin\nunit-console-x86.exe" UnitTests/UnitTests.nunit। আমার জন্য নিখুঁতভাবে কাজ করেছেন।
JCH2k

3
আপনি DLL এর পরিবর্তে * .sln ফাইলটি ব্যবহার করতে পারেন, ডকুমেন্টেশন
মার্টিন

2
আহহহ। আমার লজিকাল ভ্রান্তিটি ছিল যে নুনিট প্লাগইন একটি নতুন "বিল্ড-টাস্ক" টাইপ তৈরি করেছে। এর ম্যাজিক ভোডো পোস্ট-বিল্ড ইভেন্ট। (এবং কেউ মাত্র
.xML

16

আপনি যদি নিজের ইউনিট পরীক্ষার প্রকল্পগুলি হার্ডকোড করতে না চান, তবে আপনার ইউনিট পরীক্ষা প্রকল্পের সমস্ত গ্রাহককে স্ক্রিপ্ট লিখতে ভাল। আমরা পাওয়ারশেল দিয়ে এটি করি এবং আমাদের ইউনিট টেস্টিং প্রকল্পগুলির নামকরণের জন্য একটি নির্দিষ্ট সম্মেলন অনুসরণ করি। এখানে পাওয়ার ইউনিট ফাইলগুলির সামগ্রী যা আমাদের ইউনিট পরীক্ষা চালায়:

param(
[string] $sourceDirectory = $env:WORKSPACE
, $fileFilters = @("*.UnitTests.dll", "*_UnitTests.dll", "*UnitTests.dll")
, [string]$filterText = "*\bin\Debug*"
)

#script that executes all unit tests available.
$nUnitLog = Join-Path $sourceDirectory "UnitTestResults.txt"
$nUnitErrorLog = Join-Path $sourceDirectory "UnitTestErrors.txt"

Write-Host "Source: $sourceDirectory"
Write-Host "NUnit Results: $nUnitLog"
Write-Host "NUnit Error Log: $nUnitErrorLog"
Write-Host "File Filters: $fileFilters"
Write-Host "Filter Text: $filterText"

$cFiles = ""
$nUnitExecutable = "C:\Program Files (x86)\NUnit 2.6.3\bin\nunit-console-x86.exe"

# look through all subdirectories of the source folder and get any unit test assemblies. To avoid duplicates, only use the assemblies in the Debug folder
[array]$files = get-childitem $sourceDirectory -include $fileFilters -recurse | select -expand FullName | where {$_ -like $filterText}

foreach ($file in $files)
{
    $cFiles = $cFiles + $file + " "
}

# set all arguments and execute the unit console
$argumentList = @("$cFiles", "/framework:net-4.5", "/xml=UnitTestResults.xml")

$unitTestProcess = start-process -filepath $nUnitExecutable -argumentlist $argumentList -wait -nonewwindow -passthru -RedirectStandardOutput $nUnitLog -RedirectStandardError $nUnitErrorLog

if ($unitTestProcess.ExitCode -ne 0)
{
    "Unit Test Process Exit Code: " + $unitTestProcess.ExitCode
    "See $nUnitLog for more information or $nUnitErrorLog for any possible errors."
    "Errors from NUnit Log File ($nUnitLog):"
    Get-Content $nUnitLog | Write-Host
}

$exitCode = $unitTestProcess.ExitCode

exit $exitCode

স্ক্রিপ্টটি যথেষ্ট শক্তিশালী যে আমরা আমাদের সমস্ত বিল্ডিং কাজের জন্য পুনরায় ব্যবহার করছি। আপনি যদি নুনিট কনসোলের পুরো পথটি পছন্দ না করেন তবে আপনি সর্বদা সেই অবস্থানটি আপনার PATH এনভায়রনমেন্ট ভেরিয়েবলের মধ্যে রাখতে পারেন।

তারপরে আমরা আমাদের বিল্ড সার্ভারে রানউনিটটিস্ট.এসপি 1 ফাইলটি রেখেছি এবং এই ব্যাচ কমান্ডটি ব্যবহার করব:

powershell.exe -file "{full-path-to-script-direcory}\RunUnitTests.ps1"

ভাল কাজ করেছেন তবে আমার দুটি সমস্যা ছিল। প্রথমটি সোর্স ডিরেক্টরি ছিল। আমাকে ফাঁকা জায়গাগুলির সাথে ও পথগুলির জন্য সোর্সডাইরেক্টরি[string] $sourceDirectory = $(get-location) বদলাতে হয়েছিল আমাকে এসেম্বলির পাসটি ননইটে বদলাতে হয়েছিল$cFiles = $cFiles + '"' + $file + '"' + " "
চোকো স্মিথ

আমাদের যদি টেস্ট থাকে তবে আমরা টেস্ট প্লেলিস্ট দ্বারা চালাচ্ছি। আমরা .dll ব্যবহার করে জেনকিন্সের জন্য এই টেস্ট প্লেলিস্টটি সম্পাদন করতে পারি?
itaশিতা শাহ

15

নুনিট 3 বা ততোধিক খামার কাজের জন্য:

  1. বিল্ডিং স্টেপ (উইন্ডোজ কমান্ড লাইন) "c:\Program Files (x86)\NUnit.org\nunit-console\nunit3-console.exe" c:\AutomationTraining\CSharpSelenium\bin\Debug\test.dll --result=TestR.xml;format=nunit2

  2. নুনিত রিপোর্ট প্রকাশের জন্য পদক্ষেপ পোস্ট করুন, এটি আপনার প্রকল্পে নয়, জেনকিনস ওয়ার্কস্পেস ডিরেক্টরিতে কেবল পরীক্ষার ফলাফল ফাইল দেখায়: TestR.xML

আমাদের নুনিট 2 ফর্ম্যাটে পরীক্ষার ফলাফল করা দরকার কারণ এখন জেনকিনস নুনিট প্লাগইন নুনিট 3 ফলাফলের ফর্ম্যাটটিকে স্বীকৃতি দেয় না। এছাড়াও বিকল্পগুলির স্ট্রিং বিন্যাসটি পৃথক: --result=TestR.xml;format=nunit2 নয় /xml=nunit-result.xml


8

এটি দুর্দান্তভাবে কাজ করে, আমি এটি আগে স্থাপন করেছি।

এক্সএমএল ফাইলে ফলাফল আউটপুট করতে নুনিটকে কনফিগার করুন এবং এই এক্সএমএল ফাইলটি ব্যবহারের জন্য নুনিত জেনকিনস প্লাগইনটি কনফিগার করুন। ফলাফলগুলি ড্যাশবোর্ডে পাওয়া যাবে।

এখন, আপনি কীভাবে নুনিটকে আহ্বান করবেন তা আপনার বিষয়। যেভাবে আমরা এটি করেছি: জেনকিন্স কাজটি কার্যকর করে ন্যান্ট টার্গেটটি নুনিট পরীক্ষা স্যুট কার্যকর করে।

আপনি জিনকিন্স জবস কনফিগার করতে পারেন কমিট এবং / অথবা নির্দিষ্ট সময়ে নির্ধারিত সময়ে চালানোর জন্য।


এটি প্রায় আমি যাচ্ছিলাম, তবে পাইপলাইন / ওয়ার্কফ্লো থেকে NUnit প্লাগইনটি কাজ করতে পেলাম না। এর পরিবর্তে আমি এক্সউনিত প্লাগইন ব্যবহার করেছি যা ভাল কাজ করেছে।
demcodemonkey

4

রাল্ফ উইলগাসের সমাধানটি ভাল কাজ করছে, তবে আমি এটিকে দুর্দান্ত করে তুলতে 2 টি জিনিস পরিবর্তন করেছি:

ক) আমি সরাসরি ডিএলএল ফাইলের পরিবর্তে একটি নুনিট প্রকল্প ব্যবহার করেছি। এটি NUnit GUI- এ আরও অ্যাসেমব্লি যুক্ত করা বা পরীক্ষাটি কনফিগার করা আরও সহজ করে তোলে।

খ) আমি যখন পরীক্ষায় ব্যর্থ হয় তখন বিল্ডটি ব্যর্থ হওয়ার হাত থেকে বাঁচাতে ব্যাচে আরও একটি লাইন যুক্ত করেছি:

[PathToNUnit]\bin\nunit-console.exe [PathToTestProject]\UnitTests.nunit /xml=nunit-result.xm
exit 0

উল্লিখিত NUnit প্লাগইনটি স্বয়ংক্রিয়ভাবে বিল্ড আনস্টাবল চিহ্নিত করে , যা আমি চাই ঠিক তাই, যখনই কোনও পরীক্ষা ব্যর্থ হয়। এটি একটি হলুদ বিন্দু দিয়ে দেখায়।


3
ইউনিট পরীক্ষা ব্যর্থ হলে আপনি কেন বিল্ডটি ব্যর্থ হতে চান না ? ব্যর্থ পরীক্ষাটি কি আপনাকে বোঝানো নিয়ে এগিয়ে যেতে চান না তা বোঝানো উচিত নয়?
কার্ক ওল

1
আমি আমার নাইটলাইটগুলি জেনকিন্সের সাথেও তৈরি করি এবং আমি চাই না যে সেগুলি সংকলন করলে তারা ব্যর্থ হয় যাতে আমি অন্য সমস্ত কিছুর পরীক্ষা করতে পারি। "অস্থির" - স্ট্যাটাস আমাকে এমন একটি ইঙ্গিত দেয় যা সমস্ত কিছু অনুমান অনুসারে চলে না। অস্থিতিশীল. যদি একটি রিলিজ বিল্ড অস্থির হয় তবে আমি এটি স্থাপন করব না।
JCH2k

2

আমি মনে করি বিল্ডটি পাস না হয়ে গেলে এটি ব্যর্থ করা ভাল, যাতে আপনি এটি স্থাপন না করেন। এরকম কিছু করুন:

C:\YourNUnitDir\nunit-console.exe C:\YourOutDir\YourLib.dll /noshadow
if defined ERRORLEVEL if %ERRORLEVEL% neq 0 goto fail_build

:: any other command

: fail_build
endlocal
exit %ERRORLEVEL%

তথ্যসূত্র: http://www.greengingerwine.com/index.php/2013/01/tip-check-errorlevel-in-your-post-build-steps-when- using-nunit /


এটি কি প্রথম লাইনের চেয়ে বেশি কিছু করতে পারে? আমি তাই মনে করি না. যদি নুনিট-কনসোল.এক্সই ফিরে আসে তবে বিল্ডটি ব্যর্থ হয়! = 0 যা কোনও পরীক্ষায় ব্যর্থ হলে এটি করে।
JCH2k

আমি বলতে ভুলে গেছি যে আমার জেনকিন্স জবটিতে নুনিট-কনসোল.এক্সে কল করার পরে আমার কিছু কমান্ড ছিল। জেনকিন্স কেবল সর্বশেষ কমান্ড এররোলভেল বিবেচনা করুন যাতে এটি আমার পক্ষে কাজ করে না।
আকিরা ইয়ামামোটো

এটি কি প্রকাশের পদক্ষেপের সুবিধাগুলি প্রতিরোধ করে? আমি আশা করি পরীক্ষার ব্যর্থ কনফিগারেশনে প্লাগইনটির "" সাধারণ চিহ্ন বিল্ড থাকে।
টমি হলম্যান

1

জেনকিন্সের এমন প্লাগইন রয়েছে যা এটি সমর্থন করবে। সঠিক কনফিগারেশনটি আপনার প্রকল্পের সেটআপের উপর বেশ কিছুটা নির্ভর করে। ইউনাইট, এমএসবিল্ড, এন ইত্যাদি ইত্যাদির জন্য সুনির্দিষ্ট প্লাগইন রয়েছে প্লাগইন পৃষ্ঠাগুলি দেখে শুরু করুন, তবে এটি নির্ণয় করা খুব কঠিন হবে না n't


1

জেনকিন্সে বনামের সাথে ওপেনকভার চালানোর জন্য এটি আমার সমাধান :

param(
[string] $sourceDirectory = $env:WORKSPACE
, $includedFiles = @("*Test.dll")
, $excludedFiles = @("*.IGNORE.dll")
, [string]$filterFolder = "*\bin\Debug*"
)

# Executables
$openCoverExecutable = "C:\Users\tfsbuild\AppData\Local\Apps\OpenCover\OpenCover.Console.exe"
$unitExecutable = "F:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"

# Logs
$openCoverReport = Join-Path $sourceDirectory "opencover.xml"
$openCoverFilter = "+[*]* -[*Test]*"

Write-Host "`r`n==== Configuration for executing tests ===="
Write-Host "Source: `"$sourceDirectory`""
Write-Host "Included files: `"$includedFiles`""
Write-Host "Excluded files: `"$excludedFiles`""
Write-Host "Folder filter: `"$filterFolder`""
Write-Host ""
Write-Host "OpenCover Report: `"$openCoverReport`""
Write-Host "OpenCover filter: `"$openCoverFilter`""

# look through all subdirectories of the source folder and get any unit test assemblies. To avoid duplicates, only use the assemblies in the Debug folder
[array]$files = get-childitem $sourceDirectory -include $includedFiles -exclude $excludedFiles -recurse | select -expand FullName | where {$_ -like $filterFolder} | Resolve-Path -Relative

$exitCode = 0
$failedTestDlls = ""

foreach ($file in $files)
{
    Write-Host "`r`nCurrent test dll: $file"

    # set all arguments and execute OpenCover
    $argumentList = @("-target:`"$unitExecutable`"", "-targetargs:`"$file /UseVsixExtensions:false /Logger:trx`"", "-register:user -filter:`"$openCoverFilter`" -mergeoutput -mergebyhash -skipautoprops -returntargetcode -output:`"$openCoverReport`"")

    $unitTestProcess = start-process -filepath $openCoverExecutable -argumentlist $argumentList -wait -nonewwindow -passthru -WorkingDirectory $sourceDirectory

    if ($unitTestProcess.ExitCode -ne 0)
    {
        $failedTestDlls = $failedTestDlls + $file + "`r`n"
        $exitCode = $unitTestProcess.ExitCode
    }
}

if ($exitCode -ne 0)
{
    Write-Host "`r`n==== Executing tests in following dlls failed ===="
    Write-Host "$failedTestDlls"
}

exit $exitCode

প্রতিটি পরীক্ষা dll একটি নিজস্ব প্রক্রিয়াতে কার্যকর করা হয় কারণ আমাদের একক গ্রাহক (অ্যাসেম্বলি লোডিং সহ প্রব্লেমল) এর সমস্ত টেস্ট ডল চালাতে সমস্যা হয়।


0

নেট কোরের জন্য নিম্নলিখিত স্ক্রিপ্ট সহ "এক্সিকিউট শেল" বিল্ড স্টেপ যুক্ত করা যথেষ্ট:

#!bash -x

cd $my_project_dir
rm -rf TestResults   # Remove old test results.
dotnet test -l trx

এর পরে পরীক্ষার ফলাফল দৃশ্যমান করার জন্য পোস্ট-বিল্ড অ্যাকশন "এমএসটিস্ট টেস্ট ফলাফলের রিপোর্ট প্রকাশ করুন" যুক্ত করুন।

ডিফল্ট পরীক্ষার রিপোর্টের পাথ হওয়া উচিত **/*.trxএবং সমস্ত উত্পাদিত .trxফাইল প্রকাশ করবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.