ソフトウェアテスト-TestNGは知っている必要があります

大きな牛の人工知能のチュートリアルを共有します。ゼロベース!わかりやすい!面白くてユーモラス!あなたも人工知能チームに参加してください!http://www.captainbed.netをクリックしてください

TestNGには、注目に値する使いやすい機能がいくつかあります。

  • 有名なアノテーション機能

  • テストグループの概念

  • マルチスレッドテスト

  • 依存テスト方法、並列テスト、負荷テスト、部分的な障害をサポート

それでは、TestNGにはこれらの特徴がありますが、それをフレームワークに統合して使用するにはどうすればよいでしょうか。

ステップ1:Java環境が構成されていることを確認する必要があります。

2番目のステップ:

1.プロジェクトでMavenが構成されている場合は、次の依存関係を導入するだけです

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
</dependency>

2. Mavenがない場合は、TestNG.jarを直接インポートできます。

3番目のステップ:テストビジネスロジックを記述し、コードにTestNGアノテーションを挿入します

ステップ4:TestNGに対応する構成ファイルtestng.xmlまたはbuild.xmlでテスト情報を構成します

ステップ5:TestNGを実行するだけ

アノテーションの利点については前に説明したので、最も広く使用されている@Testアノテーションから始めましょう。@Testでマークされたメソッドまたはクラスは、対応するテストケースです。以下のコードに示すように、runTest1とrunTest2は、私たち自身が作成した2つのテストケースです。


package com.tester;

import org.testng.annotations.Test;

public class TestInterface {

    @Test
    public void runTest1() {
        System.out.println("@Test - runTest1");
    }

    @Test
    public void runTest2() {
        System.out.println("@Test - runTest2");
    }
}

@Testはとても簡単ですか?いいえ、その本質は次のパラメータにあります。

  • グループ:テストが属するグループであるグループテストは、特定のグループのすべてのテストを実行できます

  • dependsOnMethods、dependsOnGroups:依存テスト、1つのテストは別のテストの実行結果に依存します

  • expectedExceptions:例外テスト

  • dataProvider:パラメーター化されたテスト、テストにパラメーターを渡します

  • 有効:テストを無視し、テストを実行しない

  • timeOut、threadPoolSize、invocationCount、successPercentage:同時テスト、同時テストのさまざまなパラメーターの設定

  • alwaysRun:trueの場合、とにかく実行されます

今回は、最初にTestNGのイノベーションであるグループテストを紹介します。JUnitフレームワークには存在せず、テストグループ内のすべてのテストケースを実行できます。テストケースが属するグループを宣言できるだけでなく、他のグループを含めるようにグループを指定することもできます。次に、TestNGを呼び出して、特定のグループのセット(または正規表現)を含め、別のセットを除外するように要求できます。これにより、テストのパーティション分割方法に最大の柔軟性がもたらされます。2つの異なるテストセットを連続して実行する場合は、何も再コンパイルする必要はなく、異なるグループを実行するだけです。


package com.tester;

import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;

public class TestGroup {

    @Test(groups = "appium-test")
    public void runAppium() {
        System.out.println("runAppium()");
    }

    @Test(groups = "appium-test")
    public void runAppium1() {
        System.out.println("runAppium1()");
    }

    @Test(groups = "interface-test")
    public void testConnectOracle() {
        System.out.println("testConnectOracle()");
    }

    @Test(groups = "interface-test")
    public void testInterface() {
        System.out.println("testInterface()");
    }
}

上記のコードでは、2つのテストグループappium-testとinterface-testが宣言されており、各テストグループの下に2つのテストケースがあることがわかります。次のコードに示すように、クラス全体がテストグループとして直接分類される場合もあります。


package com.tester;

import org.testng.annotations.Test;

@Test(groups = "selenium-test")
public class TestSelenium {

    public void runSelenium() {
        System.out.println("runSelenium()");
    }

    public void runSelenium1() {
        System.out.println("runSelenium()1");
    }
}

それはどのように機能しますか?上記のように、対応するtestng.xmlを構成する必要があります。対応するtestng.xmlを次のように記述します。


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="TestAll">
    <!-- 只跑selenium-test这个测试组 -->
    <test name="selenium">
        <groups>
            <run>
                <include name="selenium-test" />
            </run>
        </groups>

        <classes>
            <class name="com.tester.TestSelenium" />
            <class name="com.tester.TestGroup" />
        </classes>
    </test>
</suite>

もちろん、テストメソッドまたはクラスは同時に複数のグループに属することもできます。

@Test(groups = {"appium","uiautomator"})
public void testUI() {
    System.out.println("testUI");
}

次に、@ Testのこのアノテーションのパラメーターについて説明しましょう。

groupsパラメーターに加えて、@ Testにはさらに2つの重要なパラメーターdependsOnMethodsとdependsOnGroupsがあります。これら2つのパラメーターを使用して、依存関係テストを実行できます。

依存関係テストとは何ですか?テストケースを特定の順序で呼び出したり、メソッド間でデータや状態を共有したりする必要がある場合があります。現時点では、dependsOnMethodsまたはdependsOnGroupsを使用して、依存メソッドが正常に実行された後にのみアノテーション付きメソッドが実行されることを宣言できます。

package com.tester;

import org.testng.annotations.Test;

public class App {

    @Test(dependsOnMethods = { "method1" })
    public void method2() {
        System.out.println("This is method 2");
    }
    
    @Test
    public void method1() {
        System.out.println("This is method 1");
    }

}

method2のアノテーションはdependsOnMethods = {"method1"}を宣言します。つまり、method1が正常に実行されて渡された後、method2を実行する必要があります。method1が実行に失敗した場合、method2は実行されません。たとえば、インターフェイス自動化フレームワークでは、一部のインターフェイスがログイン状態に依存しているため、依存関係テストが大きな役割を果たす可能性があります。これらのインターフェースのメソッドは、ログインインターフェースに依存するように宣言できます。ログインインターフェースが成功した後、次のインターフェースを実行する前にログイン状態を取得します。

グループテストは上記のとおりです。グループテストと依存関係テストの組み合わせはdependsOnGroupsです。

package com.tester;

import org.testng.annotations.Test;

// 声明这个类中的方法都是deploy组的
@Test(groups = "deploy")
public class TestServer {
    @Test
    public void deployServer() {
        System.out.println("Deploying Server...");
    }

    // 只有deployServer通过后才跑
    @Test(dependsOnMethods = "deployServer")
    public void deployBackUpServer() {
        System.out.println("Deploying Backup Server...");
    }
}
package com.tester;

import org.testng.annotations.Test;

public class TestDatabase {

    //属于db组
    //只有deploy组全部通过后才跑
    @Test(groups="db", dependsOnGroups="deploy")
    public void initDB() {
        System.out.println("This is initDB()");
    }

    //属于db组
    //只有initDB方法通过后才会跑
    @Test(dependsOnMethods = { "initDB" }, groups="db")
    public void testConnection() {
        System.out.println("This is testConnection()");
    }
}

上記のコードでは、dependsOnMethodsとdependsOnGroupsを組み合わせて使用​​しています。TestServerクラスのすべてのメソッドはデプロイグループに属します。initDBメソッドはデプロイグループが渡された後にのみ実行され、testConnectionはinitDBが渡された後にのみ実行されます。

依存関係のテストについて説明した後、例外テストのexpectedExceptionsについて説明しましょう。テスト中に例外が発生すると予想される場合は、expectedExceptionsを追加して、予想される例外テストを実行できます。

package com.tester;

import org.testng.annotations.Test;

public class TestRuntime {

    @Test(expectedExceptions = ArithmeticException.class)
    public void divisionWithException() {
        int i = 1 / 0;
        System.out.println("After division the value of i is :"+ i);
    }
}

上記のコードでは、0で除算すると、間違いなくArithmeticExceptionが不足します。例外を宣言して、予期される例外テストを実行できます。

時々、私たちが書いたコードの準備ができておらず、テストケースはメソッド/コードが失敗する(または成功する)かどうかをテストする必要があります。(enabled = false)このテストケース無効にするために使用できます


package com.tester;

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestIgnore {

    @Test // 默认 enable=true
    public void test1() {
        Assert.assertEquals(true, true);
    }

    @Test(enabled = true)
    public void test2() {
        Assert.assertEquals(true, true);
    }

    @Test(enabled = false)
    public void test3() {
        System.out.println("俺没有执行");
        Assert.assertEquals(true, true);
    }
}

enabled = falseを宣言するtest3メソッドは実行されません。

これとは逆のパラメータ、alwaysRunもあります。alwaysRun = trueが宣言されている場合は、何があっても実行されます。


package com.tester;

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestAlwaysRun {

    @Test // 默认 enable=true
    public void test1() {
        Assert.assertEquals(true, false);
    }

    @Test(dependsOnMethods = { "test1" },alwaysRun = true)
    public void test2() {
        Assert.assertEquals(true, true);
    }
}

上記のコードでは、test2はtest1に依存していますが、test1は、trueとfalseが等しく、必然的に失敗することを表明しています。依存テストの場合、test2は絶対に実行されません。ただし、test2はalwaysRun = trueを宣言しているため、test2は引き続き実行されます。

TestNGの非常に興味深い機能は、パラメーターテストです。ほとんどの場合、ビジネスロジックが膨大でさまざまな量のテストを必要とするようなテストシナリオに遭遇します。パラメトリックテストにより、開発者は異なる値を何度も使用して同じテストを実行できます。たとえば、インターフェース自動化フレームワークでは、インターフェースのビジネスロジックが正しいかどうかをテストするために、インターフェーステストで入力パラメーターに異なる値を割り当てる必要があることを誰もが知っています。現時点では、を使用すると非常に便利です。 TestNG。

TestNGを使用すると、testng.xmlとデータプロバイダーを使用するという2つの異なる方法でパラメーターテストメソッドを直接渡すことができます。

xmlを使用してパラメーターを渡す

xmlを介したパラメーターの受け渡しは、@ Testアノテーションのパラメーター@Parameterに適用する必要があります。

TestParameterXML.javaという名前を作成します。そのコードは次のとおりです。

package com.tester;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class TestParameterXML {

    @Test
    @Parameters({ "dbconfig", "poolsize" })
    public void createConnection(String dbconfig, int poolsize) {

        System.out.println("dbconfig : " + dbconfig);
        System.out.println("poolsize : " + poolsize);
}

testng.xmlという名前 ファイルを作成します。コードは次のとおりです。


<?xml version="1.0" encoding="UTF-8"?>
<suite name="test-parameter">

    <test name="example1">

        <parameter name="dbconfig" value="db.properties" />
        <parameter name="poolsize" value="10" />

        <classes>
            <class name="com.yiibai.TestParameterXML" />
        </classes>

    </test>
    
</suite>

まず、testng.xmlが表示され、それぞれdbconfigとpoolsizeの2つの<parameter>が宣言され、このTestParameterXML.javaが@Parametersで宣言され、createConnectionがnamedに対応する2つのパラメーターであるため、xmlで定義された値が次のメソッドに渡されます。印刷。

@DataProviderを介してパラメーターを渡します

比較的面倒なxmlを介してパラメーターを渡すだけです。@ DataProviderを使用すると、パラメーターをより柔軟に渡すことができます。

TestParameterDataProvider.javaという名前の ファイルを作成しますコードは次のとおりです。

package com.tester;

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

public class TestParameterDataProvider {

    @Test(dataProvider = "provideNumbers")
    public void test(int number, int expected) {
        Assert.assertEquals(number + 10, expected);
    }

    @DataProvider(name = "provideNumbers")
    public Object[][] provideData() {

        return new Object[][] { { 10, 20 }, { 100, 110 }, { 200, 210 } };
    }
    
}

@Test(dataProvider = "provideNumbers"和@DataProvider(name = "provideNumbers")

の名前に対応します。@DataProviderを使用してデータセットを宣言すると、対応するマッチングメソッドがデータセット内のパラメーターを取得し、順番に対応できます。コード実行の結果は次のとおりです。


[TestNG] Running:
  \Users\abc\AppData\Local\Temp\testng-eclipse--1925148879\testng-customsuite.xml

PASSED: test(10, 20)
PASSED: test(100, 110)
PASSED: test(200, 210)

===============================================
    Default test
    Tests run: 3, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.XMLReporter@1b40d5f0: 13 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@6ea6d14e: 34 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@4563e9ab: 7 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@2aaf7cc2: 69 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@45c8e616: 4 ms

もちろん、@ DataProviderは基本的な型をサポートするだけでなく、オブジェクトパラメータも実装します。

package com.tester;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

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

public class TestParameterDataProvider2 {

    @Test(dataProvider = "dbconfig")
    public void testConnection(Map<String, String> map) {

        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("[Key] : " + entry.getKey() + " [Value] : " + entry.getValue());
        }
    }

    @DataProvider(name = "dbconfig")
    public Object[][] provideDbConfig() {
        Map<String, String> map = new HashMap<String, String>();
        map.put("jdbc.driver", "com.mysql.jdbc.Driver");
        map.put("jdbc.url", "jdbc:mysql://localhost:3306/test");
        map.put("jdbc.username", "root");
        map.put("jdbc.password", "123456");
        return new Object[][] { { map } };
    }
}

その後、最終的な実行結果は次のようになります。


[TestNG] Running:
  \Users\abc\worksp\testng\ParameterTest\src\main\java\com\yiibai\testng.xml

path => F:\worksp\testng\ParameterTest\db.properties
drivers : com.mysql.jdbc.Driver
connectionURL : jdbc:mysql://localhost:3306/test
username : root
password : 123456

Tue May 02 23:15:52 CST 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

===============================================
test-parameter
Total tests run: 1, Failures: 0, Skips: 0
===============================================

最後に、新しい扉を開くことができるTestNGのITestContextと組み合わせて使用​​される別の使用法があります。


package com.tester;

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

public class TestParameterDataProvider4 {

    @Test(dataProvider = "dataProvider", groups = {"groupA"})
    public void test1(int number) {
        Assert.assertEquals(number, 1);
    }

    @Test(dataProvider = "dataProvider", groups = "groupB")
    public void test2(int number) {
        Assert.assertEquals(number, 2);
    }

    @DataProvider(name = "dataProvider")
    public Object[][] provideData(ITestContext context) {
        Object[][] result = null;

        for (String group : context.getIncludedGroups()) {

            System.out.println("group : " + group);

            if ("groupA".equals(group)) {
                result = new Object[][] { { 1 } };
                break;
            }

        }

        if (result == null) {
            result = new Object[][] { { 2 } };
        }
        return result;

    }
}

testng.xmlという名前のファイルを作成します。コードは次のとおりです。


<?xml version="1.0" encoding="UTF-8"?>
<suite name="test-parameter">

    <test name="example1">

        <groups>
            <run>
                <include name="groupA" />
            </run>
        </groups>

        <classes>
            <class name="com.tester.TestParameterDataProvider4" />
        </classes>

    </test>

</suite>

xmlでgroupAを実行することを宣言する場合、if( "groupA" .equals(group))の判断を入力します。最終的な実行結果は次のとおりです。


[TestNG] Running:
  \Users\abc\worksp\testng\ParameterTest\src\main\java\com\yiibai\testng4.xml

group : groupA

===============================================
test-parameter
Total tests run: 1, Failures: 0, Skips: 0
===============================================

同時テスト

同時テストは実際にはすべてのテストをマルチスレッドモードで実行しているため、最大の実行速度を得ることができ、実行時間を大幅に節約できます。もちろん、並行操作にも代償があります。つまり、コードはスレッドセーフである必要があり、実行中のシーンは排他的ではありません。テストコードで共有変数をできるだけ使用しないことをお勧めします。実際に使用する場合は、同期キーワードを慎重に使用して、共有変数をロックおよび同期する必要があります。そうしないと、実行時にユースケースが不安定になる可能性があります。もちろん、これをストレステスト用のセレンと組み合わせたり、ストレステスト用のインターフェース自動化フレームワークと組み合わせて使用​​することもできます。一つずつ来ましょう。

1.試験方法で直接指定する

場合によっては、httpインターフェイスなどのテストケースで同時テストを実行する必要があります。つまり、インターフェイスを繰り返し呼び出す必要があります。洗練されたサポートメソッドもTestNGで提供され、@ TestタグでthreadPoolSizeとinvocationCountを指定します。これは、テストメソッドで直接指定された実装です。

package com.tester;

import java.text.SimpleDateFormat;
import java.util.Date;

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


public class TestClass1 {
    private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
    @BeforeClass
    public void beforeClass(){
        System.out.println("Start Time: " + df.format(new Date()));
    }

    @Test(enabled=true, dataProvider="testdp", threadPoolSize=2, invocationCount=5, successPercentage=98)
    public void test(String dpNumber) throws InterruptedException{
        System.out.println("Current Thread Id: " + Thread.currentThread().getId() + ". Dataprovider number: "+ dpNumber);
        Thread.sleep(5000);
    }

    @DataProvider(name = "testdp", parallel = true)
    public static Object[][]testdp(){
        return new Object[][]{
            {"1 "},
            {"2 "}
        };
    }

    @AfterClass
    public void afterClass(){
        System.out.println("End Time: " + df.format(new Date()));
    }
}

このうち、invocationCount = 5はこのテストメソッドを5回実行する必要があることを意味し、threadPoolSize = 2は2つのスレッドを開いて実行することを意味し、successPercentage = 98は成功率が98%を超え、成功したと見なされることを意味します。

@DataProvider(name = "testdp"、parallel = true)、parallel属性はデフォルトでfalseに設定され、このデータソースを使用するテストメソッドを同時に実行できないことを示します。parallel属性はtrueに設定されており、このデータソースを使用するテストメソッドを同時に実行できることを示しています。

まず、次のように操作の結果を見てみましょう。

Start Time: 2019-10-10 14:10:43
[ThreadUtil] Starting executor timeOut:0ms workers:5 threadPoolSize:2
Current Thread Id: 14. Dataprovider number: 2
Current Thread Id: 15. Dataprovider number: 2
Current Thread Id: 12. Dataprovider number: 1
Current Thread Id: 13. Dataprovider number: 1
Current Thread Id: 16. Dataprovider number: 1
Current Thread Id: 18. Dataprovider number: 1
Current Thread Id: 17. Dataprovider number: 2
Current Thread Id: 19. Dataprovider number: 2
Current Thread Id: 21. Dataprovider number: 2
Current Thread Id: 20. Dataprovider number: 1
End Time: 2019-10-10 14:10:58

dpのスレッドプールと並行スレッドプールは、2つの独立したスレッドプールです。ここでのスレッドプールは複数のメソッドを設定するために使用され、各メソッドのテストデータはdpによって提供されます。dpに5セットのデータがある場合、実際には10回の実行で、インターフェイスが5回調整されるたびにこのインターフェース呼び出しの総数は10 * 5 = 50回です。threadPoolSizeで指定された5つのスレッドのうち、各スレッドがメソッドを個別に調整するときに、使用されるdpが同時実行もサポートしている場合、テストデータを同時に実行するための新しいスレッドプール(dpThreadPool)が作成されます。

2.testng.xmlを介して設定します


package com.tester;

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

public class ParallelClassesTestOne
{
    @BeforeClass
    public void beforeClass() {
        long id = Thread.currentThread().getId();
        System.out.println("Before test-class. Thread id is: " + id);
    }
    @Test
    public void testMethodOne() {
        long id = Thread.currentThread().getId();
        System.out.println("Sample test-method One. Thread id is: " + id);
    }
    @Test
    public void testMethodTwo() {
        long id = Thread.currentThread().getId();
        System.out.println("Sample test-method Two. Thread id is: " + id);
    }
    @AfterClass
    public void afterClass() {
        long id = Thread.currentThread().getId();
        System.out.println("After test-class. Thread id is: " + id);
    }
}

package com.tester;

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

public class ParallelClassesTestTwo
{
    @BeforeClass
    public void beforeClass() {
        long id = Thread.currentThread().getId();
        System.out.println("Before test-class. Thread id is: " + id);
    }
    @Test
    public void testMethodOne() {
        long id = Thread.currentThread().getId();
        System.out.println("Sample test-method One. Thread id is: " + id);
    }
    @Test
    public void testMethodTwo() {
        long id = Thread.currentThread().getId();
        System.out.println("Sample test-method Two. Thread id is: " + id);
    }
    @AfterClass
    public void afterClass() {
        long id = Thread.currentThread().getId();
        System.out.println("After test-class. Thread id is: " + id);
    }
}

新しいtestng.xmlを作成します

<suite name="Test-class Suite" parallel="classes" thread-count="2" >
  <test name="Test-class test" >
    <classes>
      <class name="com.tester.ParallelClassesTestOne" />
      <class name="com.tester.ParallelClassesTestTwo" />
    </classes>
  </test>
</suite>

Eclipseでファイルを選択し、TestNGテストスイートとして実行します。コンソールに次の出力が表示されます。


Before test-class. Thread id is: 10
Before test-class. Thread id is: 9
Sample test-method One. Thread id is: 9
Sample test-method One. Thread id is: 10
Sample test-method Two. Thread id is: 10
After test-class. Thread id is: 10
Sample test-method Two. Thread id is: 9
After test-class. Thread id is: 9

testngにはテスト、クラス、メソッドレベルの同時実行性があるため、testng.xmlのsuiteタグの下に以下を設定できます。

<suite name="Testng Parallel Test" parallel="tests" thread-count="5">

説明:現在のテスト計画の実行中、各テストケースの実行に個別のスレッドが使用され(テストケースのテストメソッドは1つのスレッドを共有します)、最大4つのスレッドが同時に使用されます。

<suite name="Testng Parallel Test" parallel="classes" thread-count="5">

注:現在のテスト計画の実行中、各テストクラスの実行には個別のスレッドが使用され(テストクラスのテストメソッドは1つのスレッドを共有します)、最大4つのスレッドが同時に使用されます。

<suite name="Testng Parallel Test" parallel="methods" thread-count="5">

注:現在のテスト計画の実行中、各テストメソッドの実行には個別のスレッドが使用され、最大4つのスレッドが同時に使用されます。

実行順序に注釈を付ける

  • @BeforeSuite:すべてのテストが実行される前に、アノテーション付きメソッドが実行されます

  • @AfterSuite:すべてのテストが実行された後にアノテーション付きメソッドが実行されます

  • @BeforeTest:注釈付きメソッドは、テストが実行される前に実行されます

  • @AfterTest:アノテーション付きメソッドは、テストの実行後に実行されます

  • @BeforeGroups:構成されたメソッドは、リスト内のひょうたんの前に実行されます。このメソッドは、これらのグループに属する最初のテストメソッドが呼び出される直前に実行されることが保証されています。

  • @AfterGroups:構成されたメソッドは、リスト内のひょうたんの後に実行されます。このメソッドは、これらのグループに属する最後のテストメソッドが呼び出された直後に実行されることが保証されています

  • @BeforeClass:アノテーション付きメソッドは、現在のクラスの最初のテストメソッドが呼び出される前に実行されます

  • @AfterClass:アノテーション付きメソッドは、現在のクラスのすべてのテストメソッドが呼び出された後に実行されます

  • @BeforeMethod:アノテーション付きメソッドは各テストメソッド呼び出しの前に実行されます

  • @AfterMethod:アノテーション付きメソッドは各テストメソッド呼び出しの後に実行されます

メソッドのライフサイクルをテストする

  1. @BeforeSuite(1回実行)

  2. @BeforeClass(1回実行)

  3. @BeforeMethod(N回実行されたN個のテストメソッド)

  4. @Test Testメソッド(このアノテーションは、クラスに複数、メソッドに1つを示す場合があります)

  5. @AfterMethod(N回実行されたN個のテストメソッド)

  6. @AfterClass(1回実行)

  7. @AfterSuite(1回実行)

testng.xmlの概要

testng.xmlは、すべてのテストをxmlに記録するファイルです。これは、テストスイートのランタイム定義を記述し、testngでテストを実行するための最大の作業単位でもあります。testng.xmlファイルはありませんが、テストは簡単に実行できます。しかし、テストコードの増加に伴い、testng.xmlは、関連するクラス、テスト、メソッド、パラメーターの設定、グループ化の包含と除外など、すべてのランタイム構成を格納するための便利な方法を提供します。

Testng.xmlの主な構造:ルートタグは、タグに1つ以上のタグが含まれ、タグに1つ以上のタグが含まれ、タグに1つ以上のタグが含まれることです。

  • スイート:1つ以上のテストを含むことができるXMLファイルで表され、スイートはタグを介して他のtestngxmlファイルを実行できます

  • テスト:1つ以上のTestNGクラスを含むことができるテストを表します

  • TestNGクラス:少なくとも1つのTestNGアノテーションを含む単純なJavaクラスです。

  • メソッド:通常のJavaメソッドで、その前に@Testでマークされています

  • グループ:TestNGは、さまざまなメソッドをさまざまなグループに分類したり、クラスをさまざまなグループに分類したりできます。

おすすめ

転載: blog.csdn.net/chimomo/article/details/115000604