WebDriver Selenium 套件中的测试用于设置进一步的测试。有什么方法可以使我的测试不那么依赖于以前的'setup'测试?



我是软件测试的新手(3-4年),在一个组织中我是唯一的测试人员。不幸的是,在构建自动化测试套件时,我没有导师来帮助我。

我想克服的主要问题是测试失败,因为之前的测试失败了。这主要是因为WebDriver Selenium套件中的测试用于设置进一步的测试。有没有办法让我的测试不那么依赖于以前的"设置"测试?让我描述一个典型的场景:

要创建事务,以下内容是先决条件,必须首先在系统中进行设置。这些都是首先在现场进行的单独测试:

  • 来源国
  • 来源货币
  • 目的地国家
  • 目的地货币
  • 手续费
  • 代理配置文件
  • 发件人配置文件
  • 接收器配置文件

只有这样,我才能运行测试来实际创建事务。在某些情况下,在运行测试之前,需要执行更多的步骤来设置系统。例如,当目标货币测试失败时,就会出现问题。这将导致所有后续测试失败。

我该怎么做才能使测试更加独立,这样,如果以前的"设置"测试因任何正当原因失败,就不会影响其余的测试?我只想遵循最佳测试实践,在网上找不到这个问题的答案。

非常感谢。

如果您的测试可以独立通过,那么可以使用cucumber-guice注入来为每个场景独立打开浏览器。

您可能需要将您的测试安排为以下这样的场景

Scenario: set source country
Given source country is setup

Scenario: set source currency
Given source currency is setup

或者你可以用黄瓜的特征作为例子。在这种方法中,您可以在步骤defs中进行额外的解析,这取决于设置每个源的不同程度

Scenario Outline:  login registration 

Given these <source> are set up with <details>

Examples:
|source|details|
|"country" |"xyz"|
|"currency" |"abc"|      
...
...

cucumber-guice将为上述两种方法中的每个场景打开一个浏览器(黄瓜将每个示例行视为一个场景)

现在是实际的指导实施。要使用指南,您需要cucumber-guice依赖

<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-guice</artifactId>
<version>${cucumber.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>4.2.3</version>
<scope>test</scope>
</dependency>

这些是我用来为每个场景独立打开浏览器的类。在一个铬制造者类你做

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
public class ChromeManager extends DriverManager {
protected ChromeDriver driver;

@Override
protected WebDriver createDriver() {
System.setProperty("webdriver.chrome.driver", "/Users/../chromedriver");
return driver = new ChromeDriver(ChromeDriverService.createDefaultService());
}
@Override
public WebDriver getDriver() {
if (driver == null) {
this.createDriver();
}
return driver;
}
}

驾驶员工厂级

import org.openqa.selenium.WebDriver;
public class DriverFactory {
public WebDriver getManager() {
return new ChromeManager().getDriver();
}
}

Drivermanager类

import org.openqa.selenium.WebDriver;
public abstract class DriverManager {
protected abstract WebDriver createDriver();
public abstract WebDriver getDriver();
}

然后在全局类中

import org.openqa.selenium.WebDriver;
import io.cucumber.guice.ScenarioScoped;  

@ScenarioScoped

public class Global {
public WebDriver driver;
public WebDriverWait wait;

public Global() {
driver = new DriverFactory().getManager();
wait = new WebDriverWait(driver, 3000);
//any class you instantiate here will be injected in below initialIT class for each scenario
}

}

最后是你的测试班

import com.google.inject.Inject;     
import com.test.support.Global;    

public class InitialIT  {
public static  ChromeDriver driver ;

@Inject
Global global;


@Test
@Given("source country is setup")
public void setCountry() throws MalformedURLException {                 
global.driver.get(yourSite);                   
}
@Test
@Given("source currency is setup")
public void setCurrency() throws MalformedURLException {                 
global.driver.get(yourSite);                   
}

@After
public void closeBrowser() {    
global.driver.quit();
}
}

相关内容

  • 没有找到相关文章

最新更新