最近一直没有时间写博客。在做一个相当于外包的项目。因为项目终于卖出去了,忽悠到人用了。而且最近释放了一个资源。
最近一直忙于测试。
testng执行核心的几个类:
xxxWorker、xxxRunner是配套的。runner的类,定义执行的上下文。Worker就是实际的执行器。
testng定义了两个层次的执行。一层是suite这个层面的。一层是每个@Test层面的。从图中可以看到。其中,testRunner,实际是跟testMethodWorker配套使用的。
我们来看一下最底层的testRunner的privateRun()
private void privateRun(XmlTest xmlTest) {
String parallelMode = xmlTest.getParallel();
boolean parallel = XmlSuite.PARALLEL_METHODS.equals(parallelMode)
|| "true".equalsIgnoreCase(parallelMode)
|| XmlSuite.PARALLEL_CLASSES.equals(parallelMode)
|| XmlSuite.PARALLEL_INSTANCES.equals(parallelMode);
{
// parallel
int threadCount = parallel ? xmlTest.getThreadCount() : 1;
// Make sure we create a graph based on the intercepted methods, otherwise an interceptor
// removing methods would cause the graph never to terminate (because it would expect
// termination from methods that never get invoked).
DynamicGraph<ITestNGMethod> graph = createDynamicGraph(intercept(m_allTestMethods));
if (parallel) {
if (graph.getNodeCount() > 0) {
GraphThreadPoolExecutor<ITestNGMethod> executor =
new GraphThreadPoolExecutor<ITestNGMethod>(graph, this,
threadCount, threadCount, 0, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());