testng教程之testng.xml的配置和使用,以及参数传递(多线程执行)

Posted wsy0202

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了testng教程之testng.xml的配置和使用,以及参数传递(多线程执行)相关的知识,希望对你有一定的参考价值。

testng.xml

testng.xml是为了更方便的管理和执行测试用例,同时也可以结合其他工具

 

You can invoke TestNG in several different ways: 你可以用以下三种方式执行测试

 

  • With a testng.xml file           直接run as test suite
  • With ant                            使用ant
  • From the command line      从命令行
  • eclipse                              直接在eclipse执行

textng.xml 基本格式如下:

<test name="Regression1">
  <groups>
    <run>
      <exclude name="brokenTests"  />
      <include name="checkinTests"  />
    </run>
  </groups>
  
  <classes>
    <class name="test.IndividualMethodsTest">
      <methods>
        <include name="testMethod" />
      </methods>
    </class>
  </classes>
</test>

suite:定义一个测试套件,可包含多个测试用例或测试group

suite 里可以设置是否使用多线程:

  

parallel="methods": TestNG will run all your test methods in separate threads. Dependent methods will also run in separate threads but they will respect the order that you specified.


parallel="tests": TestNG will run all the methods in the same <test> tag in the same thread, but each <test> tag will be in a separate thread. This allows you to group all your classes that are not thread safe in the same <test> and guarantee they will all run in the same thread while taking advantage of TestNG using as many threads as possible to run your tests.


parallel="classes": TestNG will run all the methods in the same class in the same thread, but each class will be run in a separate thread.


parallel="instances": TestNG will run all the methods in the same instance in the same thread, but two methods on two different instances will be running in different threads.

    • parallel="classes"  每个测试用例class级别多线程
    • thread-count="3" 线程数为3,可同时执行3个case
    • preserve-order="true"  根据官方解释(If you want the classes and methods listed in this file to be run in an unpredictible order, set the preserve-order attribute to false)设置为false乱序执行,设置为true会按照你配置执行
    • Parameter标签传递参数
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="classes" thread-count="3">
    <test verbose="2" preserve-order="true" name="TestDebug">  
        <parameter name="driverName" value="chrome" />
        <classes>
            <class name="com.dbyl.tests.Case1" />
            <class name="com.dbyl.tests.JDaddress" />
            <class name="com.dbyl.tests.UseCookieLogin" />
            <class name="com.dbyl.tests.MapTest" />
            <class name="com.dbyl.tests.loginTest" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

参数怎么使用?

     这要在case里添加@Parameters 的annotations

     如果有多个parameter,可以一次传入

package com.dbyl.tests;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
/**
 * This Test for verify Parameter annotation
 * @author Young
 *
 */
public class passParameter {

    /**
     * 
     * @param parameter1
     * @param parameter2
     */
    @Parameters({"parameter1","parameter2"})
    @Test(groups="parameter")
    public void parameter(String parameter1,int parameter2 )
    {
        System.out.println("parameter1 is "+parameter1 );
        System.out.println("parameter2 is "+parameter2 );
    }
}

其中testng的配置文件为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="classes" thread-count="5">
    <test verbose="2" preserve-order="true" name="TestDebug">  
        <parameter name="parameter1" value="parameter1" />
        <parameter name="parameter2" value="123" />
        <classes>
            <class name="com.dbyl.tests.passParameter" />
            <class name="com.dbyl.tests.TestngExample" />
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

这里使用两个parameter标签,传递两个参数

执行结果如下:     

[TestNG] Running:
C:UsersworkspaceDemoParametertestng.xml

[TestRunner] Starting executor for test TestDebug with time out:2147483647 milliseconds.
parameter1 is parameter1
parameter2 is 123

接下来尝试从ant命令行执行test suite

首先在 build配置文件加入:

<taskdef resource="testngtasks" classpath="testng.jar"/>

在target执行文件设置testng.xml路径

<xmlfileset dir="${basedir}" includes="Parametertestng.xml"/>
<?xml version="1.0"?>
<project name="Demo" default="run" basedir=".">
    <echo  message="Start selenium Grid" />
    <echo  message="import libs" />
    <path id="run.classpath">
        <fileset dir="${basedir}">
            <include name="lib/poi/*.jar" />
            <include name="lib/poi/lib/*.jar" />
            <include name="lib/testng.jar" />
            <include name="lib/sikuli-script.jar" />
            <include name="lib/*.jar" />
        </fileset>
        <fileset dir="${basedir}/lib/selenium">
            <include name="selenium-java-2.45.0.jar" />
            <include name="libs/*.jar" />
        </fileset>
    </path>
    <taskdef name="testng" classname="org.testng.TestNGAntTask" classpathref="run.classpath" />
    <target name="clean">
        <delete dir="build"/>
    </target>
    <target name="compile" depends="clean">
        <echo message="mkdir"/>
        <mkdir dir="build/classes"/>
        <javac srcdir="src" destdir="build/classes" debug="on" encoding="UTF-8">
            <classpath refid="run.classpath"/>
        </javac>
    </target>
    <path id="runpath">
         <path refid="run.classpath"/>
         <pathelement location="build/classes"/>
       </path>
    <target name="run" depends="compile">
        <testng  classpathref="runpath"  outputDir="test-output"
            haltonfailure="true"
            useDefaultListeners="false"
            listeners="org.uncommons.reportng.htmlReporter,org.testng.reporters.FailedReporter" >
            <xmlfileset dir="${basedir}" includes="testng.xml"/>
            <jvmarg value="-Dfile.encoding=UTF-8" />
            <sysproperty key="org.uncommons.reportng.title" value="AutoMation TestReport" />
        </testng>
        </target>
        <target name="runTestng" depends="compile">
        <testng  classpathref="runpath"  outputDir="test-output"
            haltonfailure="true"
            useDefaultListeners="false"
            listeners="org.uncommons.reportng.HTMLReporter,org.testng.reporters.FailedReporter" >
            <xmlfileset dir="${basedir}" includes="Parametertestng.xml"/>
            <jvmarg value="-Dfile.encoding=UTF-8" />
            <sysproperty key="org.uncommons.reportng.title" value="AutoMation TestReport" />
        </testng>
    </target>
</project>

接下在在命令行执行: ant runTestng

运行结果:

C:UsersworkspaceDemo>ant runTestng
Buildfile: C:UsersworkspaceDemouild.xml
[echo] Start selenium Grid
[echo] import libs

clean:
[delete] Deleting directory C:UsersYoungworkspaceDemouild

compile:
[echo] mkdir
[mkdir] Created dir: C:UsersYoungworkspaceDemouildclasses
[javac] C:UsersYoungworkspaceDemouild.xml:25: warning: ‘includeantrunt
ime‘ was not set, defaulting to build.sysclasspath=last; set to false for repeat
able builds
[javac] Compiling 21 source files to C:UsersYoungworkspaceDemouildcla
sses

runTestng:
[testng] [TestNG] Running:
[testng] C:UsersworkspaceDemoParametertestng.xml
[testng]
[testng] [TestRunner] Starting executor for test TestDebug with time out:2147
483647 milliseconds.
[testng] parameter1 is parameter1
[testng] parameter2 is 123
[testng] This is beforeClass method .The Value of a is: 1
[testng] This is beforeMethod method. The Value of a is: 2
[testng] This is Test method1 .The Value of a is: 3
[testng] This is AfterMethod Method .The Value of a is: 6
[testng] This is beforeMethod method. The Value of a is: 2
[testng] This is Test method2 .The Value of a is: 4
[testng] This is AfterMethod Method .The Value of a is: 6
[testng] This is AfterClass Method .The Value of a is: 5
[testng]
[testng] ===============================================
[testng] Suite
[testng] Total tests run: 3, Failures: 0, Skips: 0
[testng] ===============================================
[testng]
[testng] [TestNG] Time taken by [FailedReporter passed=3 failed=0 skipped=0]:
0 ms
[testng] [TestNG] Time taken by org.uncommons.reportng.HTMLReporter@65fe58e0:
120 ms

BUILD SUCCESSFUL
Total time: 5 seconds

 

以上是关于testng教程之testng.xml的配置和使用,以及参数传递(多线程执行)的主要内容,如果未能解决你的问题,请参考以下文章

TestNG基础教程 - IntelliJ IDEA中配置TestNG.xml, 查看TestNG Report

TestNG基础教程 - TestNG.xml中的测试级别和常用注解执行顺序

Java盲点攻克「TestNG专题」摒弃JUnit单元测试,带你学会使用TestNG测试框架(上篇)

testng.xml文件的配置

如何使用 testng.xml 和 beanshell 设置系统属性

testNG之并发执行用例