【问题标题】:How should I write TestNG test cases so that they can be run one after another (sequentially)?我应该如何编写 TestNG 测试用例,以便它们可以一个接一个(按顺序)运行?
【发布时间】:2016-10-26 08:21:45
【问题描述】:

我有一个具有这种结构的 TestNG 类的项目:

我想创建一个 .xml 文件(将来我将创建批处理文件以从 Jenkins 运行它)以便能够按顺序运行每个测试类。我应该如何编写每个测试?

这是我的脚本示例:

package CRM;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class logowanie {
WebDriver driver = new FirefoxDriver(); 


@Test
public void test() throws InterruptedException {

driver.findElement(By.id("username")).sendKeys("***");
driver.findElement(By.id("password")).sendKeys("***");
driver.manage().timeouts().implicitlyWait(6, TimeUnit.SECONDS);
driver.findElement(By.id("_submit")).click();
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);  
  }

@BeforeMethod
public void beforeTest() {

driver.manage().window().maximize();
driver.get("http://crm.serwis-grupowy-vgp.pl/login");
    }

@AfterMethod
public void afterTest() throws InterruptedException {
driver.findElement(By.xpath("//a[@href='/logout']")).click();
driver.quit();

     }}

这是 .xml 脚本:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false" preserve-order="true">
<test name="Test">
<classes>
  <class name="PP_MartynaDealer.podstrona_mcall_MI"/>
  <class name="PP_MartynaDealer.podstrona_HTG_czerw_sierp_MI"/>
  <class name="PP_MartynaDealer.podstrona_rbp_tab_wykresy_MI"/>
  <class name="PP_MartynaDealer.podstrona_cnptool_MI"/>
  <class name="PP_MartynaDealer.podstrona_zakup_MI"/>
  <class name="PP_MartynaDealer.podstrona_materialy_info_MI"/>
  <class name="PP_MartynaDealer.podstrona_raporty_od_0110_MI"/>
  <class name="PP_MartynaDealer.podstrona_HTG_wrze_gru_MI"/>
  <class name="PP_MartynaDealer.podstrona_materialy_z_wydarzen_MI"/>
  <class name="PP_MartynaDealer.podstrona_bonus_MI"/>
  <class name="PP_MartynaDealer.podstrona_bonus_tabele_MI"/>
  <class name="PP_MartynaDealer.podstrona_akcesoria_podstrony_MI"/>
  <class name="PP_MartynaDealer.podstrona_nora_podstrony_MI"/>
  <class name="PP_MartynaDealer.podstrona_moj_kalendarz_MI"/>
  <class name="PP_MartynaDealer.podstrona_akcesoria_MI"/>
  <class name="PP_MartynaDealer.podstrona_nora_MI"/>
  <class name="PP_MartynaDealer.podstrona_autopart_MI"/>
  <class name="PP_MartynaDealer.podstrona_wydarzenia_MI"/>
  <class name="PP_MartynaDealer.podstrona_pisma_okolne_MI"/>
  <class name="PP_MartynaDealer.podstrona_raporty_do_3009_MI"/>
  <class name="PP_MartynaDealer.podstrona_baza_marketingowa_MI"/>
  <class name="PP_MartynaDealer.logowanie_MartynaDealer"/>
  <class name="PP_MartynaDealer.podstrona_uzytkownicy_MI"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

在每个执行的每个测试都打开一个浏览器窗口的那一刻,在最后一个浏览器窗口打开后,测试从第一个窗口开始,并按顺序进行。 我应该以不同的方式编写测试,以便我可以按顺序运行它们吗?

【问题讨论】:

  • 我不明白你的问题。您的套件中已经有保留顺序,因此所有测试都将按照套件中提到的顺序运行...
  • 问题是 selenium 同时打开了与测试一样多的浏览器窗口,我希望它打开一个窗口执行测试关闭窗口并为套件中包含的每个测试重复该操作
  • 你不应该真的依赖订单:stackoverflow.com/questions/40349496

标签: java eclipse selenium selenium-webdriver testng


【解决方案1】:

我相信你看到很多浏览器窗口弹出的原因是因为下面这行

WebDriver driver = new FirefoxDriver();

类级别的这一行会导致浏览器在测试开始执行之前就被分离出来。您可能希望将此行(实例化部分而不是声明部分)移动到设置方法中。

【讨论】:

  • 我真的不明白我应该把这条线移到哪里,抱歉。当我将它移到 beforeMethod 时,@Test 部分出现错误 - 无法解析驱动程序。如果没有'WebDriver driver = new FirefoxDriver();',则表明所有命令都是未知的在他们面前
【解决方案2】:

你可以添加preserve-order="true",所以在你的xml中,它会像:

<test name="Test" preserve-order="true">

另一种方法是添加

@Test(dependsOnMethods = { "testThatWillBeExecutedBeforeThis" })

到您的每个测试用例。

【讨论】:

    猜你喜欢
    • 2018-02-04
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 2012-05-04
    相关资源
    最近更新 更多