TestNG XML测试套件执行:JVM一致性及静态变量可用性问询
TestNG 测试套件执行与JVM共享问题解答
让我来逐个拆解你的问题:
1. 执行XML定义的测试套件时,所有测试是否在同一JVM中运行?
默认情况下,绝对是的。TestNG会在单个JVM进程内完成整个测试套件的执行,不管你的套件里包含多少测试类、测试方法。
唯一的例外场景是:如果你通过外部构建工具(比如Maven Surefire)配置了多进程执行(比如forkCount参数大于1),这时候会启动多个JVM进程来分摊测试任务,但这属于构建工具的扩展配置,并非TestNG原生套件执行的默认行为。
另外,即便你在TestNG XML里配置了并行执行(比如<suite parallel="tests" thread-count="3">),这些并行的测试也只是在同一个JVM的不同线程中运行,并不会开启新的JVM进程。
2. 监听器onStart()初始化的静态变量能否被所有测试用例访问?
结合上面的结论,在TestNG原生套件执行模式下,完全可以保证:
- 套件监听器的
onStart()方法会在整个套件启动的最早期执行,此时JVM进程已经初始化完成。 - 静态类成员属于类级别的全局变量,在同一个JVM进程内,所有线程(包括并行测试的线程)共享同一个静态变量实例。所以你在
onStart()里初始化的静态值,后续所有测试用例都能读到。
需要注意的是:如果你的构建工具配置了多进程执行(比如Maven的forkCount > 1),那么每个进程都会有自己独立的静态变量副本,这种情况下不同进程的测试用例无法共享静态值。但只要你没做这种特殊配置,就不用担心这个问题。
内容的提问来源于stack exchange,提问作者Lahiru Chandima
相关产品推荐
相关产品推荐

