我是软件测试的新手(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();
}
}