久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Java TestNG入門 -2注解annotation使用

 孟船長 2022-06-14 發(fā)布于內(nèi)蒙古

配置好了 Maven 接下來就可以新建項(xiàng)目了,。

1 新建Maven項(xiàng)目

新建成功以后會(huì)有一個(gè)pom.xml文件

2 添加依賴

我們要寫TestNG框架,,所以要加入TestNG依賴。

所有依賴都可以在TestNG repository官網(wǎng)找到:https:///

搜索testng

第一個(gè)就是我們要找的,,點(diǎn)擊TestNG,,進(jìn)入詳情頁:

在這里可以選擇要使用的TestNG版本 我們這里使用7.5版本,點(diǎn)擊7.5

復(fù)制這段代碼,,將其粘貼到pom.xml文件中

外層有一個(gè)標(biāo)簽,,以后將依賴直接添加到里面即可。

然后點(diǎn)一下右上角的同步按鈕,,7.5版本號不再顯示紅色,,就代表下載下來了


看一下項(xiàng)目結(jié)構(gòu)

其中java一般存放封裝好的通用方法;resources用于存放數(shù)據(jù)驅(qū)動(dòng)時(shí)的文件,,當(dāng)然你也可以自定義數(shù)據(jù)文件目錄,;test則用于寫測試用例,。

3 寫代碼

在test->java下新建package:com.demo.test,然后新建一個(gè)類叫TestNGDemo1

注意,TestNG是不需要main方法的,,只要添加了注解即可以直接運(yùn)行,。

可以在TestNG官網(wǎng)查看關(guān)于TestNG的文檔

https:///doc/documentation-main.html

注解

@Test

我們在類方法中編寫用例代碼

選擇第一個(gè),會(huì)自動(dòng)導(dǎo)入包

package com.demo.testng;

import org.testng.annotations.Test;

public class TestNGDemo1 {

@Test
public void test01(){
System.out.println("This is test01");
}

@Test
public void test03(){
System.out.println("This is test03");
}

@Test
public void test02(){
System.out.println("This is test02");
}
}

這里我將test02test03位置調(diào)整了一下,,目的是查看一下TestNG的執(zhí)行順序,,可以看到執(zhí)行結(jié)果:

仍然是按照01->02->03的順序進(jìn)行執(zhí)行的。

@BeforeMethod與@AfterMethod

我們有時(shí)候會(huì)要求每個(gè)方法前和每個(gè)方法后需要執(zhí)行一些操作,,我們就可以使用@BeforeMethod@AfterMethod方法

可以看到,,@Before***還有很多類似unittest和Pytest的執(zhí)行方式

package com.demo.testng;

import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class TestNGDemo1 {

@BeforeMethod
public void openBrowser(){
System.out.println("Open browser of @BeforeMethod");
}

@AfterMethod
public void closeBrowser(){
System.out.println("Close browser of @AfterMehtod");
}

@Test
public void test01(){
System.out.println("This is test01");
}

@Test
public void test03(){
System.out.println("This is test03");
}

@Test
public void test02(){
System.out.println("This is test02");
}
}

執(zhí)行代碼:

可以看到每個(gè)方法執(zhí)行前后都執(zhí)行了一次@BeforeMehtod和@AfterMethod。

@BeforeClass與@AfterClass

當(dāng)我們進(jìn)行Selenium自動(dòng)化測試時(shí),,經(jīng)常會(huì)有打開瀏覽器關(guān)閉瀏覽器的操作,,我們不會(huì)每個(gè)用例方法都執(zhí)行一次操作,而是在用例開始前和結(jié)束后整體執(zhí)行一次:

package com.demo.testng;

import org.testng.annotations.*;

public class TestNGDemo1 {

@BeforeClass
public void openBrowser(){
System.out.println("Open browser of @BeforeMethod");
}

@AfterClass
public void closeBrowser(){
System.out.println("Close browser of @AfterMehtod");
}

@Test
public void test01(){
System.out.println("This is test01");
}

@Test
public void test03(){
System.out.println("This is test03");
}

@Test
public void test02(){
System.out.println("This is test02");
}
}

執(zhí)行代碼:

@BeforeClass與@AfterClass是在每個(gè)類的執(zhí)行開始和結(jié)束執(zhí)行一次,。

方法名解釋
@BeforeSuite被注釋的方法在所有測試運(yùn)行前運(yùn)行
@AfterSuite被注釋的方法在所有測試運(yùn)行后運(yùn)行
@BeforeTest被注釋的方法在測試運(yùn)行前運(yùn)行
@AfterTest被注釋的方法在測試運(yùn)行后運(yùn)行
@BeforeClass被注釋的方法在當(dāng)前類的第一個(gè)測試方法調(diào)用前運(yùn)行
@AfterClass被注釋的方法在當(dāng)前類的所有測試方法調(diào)用后運(yùn)行
@BeforeMethod被注釋的方法在每一個(gè)測試方法調(diào)用前運(yùn)行
@AfterMethod被注釋的方法在每一個(gè)測試方法調(diào)用后運(yùn)行

整個(gè)流程的控制如圖:

@Test(enable=false)跳過用例

我們跳過test03用例,只需要在@Test注解中添加enable=false

package com.demo.testng;

import org.testng.annotations.*;

public class TestNGDemo1 {

@BeforeClass
public void openBrowser(){
System.out.println("Open browser of @BeforeMethod");
}

@AfterClass
public void closeBrowser(){
System.out.println("Close browser of @AfterMehtod");
}

@Test
public void test01(){
System.out.println("This is test01");
}

@Test(enabled = false)
public void test03(){
System.out.println("This is test03");
}

@Test
public void test02(){
System.out.println("This is test02");
}
}

執(zhí)行用例:

分組執(zhí)行

package com.demo.testng;

import org.testng.annotations.*;

public class TestNGDemo1 {

@BeforeClass
public void openBrowser(){
System.out.println("Open browser of @BeforeMethod");
}

@AfterClass
public void closeBrowser(){
System.out.println("Close browser of @AfterMehtod");
}

@Test(groups = {"groups01"})
public void test01(){
System.out.println("This is test01");
}

@Test(groups = {"groups02"})
public void test03(){
System.out.println("This is test03");
}

@Test(groups = {"groups01", "groups02"})
public void test02(){
System.out.println("This is test02");
}
}

但是如果以上方法直接執(zhí)行,,分組標(biāo)簽就不會(huì)生效,此時(shí)我們需要新建一個(gè)testng.xml文件,。這個(gè)文件不需要我們手動(dòng)去寫,,可以直接去下載一個(gè)插件:File->Setting->Plugins,搜索TestNG下載

下載好以后在項(xiàng)目中右鍵就會(huì)出現(xiàn)生成testng.xml文件的選項(xiàng),,這個(gè)一般在最下面

添加完成以后需要重新加載一下才會(huì)顯示出來

進(jìn)入文件后代碼都在一行,,只需要在選項(xiàng)Code->Reformat Code格式化一下代碼:

然后添加分組執(zhí)行的代碼:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http:///testng-1.0.dtd">
<suite name="All Test Suite">
<test verbose="2" preserve-order="true" name="C:/Users/UC504933/Desktop/JavaCode/TestNGDemo">
<groups>
<run>
<include name="groups01" />
</run>
</groups>
<classes>
<class name="com.demo.testng.TestNGDemo1"></class>
</classes>
</test>
</suite>

testng.xml文件中執(zhí)行代碼

可以看到執(zhí)行結(jié)果:

如果要不執(zhí)行某個(gè)分組,則把

<include name="groups01" />

改為

<exclude name="groups01" />

即可,。

依賴控制

@Test注解中添加dependsOnMethods = {"test01"},。

package com.demo.testng;

import org.testng.Assert;
import org.testng.annotations.*;

public class TestNGDemo2 {

@BeforeClass
public void openBrowser(){
System.out.println("Open browser of @BeforeMethod");
}

@AfterClass
public void closeBrowser(){
System.out.println("Close browser of @AfterMehtod");
}

@Test
public void test01(){
System.out.println("This is test01");
Assert.assertEquals(1,3);
}

@Test(dependsOnMethods = {"test01"})
public void test02(){
System.out.println("This is test02");
}

@Test
public void test03(){
System.out.println("This is test03");
}
}

這里我把test01添加了報(bào)錯(cuò)斷言,執(zhí)行時(shí)就可以看到用例跳過了test02,。而且這里需要注意,,當(dāng)添加了dependsOnMehtods以后執(zhí)行用例的順序變了?!救绻?yàn)證,,可以刪掉test01中的Assert語句】

可以看到由于test01報(bào)錯(cuò),test02被跳過了,。

testNG多線程

測試方法通過在@Test注解中配置threadPoolSize屬性進(jìn)入多線程模式,。參數(shù)解釋:

屬性描述
invocationCount執(zhí)行的次數(shù)
threadPoolSize線程池內(nèi)線程的個(gè)數(shù)
timeOut超時(shí)時(shí)間-毫秒

現(xiàn)在我們希望test02執(zhí)行五次,而且用多線程以加快執(zhí)行效率,。為了看清,,我給線程號打印出來。

package com.demo.testng;

import org.testng.Assert;
import org.testng.annotations.*;

public class TestNGDemo2 {

@BeforeClass
public void openBrowser(){
System.out.println("Open browser of @BeforeMethod");
}

@AfterClass
public void closeBrowser(){
System.out.println("Close browser of @AfterMehtod");
}

@Test
public void test01(){
System.out.println("This is test01");
Assert.assertEquals(1,1);
}

@Test(threadPoolSize = 5, invocationCount = 5, timeOut = 5000)
public void test02(){
long id = Thread.currentThread().getId();
System.out.println("This is test02 --->"+"Thread id: "+id);
}

@Test
public void test03(){
System.out.println("This is test03");
}
}

執(zhí)行代碼:

數(shù)據(jù)驅(qū)動(dòng)dataProvider

package com.demo.testng;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class TestNGDemo3 {

@DataProvider(name = "data")
public Object[][] dataList(){
Object[][] object;
return object = new Object[][]{
{"Package One", 1},
{"Package Two", 2},
{"Package Three", 3}
};
}

@Test(dataProvider = "data")
public void identyData(String name, int num){
System.out.println("包名:"+ name + " 編號:"+num);
}
}

執(zhí)行代碼:

可以看到數(shù)據(jù)以三個(gè)用例的方式執(zhí)行了三次。

以上就是TestNG基礎(chǔ)方法了,。

如果您覺得對您有幫助,,請幫忙點(diǎn)一下公眾號底部的廣告,點(diǎn)一下就可以,,謝謝~

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多