TestNG系列教程:并行执行测试-Java开发Java经验技巧_第1页
TestNG系列教程:并行执行测试-Java开发Java经验技巧_第2页
TestNG系列教程:并行执行测试-Java开发Java经验技巧_第3页
TestNG系列教程:并行执行测试-Java开发Java经验技巧_第4页
TestNG系列教程:并行执行测试-Java开发Java经验技巧_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、tcstng系列教程:并行执行测试-编程开发技术testng系列教程:并行执行测试木文由importnew杨昆,仑翻译自lokesh g叩ta。欢迎加入翻译小组。转载请见文末要 求。并行(多线程)技术在软件术语里被定义为软件、操作系统或者程序可以并行地 执行另外一段程序屮多个部分或者子组件的能力。testng允许我们以并行(多 线程)的方式来执行测试。这就意味着基于testng测试组件的配置,多个线程 可以被同吋启动然后分别执行各自的测试方法。相对于传统的单线程执行测试的 方式,这种多线程方式拥有很大的优势,主要是它可以减少测试运行时间,并且 可以验证某段代码在多线程环境中运行的止确性。冃录1

2、. 并行执行测试的优势2. 如何并行地执行测试方法3. 如何并行地执行测试类4. 如何并行地执行同一测试套件内的各个测试组件5. 如何配置需要在多线程环境屮执行的测试方法并行执行测试的优势并行(多线程)执行测试可以给用户带来很多好处,主要包括以下两点:1)减少了执行时间:并行测试也就意味着多个测试可以在同一时间被同时执行, 从而减少了整体测试所花费的时间。2)允许多个线程并行地测试同一个测试组件:有了这个特性,我们就能够写出 相应的测试用例來验证应用程序中包含多线程部分的代码的正确性。以上特性被广泛地应用在qa领域的自动化功能测试方而。通过简单的配置,qa 人员就可以很轻松地使得他们的测试用例

3、在多个浏览器或者操作系统屮并行地 执行。testng提供了三种不同类型的配置方案来实现并行测试。如何并行地执行测试方法tcstng为我们提供了多种方式來实现并行测试,其中一种就是每一个独立的线 程分别执行各自的测试方法。这种方式能够显著地减少测试执行时间,这是因为 当有越多的测试方法被并行执行时,总体测试消耗时间将会越少。package com. howtodoinjava, parallei ism;import org. tcstng. annotations. aftermethod;import org. testng. annotations. beforemethod;import

4、 org. testng. annotations. test;public class parallelmethodtestbeforemethod public void beforemethod() long id = thread, currentthread() getld();system, out. println("before test-method. thread id is: + id); ©testpublic void lestmethodsone() long id = thread, currentthread() getld();system

5、, out. print in (''simple test-method one. thread id is: " + id);test public void testmethodstwo() long id = thread. currentthread(). getld();systemoutprintin("simple test-method two. thread id is: ” + id);©aftermethodpublic void aftermethod() long id = thread, currentthread()

6、 getld();system, out. println("after test-method. thread id is: " + id);上述测试类包含了两个测试方法,每个测试方法在执行吋都会在控制台屮打印出 一条信息。每个测试方法以及它们各自的beforemehod> aftermethod方法都会 通过thread. currentthread. gettd()这段代码打印出执行该测试方法的线程的 ido在项目中新建一个名为mcthods-tcst-tcstng. xml的文件并将卜述代码写入该 文件中。<suite name二test-method

7、suite" parallel二methods" thread-count二2 > <test name二test-method test" group-by-instances二气rue><classes><class name二com. howtodoinjava. parallelism. parallelmcthodtcstz, /></classes></test></suite>在eclipse屮选屮该文件并月以testng测试套件方式运行它。你将会在控制台 屮看到以下输岀信

8、息:before test-method. thread id is: 10before test-method. thread id is: 9simple test-method two.thread id is: 10simple testmethod one.thread id is: 9after testmethod.thread id is: 10after test-method.thread id is: 9注意:上述截图中的threadtd可能与你木地控制台中输出的threadtd不同,这 是因为threadld的值是在程序运行时由jvm动态指派的。从上述测试结果中我们可以

9、很清晰地看出:上述两个测试方法以及各口相应的 beforemethod和aftermethod方法是在两个独立的线程屮执行的。我们可以通 过在控制台中输出的threadld来证明这一点。如何并行地执行测试类在下个例子小,我们会说明如何并行地执行测试类:同一个测试组件(test execution)中的各个测试类将会在独立的线程中并行地执行。parallelclassestestone.javapublic class parallelclassestestonebcforcclasspublic void beforeclass() long id = thread. currentthrea

10、d(). getid();system, out. println("before test-class. thread id is: " + id);test public void testmethodone() long id 二 thread, currentthread() getld();system, out printin("sample test-method one. thread id is: " + id);test public void testmethodtwo() long id 二 thread, currcntthrc

11、ado. gctld();system, out. println(z,sample test-method two. thread id is: " + id);afterclasspublic void afterclass() long id = thread. currentthread(). getid(); system, out. println("after test-class. thread id is: " + id);parallelclassestesttwo. javapublic class parallelclassestesttw

12、o beforeclass public void beforeclass() long id = thread. currentthread (). getld();system.out. println(before test-class. thread id is: " + id); tcstpublic void tcstmcthodonc() long id = thread. currentthread (). getld();system.out. printin("sample test-method one. thread id is: " +

13、id);©testpublic void testmethodtwo() long id 二 thread.currentthread () getld();system, out println(sample test-method two. thread id is: +©afterclasspublic void afterclass() long id = thread, currentthread(). gettd();system, out println("after test-class. thread id is: " + id);在项

14、目中新建一个名为classes-lest-leslng. xml的文件并将下述代码写入该 文件中:<suitc namc二tcst-class suite" parallel二classes" thrcod-count二2 > <test name二test-class test" ><classes><classname二com.howtodoinjava, paral1 elism. paral1elclassestestone /><classname二com. howtodoinjava. parall

15、elism. parallelclassestesttwoz,/> </classes></test></suite>在eclipse中选中该文件并且以tcstng测试套件方式运行它。你将会在控制台 屮看到以下输出信息:before test-class.thread id is: 10before test-class.thread id is: 9sample test-method one.sample test-method one.sample test-method two.thread id is: 9thread id is: 10th

16、read id is: 10after test-class. thread id is: 10sample test-method two. thread id is: 9after test-class. thread id is: 9从上述测试结果中我们可以很清晰地看出:上述两个测试类以及各口相应的 bcforcclass和aftcrclass方法是在独立的两个线程中执行的。我们可以通过 在控制台屮输岀的threadld来证明这一点。如何并行地执行同一测试套件内的各个测试组件接下來我们会一起学习如何并行地执行同一个测试套件内的各个测试组件,即各 个测试组件会分别在独立的线程小执行。pac

17、kage com howtodoinjava. parallelism;import org. testng. annotations. afterclass; import org. testng. annotations. aftertest;import org. testng. einnotations. beforeclass; import org. testng. emnoteitions. bcforctcst; import org. testng. annotations. parameters;import org.testng. annotations. test;pu

18、blic class parallelsuitetest string testname = “";sbeforetestparameters( "test-name" ) public void beforetest(string tcstname) this.testname = testname;long id = thread. currentthread(). getid();id is:threadsystem, out. println("before test " + testname + thread "+ id);

19、©beforeclass public void beforeclass() long id = thread, currentthread(). gettd(); system, out. println("before test-class " + testname + id is:+ id);testpublic void testmethodone() long id = thread.currentthread (). getid(); system, out. println("sample test-method + testname +

20、". thread id is: " + id);©afterclass public void afterclass() long id = thread, currentthread(). gettd(); system, out println("after test-method " + testname + thread id is: " + id);©aftertest public void aftertest() long id = thread. currentthread(). getid();syste

21、m, out. println("after test " + testname + thread id is: "+ id);在项目中新建一个名为suite-test-testng. xml的文件并将以下代码写入该文 件中:<su ite name=z,tes t - class suite" paral lel= tests t hread-co unt 二 2> <tcst neunc二test-class test 1><parameter name=,test-name,z value=,/test-method

22、one /> <classes><classname=z,com. howtodoinjava, paral 1 el i sm. paral lelsui tetest /></classcs></test><test name二test-cldss test 2><parameter name二test-name" value二test-method one /> <classes><classname二com. howtodoinjava. parallelism. parallel

23、suitetest,z /></classes></test></suite>在eclipse中选中该文件并且以tcstng测试套件方式运行它。你将会在控制台 屮看到以下输出信息:beforetest testone. threadid is:9beforetest testtwo. threadid is:10beforetest-classtest onethreadidis:9beforetest-classtest two.'threadidis:10sampletest-method test one.threadidis:9samp

24、letest-method test two.threadidis:10aftertest-methodtest two.threadidis:10aftertest-methodtest one.threadidis:9aftertest testone. threadid is:9aftertest testtwo. threadid is:10从上述测试结果中我们可以很清晰地看出:上述两个测试组件是在独立的两个线 程中分别执行的。我们可以通过在控制台中输出的threadld来证明这一点。如何配置一个需要在多线程环境中执行的测试方法z前我们讨论了如何并行(多线程)地执行测试方法,测试类以及

25、测试组件。 testng同时也提供了一种灵活的方式来配置需耍在多线程环境下运行的测试方 法:只要在该测试方法的test注解上配置一些信息,我们就能启用多线程模式。public class indopendcnttcst©test(threadpoolsize = 3, invocationcount = 6, timeout = 1000) public void testmethod()long id 二 thread, currentthrcod()gctld();system, out. println(z,test method executing on thread with id:" + id);上述测试方法是通过在test注解中配置threadpoolsize这个屈性來进入多线 程模式的。threadpoolsize被设为3,这就说明了该测试方法将会在三个不同的 线程中同时执彳亍。剩余网个属性:invocationcount配置的是该测试方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论