2015-01-10 2 views
1

Как TestNG определяет порядок выполнения тестов в группах, когда я не использую такие функции, как dependonGroup = X или priority = X?Что контролирует порядок групповых тестов в TestNG?

Короче говоря, я смотрел на этом испытательном полигоне:

http://www.tutorialspoint.com/testng/testng_group_test.htm

вырезать и вставить строки для 3-файлы примеров, чтобы играть вокруг с и попытаться понять TestNG и групповые тесты. Когда я его запускал, результат соответствовал тому, что сказал сайт.

Хорошие результаты:

Inside testPrintMessage() 
.com 
Inside testExitMessage() 
www..com 

=============================================== 
Suite1 
Total tests run: 2, Failures: 1, Skips: 0 
=============================================== 

Следующая вещь, которую я сделал, я думал, что я убирала код и фиксируя опечатка, который дал мне странный результат. Из GroupTestExample.java я изменил метод testExitMessage на testExitMessage. Я не знаю, как 3 буквы могут изменить порядок запуска тестов.

Плохие результаты - Посмотрите, как порядок тестируемых функций местами, которые повлияли на количество отказов

Inside testExitMessage() 
www..com 
Inside testPrintMessage() 
www..com 

=============================================== 
Suite1 
Total tests run: 2, Failures: 2, Skips: 0 
=============================================== 

Может кто-нибудь объяснить мне, что могло произойти, почему изменения имени метода сделал заказ изменения теста?

MessageUtil.java

/* 
* This class prints the given message on console. 
*/ 
public class MessageUtil { 
    private String message; 

    // Constructor 
    // @param message to be printed 
    public MessageUtil(String message) { 
     this.message = message; 
    } 

    // prints the message 
    public String printMessage() { 
     System.out.println(message); 
    return message; 
    } 

    // add "tutorialspoint" to the message 
    public String salutationMessage() { 
     message = "tutorialspoint" + message; 
    System.out.println(message); 
    return message; 
    } 

    // add "www." to the message 
    public String exitMessage() { 
    message = "www." + message; 
    System.out.println(message); 
    return message; 
    } 
} 

Хорошо GroupTestExample.java

public class GroupTestExample { 
    String message = ".com"; 
    MessageUtil messageUtil = new MessageUtil(message); 

    @Test(groups = { "functest", "checkintest" }) 
    public void testPrintMessage() { 
     System.out.println("Inside testPrintMessage()"); 
    message = ".com"; 
    Assert.assertEquals(message, messageUtil.printMessage()); 
    } 

    @Test(groups = { "checkintest" }) 
    public void testSalutationMessage() { 
    // Removed code since this method wasn't the problem method 
    } 

    @Test(groups = { "functest" }) 
    public void testingExitMessage() { 
     System.out.println("Inside testExitMessage()"); 
     message = "www." + "tutorialspoint"+".com"; 
    Assert.assertEquals(message, messageUtil.exitMessage()); 
    } 
} 

testng.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="Suite1"> 
    <test name="test1"> 
     <groups> 
     <run> 
     <include name="functest" /> 
     </run> 
    </groups> 
    <classes> 
     <class name="GroupTestExample" /> 
    </classes> 
    </test> 
</suite> 

«Bad» GroupTestExample.java

// same code as above except I changed this method from testingExitMessage to 
    // testExitMessage b/c that's what the println msg shows and I thought I was 
    // fixing a typo. 

    public void testExitMessage() { 
     System.out.println("Inside testExitMessage()"); 
     message = "www." + "tutorialspoint"+".com"; 
    Assert.assertEquals(message, messageUtil.exitMessage()); 
    } 
+0

В отличие от сайтов форума, мы не используем «Спасибо» или «Любая помощь приветствуется», или подписи на [так]. См. «[Должны ли« Привет »,« спасибо », теги и приветствия удалены из сообщений?] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be -removed-from-posts). –

ответ

1

TestNG запускать тесты в порядке, они находятся в файле XML, в вашем случае, если вы не не указать методы в файле XML и тестового прогона в непредсказуемом порядке (я считаю, что это зависит на компиляторе).

+0

Спасибо, что посмотрел на мой вопрос. Может быть, я не понимаю, что вы говорите, но если тесты были случайным образом запущены, порядок выполнения был бы разным каждый раз, когда я запускал тест, верно? это не так. Порядок выполнения один раз каждый раз, если метод называется «testingExitMessage» и другим способом, если метод называется «testExitMessage». – Classified

+1

Его не случайно, он непредсказуем (нет твердого правила, как он будет работать на разных JVM). – YoK

0

Вы можете настроить приоритет в своем тесте.

ex. @Test (priority=1)

Затем в файле testNG.xml вы можете установить preserve-order="true"

+1

Хороший ответ, но он напрямую не отвечает на вопрос «Как TestNG определяет порядок запуска тестов в группах, когда я не использую такие функции, как dependonGroup = X или priority = X?» –

Смежные вопросы