Как выполнить условный цикл с помощью powershell

#powershell #powershell-2.0 #powershell-3.0

#powershell #powershell-2.0 #powershell-3.0

Вопрос:

  • Я хочу выполнить тестовые примеры с помощью команд, использующих сценарии PowerShell.
  • Сколько раз я хочу выполнить эти тесты, зависит от $HowManyTimes переменной.
  • Вполне возможно, что я получу результат успеха раньше $HowManyTimes , например, на данный момент я установил его равным 3, но что, если я получу успешный результат во 2-й попытке?
  • Я хочу проигнорировать этот конкретный тестовый пример, который был пройден, и перейти к выполнению нового тестового примера. Я скопировал вывод команды в $OutPut переменную, которая выглядит следующим образом

    Не Imp Информация

    Ошибки, сбои и предупреждения

    Сбой: UnitTestProject1.TestClass.AddTest() Добавить тест()

    Ожидаемый: 30

    Но было: 45

    Не Imp Информация

    Краткое описание тестового запуска

    Общий результат: сбой

    Не Imp Информация

Ниже приведен сценарий, который я написал.

 $XMLfile = 'Results.xml'
[XML]$Results = Get-Content $XMLfile
$HowManyTimes = 3 # How many time the script should run.
$TestCaseToExecute
$OutPut # Storing the result of command
$StopOperation = 0
for ($i=1; $i -le $HowManyTimes; $i  )
{
    #I am reading the xml file which can have n test cases.
    #For each loop on all the test case which are failed.
    
foreach($Result in $Results.'test-run'.'test-suite'.'test-suite'.'test-suite'.'test-suite'.'test-case' | Where-Object  {$_.result -eq "Failed"})
{   
    Write-Host "Failed Test Case -- fullname :" ($Result).fullname
    $TestCaseToExecute = ($Result).fullname
    
    Write-Host " Executing ====>" $TestCaseToExecute
    Write-Host "-----------------------------------------"
            
    $OutPut = nunit3-console.exe UnitTestProject1binDebugUnitTestProject1.dll --test=$TestCaseToExecute | Out-String
    
    if($OutPut -Like "*Overall result: Failed*"){
        Write-Host "If Block"
        continue
        
    }else{
        Write-Host "else block Stop : " 
        break
    }
    
    
}

}
 

Пожалуйста, дайте мне знать, какие изменения мне нужно внести для достижения этой цели.

Комментарии:

1. Здесь недостаточно для тестирования /dev, но похоже, что вам нужны некоторые варианты операторов Break и / или continue , выполняемых условно. У меня возникает соблазн сказать что-то вроде if($OutPut -Like "*Overall result: Failed*"){ Continue } , но опять же недостаточно информации для работы над этим. Кроме того, похоже, что вы никогда не добьетесь успеха из-за Where{}

2. @Steven Where{} вступает в игру только тогда, когда я считываю значения из XML. Как только у меня появятся эти значения, я скопировал их $Result . Теперь у меня есть список, в $Result котором я выполняю один за другим, используя для каждого цикла. Если какой-либо из элементов списка получил пропуск, я хочу остановить выполнение — только для этого конкретного элемента.

3. Определенно звучит так Continue , что это немедленно приведет вас к следующей итерации цикла. Итак, предполагая, что вы размещаете Continue правильно, он эффективно пропускает

4. Я добавил операторы Continue and Break в свой сценарий. это нарушение для всех компонентов в $Result том, что я хочу, для отдельного

5. Вы должны сделать их условными. Добавьте обновленный код к вопросу…