考虑我有以下功能文件:
Login.feature
Feature: Login on website
Scenario: Login verification on site
Given Navigate to site login page
When User enters username 'admin1'
And User enters password 'admin1'
And User clicks on login button
Then User should not be able to log in successfully
Home.feature
Feature: Welcome Page Verification
Scenario: Verify the page that comes after login
Given Login is successfully done
When The page after login successfully appears
Then The test is done
在Home.feature文件中,我需要先执行Login.feature,然后调用home.feature。因此,当我从跑步者测试中执行回家时,它将依次执行登录然后回家。
RunnerTest.java
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(strict = false, features = {
"src/test/resources/Features/Home.feature",
}, glue = { "tests" }, plugin = "html:target/cucumber-reports", format = { "pretty",
"json:target/cucumber.json" }, tags = { "~@ignore" })
public class RunnerTest {}
谢谢&问候, MEGHA
答案 0 :(得分:1)
您不需要从第二个功能调用第一个功能。您需要做的是在第二个功能中有一个步骤可以让您登录。它可以通过调用您在实现第一个功能时创建的代码来实现此目的。
第一个功能是您在第一次实施登录时可能会写的内容。在执行此操作时,您将按步骤和代码调用这些步骤来登录您。
你应该创建的那种代码是(对不起所有的例子都是ruby我不做java)
然后你可以写一个辅助方法,例如
def login_as(user)
visit login_path
fill_in :email, with: user.email
fill_in :password, with: user.password
submit_form
end
现在在您的第二个功能中,您可以使用
Given I am an admin
When I login
并将这些步骤实现为
Given 'I am an admin' do
# note create_user is a method you would have created when doing user
# registration/creation
@i = create_user(type: admin)
end
When "I login" do
login_as @i
end
在某处你会有一些辅助方法
module StepHelperMethods
def create_user
...
return user
end
def login_as(user)
...
end
end
World StepHelperMethods
您的代码重用总是发生在更低的级别。理想情况下,您应该重新使用之前创建的辅助方法来使其他方案正常工作。您也可以直接调用步骤(嵌套步骤),但这是一件非常糟糕的事情。
答案 1 :(得分:0)
试试这个:
创建RunnerLogin
课程以调用Login.feature
。
在您的步骤类中,在实现该方法的方法中
Given Login is successfully done
,执行以下操作:
@Given("^Login is successfully done$")
public void login_is_successfully_done() {
Thread T1 = new Thread(new Thread(() -> {
JUnitCore jExecFeature = new JUnitCore();
Result result = jExecFeature.run(RunnerLogin.class);
}));
T1.start();
T1.join();
}
答案 2 :(得分:0)
因为每个功能都在步骤定义中实现了一个方法,所以您无需在该方式中编写功能,只需调用已实现的方法即可。
对于您的应用程序经常使用的功能(例如Login)的最佳解决方案是使用Hepler方法。 您可以将这些方法实现为全局方法,并在每个步骤的定义文件中使用它们。
public void LoginUserGlobal(String user,String pass)抛出Throwable { LoginPageObjects LP =新的LoginPageObjects(驱动程序);
LP.user().sendKeys(user);
LP.pass().sendKeys(pass);
LP.loginButton().click();
}
如果您需要在任何功能中使用它,您将对其进行编码,例如:
@When(“ ^用户使用”([^^]] public void user_logs_in_with_something_and_something(String user,String pass)抛出Throwable { GlobalClassWhereIsYourLoginMethod Lin =新的GlobalClassWhereIsYourLoginMethod(驱动程序) LoginUserGlobal(user,pass); }
或者如果它不是应用程序的一部分,则可以从已经实现的步骤定义方法中调用它。