TestNG - 设置“全局”变量,以便某些测试始终失败

时间:2017-08-09 19:05:50

标签: java selenium selenium-webdriver testng

我正在为我的电子商务公司编写Selenium UI测试。我们使用测试公司信用卡(不幸的是)有信用额度。有时在测试期间会达到信用限额,“用户”将被给予Auth拒绝消息,测试将失败。我想在某处设置一个标志,当设置为true时,将导致使用假信用卡的所有测试将自动失败。

以下是我的代码的基本设置:

Base.java

public class Base 
{    
    public WebDriver driver = null;     
    public WebDriver getDriver() 
    {
        return new ChromeDriver();
    }    
}

Page.java

public class Page extends Base 
{
    By ccField;
    By successElement;

    public Page(WebDriver driver) 
    {
        this.driver = driver;
        ccField = By.id("ccField");
        successElement = By.id("success");
    }

    public boolean sendCreditCard(String num) 
    {
        driver.findElement(ccField).sendKeys(num);
        return driver.findElement(successElement).isDisplayed();
    }

}

TestBase.java

public class TestBase extends Base 
{    
    @BeforeMethod
    public void setup() 
    {
        Base b = new Base();
        driver = b.getDriver();
    }

    @AfterMethod
    public void tearDown() 
    {
        driver.quit();
    }   
}

PageTests.java

public class PageTests extends TestBase 
{   
    Page page;
    boolean failedBecauseOfAuth = false;

    @BeforeMethod
    public void setup() 
    {
        page = new Page(driver);
    }

    @Test
    public void one() 
    {
        // Single ship (for example)
        boolean success = page.sendCreditCard("5555555555555555");
        Assert.assertTrue(success);
    }

    @Test
    public void two() 
    {
        // Multi ship (for example)
        boolean success = page.sendCreditCard("5555555555555555");
        Assert.assertTrue(success);
    }

}

基本上,如果由于auth拒绝错误导致one失败,我需要two在测试开始时自动失败。问题是,每次我设置一个标志(如authFailed = false作为PageTests.java的字段,然后在需要时设置authFailed = true)它会在下一次测试运行开始时重置

1 个答案:

答案 0 :(得分:1)

  1. 您应该将身份验证与其他逻辑分开,这样您就可以将它放到beforeclass方法中。这将导致两个测试失败。

  2. 你可以制作"两个"依赖于" one"。它将导致"两个"失败。虽然这样做不太好,但你应该知道这个功能:

    @Test(dependsOnMethods = { "one" })
    public void two() {...}
    
  3. 使authFailed静态,因此它将保留每个测试方法的值。

  4. 在我看来,最好的解决方案是#1,因为它将逻辑分开。你知道,独立是非常重要的。