Используя Cucumber с Java, могу ли я использовать 2 класса ServiceHooks в проекте? - PullRequest
0 голосов
/ 26 июня 2019

Я хотел бы создать тестовую среду с использованием Cucumber и Java, которая имеет как пользовательский интерфейс, так и API. Могу ли я использовать класс ServiceHooks с аннотацией @Before для выполнения некоторых предварительных условий для тестов пользовательского интерфейса, а другой класс ServiceHooks - с другой аннотацией @Before для запуска некоторых предварительных условий перед тестами API?

Если да, как я скажу огурцу, какой использовать при запуске теста?

Это класс TestRunner:

import cucumber.api.CucumberOptions;
import cucumber.api.SnippetType;
import cucumber.api.testng.CucumberFeatureWrapper;
import cucumber.api.testng.PickleEventWrapper;
import cucumber.api.testng.TestNGCucumberRunner;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

@CucumberOptions(
        features = "src/test/resources/features",
        glue = {"stepDefs"}, // this is a package in which I have the ServiceHooks class and the StepDefinitions class
        snippets = SnippetType.CAMELCASE,
        tags = {"not @Ignore"}
       ,
        plugin = {
                "pretty",
                "html:target/cucumber-reports/cucumber-pretty",
                "json:target/cucumber-reports/CucumberTestReport.json",
                "rerun:target/cucumber-reports/rerun.txt"
        }


        )
public class TestRunner {
    private TestNGCucumberRunner testNGCucumberRunner;

    @BeforeClass(alwaysRun = true)
    public void setUpClass() throws Exception {
        testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
    }

    @Test(groups = "cucumber", description = "Runs Cucumber Feature", dataProvider = "scenarios")
    public void scenario(PickleEventWrapper pickleEvent, CucumberFeatureWrapper cucumberFeature) throws Throwable {
        testNGCucumberRunner.runScenario(pickleEvent.getPickleEvent());
    }

    @DataProvider
    public Object[][] scenarios() {
        return testNGCucumberRunner.provideScenarios();
    }

    @AfterClass(alwaysRun = true)
    public void tearDownClass() throws Exception {
        testNGCucumberRunner.finish();
    }
}

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Вы можете сделать это, используя тегированные крючки и пометив свои функции или сценарии соответствующими тегами, например, @api и @browser.

Из документов Cucumber на теговые крючки : "Хуки могут быть условно выбраны для выполнения на основе тегов сценария. Чтобы запустить определенный хук только для определенных сценариев, вы можете связать до или после хука с выражением тега.

стиль примечания метода:

@After("@browser and not @headless")
public void doSomethingAfter(Scenario scenario){
}

Лямбда-стиль:

After("@browser and not @headless", (Scenario scenario) -> {
});

"

0 голосов
/ 27 июня 2019

Класс сервисного хука должен быть в клею при опциях огурца. Вы должны передать UI или API в качестве аргумента и соответственно установить путь к классу клея. Это может быть просто жестко запрограммированный класс бегуна (например, значение @tag) или передача его в качестве аргументов командной строки.

public class runner()
{
public static String testPath;
private final string API = "<path to API service hook>";
private final string UI = "<path to UI service hook>";
public static String testPath;
public static void main ( String args[])
{

if(args.length >1)
{
testPath = args[0]
}
else
{
String testPath = API ; //or UI
}
Main.main(new String[]{<Pass cucumber parameters>, "-g" ,testPath});

}
...