我应该如何编写TestNG测试用例,以便它们可以一个接一个地(顺序)运行?

时间:2016-10-26 08:21:46

标签: java eclipse selenium selenium-webdriver testng

我有这个TestNG类结构的项目: enter image description here

我想创建一个.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 -->

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

2 个答案:

答案 0 :(得分:0)

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

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

另一种方法是添加

@Test(dependsOnMethods = { "testThatWillBeExecutedBeforeThis" })

每个测试用例。

答案 1 :(得分:0)

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

WebDriver driver = new FirefoxDriver();

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