`

testng控制测试用例执行顺序及并发测试

阅读更多
1、class的执行顺序
       通过preserve-order属性,默认情况下preserve-order为true,即按照classes下class的顺序执行。
<code="java">
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="framework_testng"> 
    <test name="test" verbose="2" preserve-order="true">   
    <!--verbose="2" 标识的就是记录的日志级别,共有0-10的级别,其中0表示无,10表示最详细-->
        <classes> 
            <class name="com.demo.One"></class>
            <class name="com.demo.Two"></class>
            <class name="com.demo.Three"></class> 
        </classes> 
    </test> 
</suite>
</code>
       以上将按照类One Two Three的顺序执行,与设置preserve-order属性一样。
       以上面为例,当设置preserve-order属性为false时,则倒叙执行,按照类Three、Two、One的顺序执行
2、test方法的执行顺序
1)使用priority控制
<code="java">
@Test(priority = 0)
public void test001() {
}

@Test(priority = 1)
public void test002() {
}

@Test(priority = 2)
public void test003() {
}
</code>
       这样指定以后,将按照test001、test002、test003顺序执行。

2)使用方法命名控制
      执行顺序默认是按照方法名的字典顺序升序排序执行的,例如方法名命名为:A()  B()  C()
这样就会按照A B C的顺序进行执行。
3)在testng.xml中通过include控制
<code="java">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="framework_testng">
    <test name="test" preserve-order="true"> 
        <classes>
            <class name="com.demo.Yltest">
                <methods >
                   <include name="z" />
                   <include name="c" />
                   <include name="d" />
                   <include name="e" />
                   <include name="f" />
                   <include name="g" />
                   <include name="h" />
               </methods>
            </class>
        </classes>
    </test>
</suite>
</code>
      这样将按照 z c d e f g h的顺序执行。
      classes不设置include的时候,一个类中所有设置了@Test的方法都会执行,如果xml中设置了include,那么不在include中的测试方法即使有@Test也不会执行。

3、parallel参数
       这个参数为什么在这里介绍呢?因为在设置通过priority设置用例执行顺序时我发此参数有关,先来看看该参数介绍。
       paraller是执行的模式,有tests、classes、methods三种取值:
       1)tests:相同<test>标记下的所有类的方法在同一个线程中运行,不同的<test>下的方法会在不同的线程中运行。该值也是默认值。paraller=tests时,只要没有设置preserve-order=False,也没有设置priority,那么同一个<test>下的所有方法会先按照类的排列顺序执行类中的方法,同一个类中的方法会按照方法名字典升序排序后执行;如果有设置priority,那么会按照priority顺序执行。此时priority是对线程中所有方法生效的,即同一个线程中的多个类的所有方法按照priority顺序执行。如下例:
<code="java">
public class WaybillSelect {
@Test(priority = 0)
public void test1() {
System.out.println("this is test1");
}
@Test(priority = 1)
public void tester1() {
System.out.println("this is tester1");
}
        @Test(priority = 2)
public void test2() {
System.out.println("this is test2");
}
}

public class MoneySelectTest {
@Test(priority = 0)
public void test1() {
System.out.println("this is moneyselect.test1 method");
}
@Test(priority = 2)
public void beforesuitetest() {
         System.out.println("this is beforesuite test");
}
@Test(priority = 1)
public void beforetest() {
System.out.println("this is beforetest  test");
}
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<!--  <suite name="zhanglutest" verbose="2" thread-count="2" parallel="classes"> -->
<suite name="zhanglutest" verbose="2" >
    <test name="testcase1">
    <classes>
            <class name="com.propertiesfile.WaybillSelect"></class>
            <class name="com.moneyselect.MoneySelectTest"></class>
        </classes>
    </test>
</suite>
</code>
执行结果如下(先执行所有priority为0的,依次为1、2):
this is test1
this is moneyselect.test1 method
this is tester1
this is beforetest  test
this is test2
this is beforesuite test
       在上面的基础上把两个类中的priority参数去掉,执行结果如下,可见是先按照类的先后顺序,在类里面按照方法名字典顺序排序后执行。
this is test1
this is test2
this is tester1
this is beforesuite test
this is beforetest  test
this is moneyselect.test1 method
       2)classes:TestNG 会在相同线程中运行相同类中的所有的方法,但是每个类都会用不同的线程运行。
       在上面代码的xml中设置parallel=classes
<code="java">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="zhanglutest" verbose="2" parallel="classes">
    <test name="testcase1">
    <classes>
            <class name="com.propertiesfile.WaybillSelect"></class>
            <class name="com.moneyselect.MoneySelectTest"></class>
        </classes>
    </test>
</suite>
两个类的代码不变,这里不重复粘贴了
</code>
       运行结果如下,两个类用两个线程执行,priority参数在各自的线程中生效,而两个线程的执行快慢我们无法掌控,所以打印结果如下,可以看出每个类中的方法先后顺序是按照各自的priority执行的,而两个类之间并不能保证哪个先执行哪个后执行。
this is moneyselect.test1 method
this is test1
this is tester1
this is beforetest  test
this is beforesuite test
this is test2
       注意,上面的xml中如果我设置了线程数,例如将线程数设置为1(thread-count="1"),那么所有的方法都在一个线程中执行,相当于parallel参数失效。而当classes下面有三个类,设置了parallel="classes" thread-count="2"时,会有两个类共用一个线程。thread-count默认为5。
       3)methods:TestNG 会在不同的线程中运行测试方法,除非那些互相依赖的方法。那些相互依赖的方法会运行在同一个线程中,并且遵照其执行顺序。

关于并发测试,这里不再贴出代码,附上网上的资料
https://blog.csdn.net/df0128/article/details/83792901

单个用例也可以由多个线程并发执行,只需要在@Test中声明,@Test(invocationCount = x,threadPoolSize = y),invocationCount表示执行次数,threadPoolSize表示线程池大小。
例子:
    /**
     * 多线程测试,没有关联的用例可以使用多线程,减少执行时间
     * 以下演示3个线程同时运行,共执行10次
     */
    @Test(invocationCount = 10,threadPoolSize = 3)
    public void test() {
           long id = Thread.currentThread().getId();
           System.out.printf("Thread Id :");
    }
分享到:
评论

相关推荐

    webDriver:使用java + testng + webdriver进行二次开发,在excel中编写测试用例,并使用testng运行测试用例

    TestNG可以组织测试用例为测试套件,支持并发执行,还提供了参数化测试、依赖性测试等功能,非常适合大规模的自动化测试项目。 4. Excel: 在本项目中,Excel被用作存储测试用例的数据源。这使得测试用例的管理变得...

    testng测试报告模板BeautifulReport.7z

    通过编辑此文件,用户可以控制测试的执行逻辑和环境。 4. **testng.xml**:这是TestNG的核心配置文件,用于组织和安排测试的执行。它可以包含多个测试套件(suite),每个套件下可以有多个测试(test),每个测试下...

    testng-测试

    1. **并发测试**:TestNG支持并行执行测试用例,这大大减少了整体测试时间,尤其对于大型项目而言,能够显著提高测试效率。 2. **分组测试**:通过分组功能,你可以将相关的测试用例组织在一起,便于执行或跳过特定...

    TestNG系列教程并行执行测试Java开发Java经验技

    通过设置其属性,如`dependsOnMethods`、`alwaysRun`等,可以控制测试的执行顺序和条件,为并行测试提供更多的灵活性。 4. **测试套件(Test Suites)**:TestNG允许创建测试套件(Test Suites),这是一个包含多个...

    testng基础.pdf

    最后,通过一个实例代码演示,展示了如何在TestNG中使用注解组织测试方法和执行顺序。代码中展示了不同注解的使用方式,包括初始化工作、测试用例执行工作和测试后的清理工作,以及如何定义测试用例(标记为@Test的...

    Ant项目配置与测试用例管理

    接下来,我们转向TestNG,这是一个强大的自动化测试框架,提供了比JUnit更丰富的特性,如并发测试、测试套件、测试分组、依赖关系等。TestNG的测试用例通常是用注解驱动的Java类。 在Ant中集成TestNG,我们可以添加...

    Java测试新技术TestNG和高级概念 (英文版 清晰pdf 可下载)

    9. **XML配置**:通过XML配置文件,你可以灵活地控制测试执行的顺序、并发性以及如何分组测试。 10. **注解丰富**:TestNG提供了丰富的注解,如@Test、@BeforeMethod、@AfterMethod等,使测试代码更加清晰易读。 ...

    java+selenium+maven+testng自动化测试框架实例(实际项目)

    3. **配置文件**:如`testng.xml`,定义了测试的结构和执行顺序。 4. **pom.xml**:Maven的配置文件,列出了项目的所有依赖,如Selenium、TestNG和其他辅助库。 5. **测试报告**:Maven和TestNG可以生成HTML格式的...

    Java测试新技术:TestNG和高级概念

    5. **报告生成**:TestNG内置了详细的测试报告生成器,可以提供丰富的测试结果信息,包括测试用例的执行情况、失败原因、堆栈跟踪等,帮助开发者快速定位问题。 6. **异常处理**:TestNG提供了对异常的精细控制,...

    Maven+Selenium+TestNG+TestNG-xslt实现数据驱动测试框架

    在这个数据驱动测试框架中,TestNG用于组织测试用例和执行它们。通过使用TestNG的`@Test`注解,可以定义测试方法,这些方法可以接受外部数据作为输入。此外,TestNG-xslt是一个插件,用于美化TestNG的XML测试报告,...

    testng-6.8.6

    10. **测试套件**:可以创建XML配置文件来定义测试套件,灵活控制测试的执行顺序和分组。 在压缩包文件名称列表中,"testng-6.8.6beta"可能是一个误写,通常beta表示预发布版本,但在这里我们假设它指的是正式版本...

    eclipse-testng离线包

    6. **测试套件(Test Suite)**:testng.xml文件用于定义测试套件,它可以包含多个测试类和配置设置,比如测试的顺序、执行的并发线程数等。 7. **报告生成**:TestNG默认生成详细的HTML测试报告,包括测试结果、...

    testng插件

    7. **XML配置文件**: 使用XML配置文件,可以灵活地组织和控制测试的执行。 8. **报告**: TestNG生成详细的测试报告,包括测试结果、失败信息、日志等,方便调试和分析。 9. **监听器**: 可以自定义监听器来扩展...

    testng 6.8.8

    7. **XML配置**:通过XML配置文件,你可以更精细地控制测试执行,包括设置测试的执行顺序、分组、并行性等。 8. **报告**:TestNG 生成的测试报告详细且直观,包括测试结果、失败信息、堆栈跟踪等,便于调试和问题...

    testng注解介绍例子

    10. **@Queue**:同上,`testngTestQueue.java`可能是定义了测试任务队列的注解,用于控制测试的执行顺序或并发性。 11. **@Listeners**:TestNG允许注册监听器,如`MyITestListener.java`,来监听测试的生命周期...

    TestNG插件

    6. **XML配置文件**:通过XML配置文件,用户可以灵活地定义测试套件,控制测试的执行流程。 7. **注解支持**:TestNG广泛使用注解来标记测试类和方法,使得代码更简洁,易于理解和维护。 8. **异常处理**:TestNG...

    testng-6.9.7 源码

    8. **注解驱动**:TestNG的核心设计之一就是注解驱动,通过注解我们可以轻松地标记和控制测试行为,这使得测试代码更加简洁易读。 9. **监听器**:TestNG允许自定义监听器,通过实现`ITestListener`, `...

    TestNG-Eclipse插件包.rar

    - **测试顺序控制**:使用@FixMethodOrder注解控制测试方法的执行顺序。 - **异常处理**:利用@Test的expectedExceptions属性,声明测试方法预期抛出的异常类型。 总结来说,TestNG-Eclipse插件极大地提升了...

    testng-6.8.8文件

    - **创建测试套件**:使用suite.xml文件定义测试执行的顺序和配置,可以包含多个测试类和配置。 - **运行测试**:使用Maven或IDE(如IntelliJ IDEA或Eclipse)运行测试套件,查看测试结果。 5. **最佳实践** - *...

    selenium+testng框架web购物源码

    - 测试套件(TestNG XML文件):定义了测试的执行顺序和分组。 - 其他辅助类:如日志记录、数据提供者等。 6. **自动化测试流程**:测试通常从登录开始,然后浏览商品,可能涉及搜索和筛选功能,接着添加商品至...

Global site tag (gtag.js) - Google Analytics