TestNG源码
毛依依
我愿永远做一个螺丝钉
展开
-
TestNG源码解读(二十五)
上一篇中看到了addFailedInvocationNumber方法在invokeMethod方法中会被调用,现在继续走查,一层层分析。首先梳理一下各方法之间的调用关系:从上图可以看出,addFailedInvocationNumber方法在执行method方法或者重复执行失败用例中会被调用,也就是说在执行xml文件中一层层下来的时候若xml文件中的method的参数是从data p...原创 2019-11-21 07:54:35 · 309 阅读 · 0 评论 -
TestNG源码解读(二十四)
今天主要看一下,testng-failed.xml文件中的<include>标签中的 invocation-numbers代表什么意思及使用方法?invocation-numbers:失败的调用号,即失败的执行次数,仅在使用dataProvider的时候才会有<methods> <include name="test100" invocation-nu...原创 2019-11-20 09:31:17 · 317 阅读 · 0 评论 -
TestNG源码解读(二十三)
接着上一篇继续走查整个xml文件生成的过程1.在FailedReporter.java中的方法generateFailureSuite最后是生成xml文件,这里的三个入参分别是输出路径,文件名,及SuiteXml if(null != failedSuite.getTests() && failedSuite.getTests().size() > 0) { ...原创 2019-11-18 07:36:23 · 199 阅读 · 0 评论 -
TestNG源码解读(二十二)
失败的xml文件(failed-testng.xml)中使用<include>标签包含失败的用例,写法如下: <classes> <class name="com.jmeter.demo.DemoApplicationTests"> <methods> <include name="c...原创 2019-11-17 08:41:28 · 218 阅读 · 0 评论 -
TestNG源码解读(二十一)
前面把FailedReporter类中主要代码走查了一遍,现在梳理一下该类的类关系图及方法间的调用关系图,时序图等1.类关系图:通过类关系图可以看出生成failedTestng.xml文件就是通过各种监听器拿到执行用例的各种结果,然后整合成一份失败用例的xml文件2.generateReport方法的向下调用关系图,该类中的这些方法也都大概走读了一遍,整体逻辑就是:生成xml报...原创 2019-11-16 08:35:56 · 232 阅读 · 0 评论 -
TestNG源码解读(二十)
今天继续读testng源码--FailedReporter.java类--生成失败的xml文件(testng-failed.xml)6. 设置失败的classes List<XmlClass> xmlClasses = createXmlClasses(methods, srcXmlTest); xmlTest.setXmlClasses(xmlClasses);6.1...原创 2019-11-15 23:59:57 · 237 阅读 · 0 评论 -
TestNG源码解读(十九)
今天继续读testng源码--FailedReporter.java类--生成失败的xml文件(testng-failed.xml)5.createXmlTest(context, result, xmlTest),这个方法主要就是生成testng-failed.xml文件具体代码如下: /** * Generate testng-failed.xml */ pri...原创 2019-11-14 09:50:46 · 333 阅读 · 0 评论 -
TestNG源码解读(十八)
今天继续读testng源码--FailedReporter.java类--生成失败的xml文件(testng-failed.xml)4. 生成失败和skip的test xml generateXmlTest(suite, xmlTests.get(testContext.getName()), tes...原创 2019-11-12 22:08:52 · 327 阅读 · 0 评论 -
TestNG源码解读(十七)
今天继续读testng源码--FailedReporter.java类--生成失败的xml文件(testng-failed.xml)1.构造方法 //无参构造器 public FailedReporter() { } //有参构造器 public FailedReporter(XmlSuite xmlSuite) { m_xmlSuite = xmlSuite...原创 2019-11-11 23:21:35 · 265 阅读 · 0 评论 -
TestNG源码解读(十六)
继上篇继续分析执行用例方法execute()(这个方法是java.util.concurrent.ThreadPoolExecutor类中的方法);该方法中分为三个步骤且每个步骤都会调用addWorker()方法,那么现在具体看一下addWorker方法做了哪些工作?首先看了该方法的注释,整体意思就是先检查当前状态是否可以添加worker如果可以的化则添加并运行firstTask,否则如果当前线程...原创 2019-11-10 22:06:27 · 187 阅读 · 0 评论 -
TestNG源码解读(十五)
前一篇我看到了创建GraphThreadPoolExecutor多线程池执行器后,会执行run方法,今天继续看如何进行多线程并发执行用例。 //对于同步代码块,就得指定锁对象m_graph public void run() { synchronized(m_graph) { if (DOT_FILES) { m_dotFiles.add(m_gra...原创 2019-11-09 22:00:26 · 312 阅读 · 0 评论 -
TestNG源码解读(十四)
把之前看的源码的调用关系再次整理一份,加深印象的同时荣古一下各个方法之前的调用关系原创 2019-11-08 22:23:40 · 280 阅读 · 0 评论 -
TestNG源码解读(十三)
前面看到了TestRunner类中的privateRun方法,该方法中主要是根据配置决定走并发执行用例还是串行执行用例。因为我在测试过程中回归的时候一般都是并发执行testng.xml,所以今天先研究一下并发执行的具体过程,并发执行的代码如下,现在一行行的分析 if (parallel) { if (graph.getNodeCount() > 0) { ...原创 2019-11-07 22:26:39 · 248 阅读 · 0 评论 -
TestNG源码解读(十二)
继上篇6.4 执行用例之前看到了suiteRunner.runTest方法的具体内容就是执行每一个<test>用例然后将执行结果put到m_suiteResults中,那么每一个xml文件中的<test>标签里的用例是怎么执行的呢?具体来看一看,它是调用TestRunner.run方法,run方法主要工作:1.调用配置方法, 2.调用测试方法,3.捕获异常,4.收集结果...原创 2019-11-06 10:10:36 · 393 阅读 · 0 评论 -
TestNG源码解读(十一)
总结回归之前看的testng源码方法调用关系图:原创 2019-11-04 21:56:21 · 309 阅读 · 0 评论 -
TestNG源码解读(十)
继上边6.4 执行用例上一篇讲到了runSuitesSequentially这个方法会去调用SuiteRunnerWorker.run方法,那么run方法的具体实现又是什么样的呢?走读本段代码后发现run方法中又继续调用了runSuite方法,该方法主要作用:执行suite然后将结果存到suiteRunnerMap中。执行suite的方法则是调用suiteRunner.run()方法...原创 2019-11-03 07:28:27 · 365 阅读 · 0 评论 -
TestNG源码解读(九)
6.4 执行用例查看常规模式regular mode的执行过程:suiteRunners = runSuitesLocally();1.首先就是判断suite的个数是否大于0,只有不为空的时候才会进行用例等一系列操作,否则报错"No test suite found. Nothing to run"2.然后判断第一个suite的berbose的级别是否大于2,如果大于2则在控制台...原创 2019-11-02 16:48:30 · 451 阅读 · 0 评论 -
TestNG源码解读(八)
6.3执行监听器-IExecutionListener*开始与结束 runExecutionListeners(true /* start */); runExecutionListeners(false /* finish */);//遍历listenersList如果start是true则执行onExecutionStart启动操作,否则执行finish操作priv...原创 2019-11-01 10:11:45 · 790 阅读 · 0 评论 -
TestNG源码解读(七)
6.2必要条件检查sanityCheck();1.在执行suites之前确保所有需要的条件都已经准备好。如果没有则抛错停止运行 /** * Before suites are executed, do a sanity check to ensure all required * conditions are met. If not, throw an excepti...原创 2019-10-30 20:40:50 · 483 阅读 · 0 评论 -
TestNG源码解读(六)
6.1 执行run方法的一系列操作之初始化 initializeConfiguration(); initializeDefaultListeners(); initializeCommandLineSuites(); initializeCommandLineSuitesParams(); initializeCommandLineSuitesGroups();1.初始化配置...原创 2019-10-29 19:34:48 · 381 阅读 · 0 评论 -
TestNG源码解读(五)
6.1 执行run方法的一系列操作之初始化m_suites initializeSuitesAndJarFile(); 作用:实现m_suites的初始化 public void initializeSuitesAndJarFile() { // The Eclipse plug-in (RemoteTestNG) might have invoked thi...原创 2019-10-28 07:50:07 · 442 阅读 · 1 评论 -
TestNG源码解读(四)
6. 执行testng的一系列操作之执行 // // Run // try { result.run(); } catch(TestNGException ex) { if (TestRunner.getVerbose() > 1) { ex.printStackTrace(System.out);...原创 2019-10-27 22:26:54 · 491 阅读 · 0 评论 -
TestNG源码解读(三)
5. 执行testng的一系列操作之解析参数 // // Parse the arguments // try { CommandLineArgs cla = new CommandLineArgs(); m_jCommander = new JCommander(cla, argv); validateCommandLine...原创 2019-10-26 23:02:29 · 873 阅读 · 2 评论 -
TestNG源码解读(二)
4. 执行testng的一系列操作之添加监听器 //如果监听器不为空则把监听器listener对象加入到testng对象的监听器中 if (null != listener) { result.addListener((Object)listener); } /** * @deprecated Use addListener(ITestNGListener)...原创 2019-10-26 00:48:41 · 834 阅读 · 0 评论 -
TestNG源码解读(一)
运行TestNG从开始执行用例到最终输出报告,通过如下两种命令之一实现的:1.java org.testng.TestNG testng.xml2.mvn test第二种是Maven通过插件来执行TestNG 的测试用例 <plugin> <groupId>org.apache.maven.plugins</groupId> ...原创 2019-10-23 20:55:22 · 1726 阅读 · 0 评论