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 :");
}
分享到:
相关推荐
TestNG可以组织测试用例为测试套件,支持并发执行,还提供了参数化测试、依赖性测试等功能,非常适合大规模的自动化测试项目。 4. Excel: 在本项目中,Excel被用作存储测试用例的数据源。这使得测试用例的管理变得...
通过编辑此文件,用户可以控制测试的执行逻辑和环境。 4. **testng.xml**:这是TestNG的核心配置文件,用于组织和安排测试的执行。它可以包含多个测试套件(suite),每个套件下可以有多个测试(test),每个测试下...
1. **并发测试**:TestNG支持并行执行测试用例,这大大减少了整体测试时间,尤其对于大型项目而言,能够显著提高测试效率。 2. **分组测试**:通过分组功能,你可以将相关的测试用例组织在一起,便于执行或跳过特定...
通过设置其属性,如`dependsOnMethods`、`alwaysRun`等,可以控制测试的执行顺序和条件,为并行测试提供更多的灵活性。 4. **测试套件(Test Suites)**:TestNG允许创建测试套件(Test Suites),这是一个包含多个...
最后,通过一个实例代码演示,展示了如何在TestNG中使用注解组织测试方法和执行顺序。代码中展示了不同注解的使用方式,包括初始化工作、测试用例执行工作和测试后的清理工作,以及如何定义测试用例(标记为@Test的...
接下来,我们转向TestNG,这是一个强大的自动化测试框架,提供了比JUnit更丰富的特性,如并发测试、测试套件、测试分组、依赖关系等。TestNG的测试用例通常是用注解驱动的Java类。 在Ant中集成TestNG,我们可以添加...
9. **XML配置**:通过XML配置文件,你可以灵活地控制测试执行的顺序、并发性以及如何分组测试。 10. **注解丰富**:TestNG提供了丰富的注解,如@Test、@BeforeMethod、@AfterMethod等,使测试代码更加清晰易读。 ...
3. **配置文件**:如`testng.xml`,定义了测试的结构和执行顺序。 4. **pom.xml**:Maven的配置文件,列出了项目的所有依赖,如Selenium、TestNG和其他辅助库。 5. **测试报告**:Maven和TestNG可以生成HTML格式的...
5. **报告生成**:TestNG内置了详细的测试报告生成器,可以提供丰富的测试结果信息,包括测试用例的执行情况、失败原因、堆栈跟踪等,帮助开发者快速定位问题。 6. **异常处理**:TestNG提供了对异常的精细控制,...
在这个数据驱动测试框架中,TestNG用于组织测试用例和执行它们。通过使用TestNG的`@Test`注解,可以定义测试方法,这些方法可以接受外部数据作为输入。此外,TestNG-xslt是一个插件,用于美化TestNG的XML测试报告,...
6. **测试套件(Test Suite)**:testng.xml文件用于定义测试套件,它可以包含多个测试类和配置设置,比如测试的顺序、执行的并发线程数等。 7. **报告生成**:TestNG默认生成详细的HTML测试报告,包括测试结果、...
7. **XML配置文件**: 使用XML配置文件,可以灵活地组织和控制测试的执行。 8. **报告**: TestNG生成详细的测试报告,包括测试结果、失败信息、日志等,方便调试和分析。 9. **监听器**: 可以自定义监听器来扩展...
10. **测试套件**:可以创建XML配置文件来定义测试套件,灵活控制测试的执行顺序和分组。 在压缩包文件名称列表中,"testng-6.8.6beta"可能是一个误写,通常beta表示预发布版本,但在这里我们假设它指的是正式版本...
7. **XML配置**:通过XML配置文件,你可以更精细地控制测试执行,包括设置测试的执行顺序、分组、并行性等。 8. **报告**:TestNG 生成的测试报告详细且直观,包括测试结果、失败信息、堆栈跟踪等,便于调试和问题...
10. **@Queue**:同上,`testngTestQueue.java`可能是定义了测试任务队列的注解,用于控制测试的执行顺序或并发性。 11. **@Listeners**:TestNG允许注册监听器,如`MyITestListener.java`,来监听测试的生命周期...
6. **XML配置文件**:通过XML配置文件,用户可以灵活地定义测试套件,控制测试的执行流程。 7. **注解支持**:TestNG广泛使用注解来标记测试类和方法,使得代码更简洁,易于理解和维护。 8. **异常处理**:TestNG...
8. **注解驱动**:TestNG的核心设计之一就是注解驱动,通过注解我们可以轻松地标记和控制测试行为,这使得测试代码更加简洁易读。 9. **监听器**:TestNG允许自定义监听器,通过实现`ITestListener`, `...
- **测试顺序控制**:使用@FixMethodOrder注解控制测试方法的执行顺序。 - **异常处理**:利用@Test的expectedExceptions属性,声明测试方法预期抛出的异常类型。 总结来说,TestNG-Eclipse插件极大地提升了...
- **创建测试套件**:使用suite.xml文件定义测试执行的顺序和配置,可以包含多个测试类和配置。 - **运行测试**:使用Maven或IDE(如IntelliJ IDEA或Eclipse)运行测试套件,查看测试结果。 5. **最佳实践** - *...
- 测试套件(TestNG XML文件):定义了测试的执行顺序和分组。 - 其他辅助类:如日志记录、数据提供者等。 6. **自动化测试流程**:测试通常从登录开始,然后浏览商品,可能涉及搜索和筛选功能,接着添加商品至...