我想使用 io.cucumber.cucumber-testng 以编程方式启动 Cucumber 测试。我想从 Scala 应用程序开始运行。
我只能通过从 Scala 应用程序外部引导 TestNGCucumberRunner 来启动运行。
更新:
我用 C# 为 NUnit 引擎编写了一段代码。我想要类似的东西,但能够从 Scala 启动测试(所有基础设施都是 Java 代码)。我对 scala 和 sbt 很熟悉,并且对 TestNg 的经验很少(如果 Junit 更适合我想要的,我可以使用它)。 也许还有另一个问题。是否有可能以编程方式将自定义参数传递给 testNg 或 Junit?就像 C# Nunit 中的“package.AddSetting("TestParameters", customRunParametersString);”一样。可以在测试执行期间使用 (TestContext.Parameters) 读取这些参数。
using (ITestEngine engine = TestEngineActivator.CreateInstance()) {
ITestFilterService filterService = engine.Services.GetService<ITestFilterService>();
engine.WorkDirectory = Guid.NewGuid().ToString();
TestPackage package = new TestPackage(dictionaryParameters["ProjectName"] + ".dll");
ITestFilterBuilder builder = filterService.GetTestFilterBuilder();
builder.SelectWhere(dictionaryParameters["Tag"]);
package.AddSetting("TestParameters", customRunParametersString);
TestFilter filter = builder.GetFilter();
ITestRunner runner = engine.GetRunner(package);
Console.WriteLine(@"TEST RUN STARTED : Feature " + dictionaryParameters["Tag"]);
result = runner.Run(null, filter);
Console.WriteLine(@"TEST RUN FINISH : Feature " + dictionaryParameters["Tag"]);
Console.WriteLine("Remaining runtime ".ToUpper() + context.RemainingTime.Minutes + @" minutes and" + context.RemainingTime.Seconds + @"seconds");
}
我不确定你到底想做什么。
如果您想以编程方式运行 Cucumber 并且并不真正关心您使用的框架,那么使用 JUnit 5 中的 JUnit Platform Launcher API 并不是一个坏选择。
您可以添加
io.cucumber:cucumber-junit-platform-engine
作为依赖项,然后通过 JUnit 平台 API 执行 Cucumber。
https://github.com/cucumber/cucumber-jvm/tree/main/cucumber-junit-platform-engine
public class RunCucumber {
public static void main(String[] args) {
LauncherDiscoveryRequest request = request()
.selectors(
selectDirectory("path/to/features")
)
.build();
Launcher launcher = LauncherFactory.create();
SummaryGeneratingListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);
TestExecutionSummary summary = listener.getSummary();
// Do something with summary
}
}