2017-07-20 24 views
2

假設我有一個測試用例像黃瓜的場景輪廓得到場景的名字 -如何使用Java

*Scenario: Facebook login test 
GIVEN I am a Facebook user 
WHEN I enter my user name & password 
THEN login should be successful* 

我怎麼會從相應的步驟定義方法得到的方案名稱「我是一個Facebook用戶「或」我輸入我的用戶名&密碼「或」登錄應該成功「?

步驟定義方法 -

@Given("^I am a Facebook user$") 
public void method1() { 
//some coding 
//I want to get the scenario name here 
} 

@When("^I enter my user name & password$") 
public void method2() { 
//some coding 
//I want to get the scenario name here 
} 

@Then("^login should be successful$") 
public void method3() { 
//some coding 
//I want to get the scenario name here 
} 

回答

1

可以使用@Before鉤來獲得當前執行Scenario對象。

@Before 
public void beforeHook(Scenario scenario) { 
    this.sce = scenario 
    System......(scenario.getName()) 
    System......(scenario.getId()) 
} 

您可以在步驟定義中訪問存儲的方案對象。

+0

步驟定義類是一個singletone類,5-6個獨立的功能文件並行使用它。將場景名稱存儲在變量中對我的場景不起作用。 – Bappa

1

沒有@Bappa它可以,但你stepdefinition類是單身,你的測試是在平行,看到它可以通過與用於存儲線程安全的靜態哈希表變量增強它與下面的方法攻擊:

public class StepDefinitions{ 
private static HashMap<Integer,String> scenarios; 

public StepDefinitions(){ //or even inside of your singleton's getInstance(); 
if(scenarios == null) 
    scenarios = new HashMap<Integer,String(); 
} 

@Before 
public void beforeHook(Scenario scenario) { 
    addScenario(scenario.getName()); 
} 

@When("your step definition") 
public void stepDefinition1(){ 
    String scenario = getScenario(); //problem-o-solved here... 
} 


private void addScenario(String scenario){ 
    Thread currentThread = Thread.currentThread(); 
    int threadID = currentThread.hashCode(); 
    scenarios.put(threadID,scenario); 
} 

private String getScenario(){ 
    Thread currentThread = Thread.currentThread(); 
    int threadID = currentThread.hashCode(); 
    return scenarios.get(threadID); 
}