我正在使用硒和黄瓜进行测试,我想知道将TestNG与黄瓜一起使用?当Cucumber,当TestNG?还是两个?
我有这样的示例场景:
Scenario: Successful Create Account with Valid Credentials
Given I am on Home Page
When I Navigate to Create Account Page
And I fill in "User Name" with <username>
And I fill in "Password" with <password>
And I fill in "Password" with <password>
And I fill in "email" with <email>
Then I see title "Congratulation you create account"
Examples:
| username | password | email |
| Tom123 | password12 | Tom@gmailcom |
| Kenny123 | fasfadfaadfa | Kenny@gmailcom |
这是一个简单的确认测试,但是如果我想使用NastyString和很多组合测试我的帐户创建?
Scenario: Unsuccessful reate Account with invalid Credentials
Given I am on Home Page
When I Navigate to Create Account Page
And I fill in "UserName" with incorrect credentials
Then I see error message
And I fill in "password" with incorrect credentials
Then I see error message
And I fill in "email" with incorrect credentials
这样的场景和使用带有BDD风格的数据提供程序的testNG进行测试?
答案 0 :(得分:0)
在你的情况下你必须使用TestNG和Cucumber(两者一起)或JUnit和Cucumber我更喜欢JUnit。原因是TestNG创建Test Runner类会有点复杂。由于你的测试是作为黄瓜测试执行的,你可以使用JUnit或TestNG Runner来运行黄瓜类
跑步者类看起来像这样
package cucumber;
import cucumber.api.junit.Cucumber;
import cucumber.api.CucumberOptions;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
@CucumberOptions(
glue={"stepDefinition"},
features = ("Feature"),
plugin = {"html:CucumberReports/cucumber-html-report"}
)
public class testRunner { }
所以你可以用JUnit来运行它(使用TestNG也会发生同样的事情) 因此,对于您的问题,您必须使用带有Junit的Cucumber和TestNG / Cucumber,并且必须使用JUnit / TestNG运行Runner类,同时将@Runwith注释设置为cucumber.class,如上例所示
如果您想使用JUnit的TestNG,这是一个可以使用的教程: https://medium.com/agile-vision/cucumber-bdd-part-2-creating-a-sample-java-project-with-cucumber-testng-and-maven-127a1053c180
答案 1 :(得分:0)
使用Cucumber进行这样的详尽测试会大大浪费您的时间和运行时间。
一般来说,编写良好的Cucumber场景至少比编写良好的单元测试慢一个数量级,所以如果你想进行详尽的测试,那么降低堆栈的测试是非常有益的。
此外,当您尝试在场景中指定所有内容时,Cucumber场景非常详细。大多数人所做的是使用大型复杂表格编写场景轮廓。这实现了创建大量慢速运行测试的双重否定,并使步骤定义更加复杂。在Cucumber中,你不能循环,当进行详尽的测试时,你必须指定每一个条件。这大大增加了变革的成本。
使用单元测试,您使用的是编程语言,因此您可以循环,映射和执行各种操作,以便以更少的工作量进行更多测试。
使用Cucumber擅长 - 描述行为和推动开发,而不是测试工具!!!
答案 2 :(得分:0)
你应该检查QAF-Gherkin QAF是建立在TestNG上进行黑盒测试的。您可以获得TestNG的所有功能,包括数据驱动功能,方法(场景)级并行执行等等。它也拥有自己的BDD实现。
答案 3 :(得分:0)
为什么不试试ginkgo4j?它使用Java 8 lambda来促进构建高度上下文的测试,就像你试图做的那样。上面的例子看起来有点像这样,例如: -
Describe("Successful Create Account with Valid Credentials", ()->{
Context("Given I am on Home Page", () -> {
BeforeEach({} -> {
// java code to get home page
});
Context("When I Navigate to Create Account Page", () -> {
BeforeEach({} -> {
// java code to navigate to create account page
});
Context("And I fill in "User Name" with <username>", () -> {
BeforeEach({} -> {
// java code to enter username
});
Context("And I fill in "Password" with <password>", () -> {
BeforeEach({} -> {
// java code to enter password
});
Context("And I fill in "email" with <email>", () -> {
BeforeEach({} -> {
// java code to enter email
});
It("Then I see title "Congratulation you create account", () -> {
// java code to click create button and assert success message
});
});
});
});
});
});
});
这样做的明显优势在于您永远不必离开Java。