Могу ли я запустить @BeforeTest и @AfterTest только для группы тестов? - PullRequest
0 голосов
/ 18 октября 2019

Я создаю тестовую среду для проекта с несколькими модулями. В настоящее время у меня есть два теста в моем testng.xml.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <listeners>
    <listener class-name = "listener-class" />
  </listeners>
  <test thread-count="5" name="frontEnd">
  <parameter name="URL" value="front-end-url" />
    <classes>
      <class name="frontendTestRunner"/>
    </classes>
  </test>
  <test thread-count="5" name="Backend">
  <parameter name="URL" value="back-end-url" /> 
    <classes>
      <class name="backendtestrunner"/>
    </classes>
  </test>  <!-- Test -->
</suite> <!-- Suite -->

Для обоих этих тестов условия до и после отличаются.

Есть ли способ, с помощью которого методы @BeforeTest и @AfterTest можно запускать только для одного теста, скажем, «frontEnd» и различных методов @BeforeTest и @AfterTest для второго - «Backend».

В настоящее время я использую два разных тестера огурцов для достижения этой цели. Но я хочу сделать это, используя только один testrunner.

Вот мои два TestRunner:

@CucumberOptions(
            features = "src/test/java/com/frontEnd",
            glue = "com/stepDefinitions/frontEnd",
            tags = {"~@ignore"}
        )
public class FrontEndTestRunner extends AbstractTestNGCucumberTests {

    @Parameters( {"URL"})
    @BeforeTest
    public static void setup(String url) throws IOException {
        TestConfiguration.initialise(true);
        Pages.initialise();
        TestConfiguration.getHomePageUrl(url);
    }

    /**
     * This class runs after the completion of the final test. It populates the reports and closes the browser driver. 
     */
    @AfterTest
    public static void after() {
        Browser.close();        
    }

}

И

@CucumberOptions(
        features = "src/test/java/com/backEnd",
        glue = "com/stepDefinitions/backEnd"
    )
public class BackEndTestRunner extends AbstractTestNGCucumberTests {

    @BeforeTest
    public static void setup() throws IOException {
        TestConfiguration.initialise(true);
        Pages.initialise();
    }

    /**
     * This class runs after the completion of the final test. It logs the user out and closes the browser driver. 
     */
    @AfterTest
    public static void after() {
        Browser.close();        
    }
}

Есть ли способ, которым я могу толькоодин TestRunner и каким-то образом все еще в состоянии выполнить правильные условия Begin и After для двух наборов функций?

В основном мне нужно иметь возможность группировать два набора функций и вызывать два разных метода @BeforeTest и @AfterTest в зависимости отк какой группе принадлежит функция.

Ответы [ 2 ]

1 голос
/ 27 октября 2019

Я вижу, что вы используете тестовые крючки вместо огуречных крючков. Вы можете легко добиться этого, используя крючки для огурца. Поместите крючки для огурцов в комплект Step DefinitionБлоки @before и @after могут быть помечены так, чтобы метод внутри ловушек вызывался только для сценариев с этим конкретным тегом. Например, проверьте код ниже beforeFrontEndScenario и afterFrontEndScenario вызывается только для сценариев с тегом @frontEnd. Следуя этому, вы сможете иметь отдельный файл бегуна и при этом иметь отдельные хуки для сценариев frondend и backend.

Вот пример класса крючков cucucmber

public class Hooks {

 @Before
    public void beforeScenario(){
        System.out.println("method is executed before all scenario");
    } 

 @After
    public void afterScenario(){
        System.out.println("method is executed after all scenario");
    }

 @Before("@frontEnd")
public void beforeFrontEndScenarios(){
    System.out.println("before block called for scenario with tag frontEnd");
} 

  @After("@frontEnd")
  public void afterFrontEndScenarios(){
    System.out.println("after block called for scenario with tag frontEnd");
  } 


}
1 голос
/ 20 октября 2019

Если я правильно понимаю, то, что вы хотите сделать, довольно просто

  • Добавьте @BeforeTest и @AfterTest к каждому классу Java.
  • В testng.xml поместите каждыйЭлемент класса в отдельном тестовом элементе.


SepClass1.java

package test;



import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;



public class SepClass1
{
    @BeforeTest
    public void beforeTest1()
    {
        System.out.println("\nThis is before start of test 1.");
    }


    @Test
    public void test1()
    {
        System.out.println("\tThis is the test1() method.");
    }


    @AfterTest
    public void afterTest1()
    {
        System.out.println("This is after end of test 1.");
    }
}


SepClass2.java

package test;



import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;



public class SepClass2
{
    @BeforeTest
    public void beforeTest2()
    {
        System.out.println("\nThis is before start of test 2.");
    }


    @Test
    public void test2()
    {
        System.out.println("\tThis is the test2() method.");
    }


    @AfterTest
    public void afterTest2()
    {
        System.out.println("This is after end of test 2.");
    }
}


testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">


<suite name="Separate Before/After Test Suite">

    <test name="Test 1">
        <classes>
            <class name="test.SepClass1" />
        </classes>
    </test>

    <test name="Test 2">
        <classes>
            <class name="test.SepClass2" />
        </classes>
    </test>

</suite> 


Вывод на консоль

[RemoteTestNG] detected TestNG version 7.0.0

This is before start of test 1.
    This is the test1() method.
This is after end of test 1.

This is before start of test 2.
    This is the test2() method.
This is after end of test 2.

===============================================
Separate Before/After Test Suite
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================

...