ExtentReports - 单独的驱动程序实例的单独步骤
ExtentReports - separate steps for separate driver instances
我有一个使用 ExtentReports 的 Selenium/Java 项目。我们使用 PageFactory 模型,并有一个 BasePageFactory 负责所有测试准备工作。
Before 方法大致如下所示:
@Before
public void beforeTest() throws MalformedURLException {
this.driver = DriverBase.getDriver();
driver.manage().window().maximize();
Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
browserName = cap.getBrowserName();
ExtentReportsWrapper.startTest(getTestName(), "Browser: " + browserName + "<br>" + getDescription());
}
ExtentReports 的包装器负责报告,它是从 junit TestWatcher 调用的。我们还使用此方法发布 'info messages' - 这是测试步骤。这些通常放在 PageObject 方法中 - 每次该方法执行手动测试人员会执行的步骤(单击、发送键等)
public static void postInfoMessage(String message) {
getRunningTest().log(Status.INFO, message + ".");
}
我们最近开始编写打开多个驱动程序实例的测试。这样做的原因是测试,例如,用户权限。我们希望在不同的情况下执行此操作,以避免必须一直登录和注销以检查权限。相反,一个用户正在一个浏览器中更改权限,而另一个用户在第二个浏览器中尝试这些权限。
我的问题是 ExtentReports,因为它们将所有步骤混合在一起,因为报告实例绑定到 BasePageFactory 而不是每个浏览器实例。
示例简单测试,其中在一个实例中创建新用户,然后在另一个实例中登录:
@Test
public void run() throws ItemNotFoundException {
UserFacade userFacade = new UserFacade(driver);
UserParams userParams = new UserParams();
userParams.setLanguage(Language.ENGLISH);
UserData userData = userFacade.createNewUser(userParams); //contains multiple postInfoMessage()
WebDriver newDriver = this.getNewWebDriver();
this.loginAnotherUser(newDriver, userParams.getNick(), userParams.getPassword()); //contains multiple postInfoMessage()
this.closeWebDriver(newDriver);
userFacade.deleteUser(this.userData); //contains multiple postInfoMessage()
}
如您所见,报告中打印了多个步骤作为信息消息,但这些步骤是组合在一起的,如果测试时间非常长,则很难说出哪些步骤在哪些地方执行实例.
UserFacade 使用来自 BasePageFactory 的驱动程序实例,测试 class 对其进行了扩展。所有新实例都是通过 getNewWebDriver()
创建的
我看到 ExtentReports 提供了类似子节点的东西,但我无法找到关于它们的太多信息或做出任何可用的解决方案。如果有任何帮助,我将不胜感激。
我有一个简单的例子,我用它来学习 extentreports(虽然不太成功)。也许它有帮助...
ExtentReports extent = new ExtentReports(Use your config);
ExtentTest test = extent.startTest("Hello","Yeah");
extent.loadConfig(ExtentReports.class, "extent-config.xml");
test.log(LogStatus.PASS, "Before Step details");
ExtentTest child1 = extent.startTest("Child 1");
child1.log(LogStatus.INFO, "Info");
child1.log(LogStatus.PASS, "Pass");
ExtentTest child2 = extent.startTest("Child 2");
child2.log(LogStatus.INFO, "Info");
child2.log(LogStatus.PASS, "Pass");
test.appendChild(child1).appendChild(child2);
test.log(LogStatus.PASS, "After Step details");
extent.endTest(test);
extent.flush();
extent.close();
生成的报表,可以看到子节点消息是单独添加的。
我有一个使用 ExtentReports 的 Selenium/Java 项目。我们使用 PageFactory 模型,并有一个 BasePageFactory 负责所有测试准备工作。
Before 方法大致如下所示:
@Before
public void beforeTest() throws MalformedURLException {
this.driver = DriverBase.getDriver();
driver.manage().window().maximize();
Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
browserName = cap.getBrowserName();
ExtentReportsWrapper.startTest(getTestName(), "Browser: " + browserName + "<br>" + getDescription());
}
ExtentReports 的包装器负责报告,它是从 junit TestWatcher 调用的。我们还使用此方法发布 'info messages' - 这是测试步骤。这些通常放在 PageObject 方法中 - 每次该方法执行手动测试人员会执行的步骤(单击、发送键等)
public static void postInfoMessage(String message) {
getRunningTest().log(Status.INFO, message + ".");
}
我们最近开始编写打开多个驱动程序实例的测试。这样做的原因是测试,例如,用户权限。我们希望在不同的情况下执行此操作,以避免必须一直登录和注销以检查权限。相反,一个用户正在一个浏览器中更改权限,而另一个用户在第二个浏览器中尝试这些权限。
我的问题是 ExtentReports,因为它们将所有步骤混合在一起,因为报告实例绑定到 BasePageFactory 而不是每个浏览器实例。
示例简单测试,其中在一个实例中创建新用户,然后在另一个实例中登录:
@Test
public void run() throws ItemNotFoundException {
UserFacade userFacade = new UserFacade(driver);
UserParams userParams = new UserParams();
userParams.setLanguage(Language.ENGLISH);
UserData userData = userFacade.createNewUser(userParams); //contains multiple postInfoMessage()
WebDriver newDriver = this.getNewWebDriver();
this.loginAnotherUser(newDriver, userParams.getNick(), userParams.getPassword()); //contains multiple postInfoMessage()
this.closeWebDriver(newDriver);
userFacade.deleteUser(this.userData); //contains multiple postInfoMessage()
}
如您所见,报告中打印了多个步骤作为信息消息,但这些步骤是组合在一起的,如果测试时间非常长,则很难说出哪些步骤在哪些地方执行实例.
UserFacade 使用来自 BasePageFactory 的驱动程序实例,测试 class 对其进行了扩展。所有新实例都是通过 getNewWebDriver()
创建的我看到 ExtentReports 提供了类似子节点的东西,但我无法找到关于它们的太多信息或做出任何可用的解决方案。如果有任何帮助,我将不胜感激。
我有一个简单的例子,我用它来学习 extentreports(虽然不太成功)。也许它有帮助...
ExtentReports extent = new ExtentReports(Use your config);
ExtentTest test = extent.startTest("Hello","Yeah");
extent.loadConfig(ExtentReports.class, "extent-config.xml");
test.log(LogStatus.PASS, "Before Step details");
ExtentTest child1 = extent.startTest("Child 1");
child1.log(LogStatus.INFO, "Info");
child1.log(LogStatus.PASS, "Pass");
ExtentTest child2 = extent.startTest("Child 2");
child2.log(LogStatus.INFO, "Info");
child2.log(LogStatus.PASS, "Pass");
test.appendChild(child1).appendChild(child2);
test.log(LogStatus.PASS, "After Step details");
extent.endTest(test);
extent.flush();
extent.close();
生成的报表,可以看到子节点消息是单独添加的。