位置: 编程技术 - 正文

JUnit4 多线程执行测试用例(junit 原理)

编辑:rootadmin

推荐整理分享JUnit4 多线程执行测试用例(junit 原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:多线程jvm,junit main,junit不支持多线程,junit4执行顺序,unittest多线程执行,junit 原理,junit 原理,junit不支持多线程,内容如对您有帮助,希望把文章链接给更多的朋友!

转载地址: @Test(threadPoolSize = m, invocationCount = n, timeOut = i)实现了对这个方法进行多线程重复跑,threadPoolSize多少个线程执行该方法,invocationCount被执行次数,timeOut每次执行该方法的超时时间,这仅是用多线程重复执行这一个方法,而不是类下面的所有方法同时并发执行,并不是所谓的方法级别并发;TestNG是在xml指定并发的类,方法,组件,具体参照TestNG Executing Parallel Tests Example。这里不讨论TestNG与JUnit4谁好谁坏,JUnit 4 vs TestNG,只要能满足自己的业务需要即可。本文仅针对JUnit4进行二次开发。

JUnit4本身是支持多线程,但没有提供多线程的注解;本文将介绍JUnit4自身的多线程实现,自定义对单个类进行多线程执行的Runner和自定义聚合多个类进行多线程执行的Runner。

(一)JUnit4自身的多线程实现

JUnit4提供了ParallerComputer类来使用多线程执行测试用例。java.lang.Objectextended by org.junit.runner.Computerextended by org.junit.experimental.ParallelComputer源码如下:

ParallelComputer类中parallelize(Runner runner)方法重写了ParentRunner类的方法runner.setScheduler(RunnerSchedulerscheduler) ,重新定义了调度顺序,定义了一个线程池 private final ExecutorService fService = Executors.newCachedThreadPool()来多线程执行,运行结束后finished(),关闭线程池fService.shutdown(),并返回该runner。其中ParallelComputer类重写了父类 Computer的getSuite()和getRunner:

getSuite()和getRunner()根据ParallelComputer类的全局final变量classes和methods的&#;去决定是否多线程执行;classes为true时,并发以类为维度,如下:return this.classes ? parallelize(suite) : suite;methods为true时,并发以方法为维度,如下:return methods ? parallelize(runner) : runner;ParallelComputer类提供了带参的构造函数:public ParallelComputer(boolean classes, boolean methods)可以在类初始化时,直接定义多线程执行(不同维度)的对象。JUnitCore类中的方法runClasses():public static Result runClasses(Computer computer,Class<?>... classes),可以在main()函数里直接运行测试用例,参数Computer是ParallelComputer的父类,可以直接new ParallelComputer(boolean classes, boolean methods)对象作为第一个形参。

实例1:

JUnit4 多线程执行测试用例(junit 原理)

// A,B两个类并发执行,但类的方法还是串行执行;JUnitCore.runClasses(ParallelComputer.classes(), cls); // A,B两个类串行执行,但类的方法并发执行JUnitCore.runClasses(ParallelComputer.methods(), cls); // A,B两个类并发执行,其方法也并发执行JUnitCore.runClasses(new ParallelComputer(true, true), cls);

(二)自定义对单个类进行多线程执行的Runner

只要在单个测试类前,加上注解:@RunWith(MultiThreadRunner.class),就可以并发的执行用例。如下图:

(三)自定义聚合多个类进行多线程执行的Runner

有时我们需要聚合同一个模块的测试类,如果使用@RunWith(Suite.class)@SuiteClasses({A.class,B.class}),当类较多时,需要一一列举,效率不高;可以使用ClasspathSuite,支持过滤,将类名符合一定规则的类聚合,官方文档。

实现代码如下:

新建一个聚合的IntegrationBeijingOneTests.java文件:

再建一个suite文件,XuelianTestSuite.java:

直接运行XuelianTestSuite.java即可,执行过程如下:

写在最后:

设计测试用例时需考虑线程安全。建议(本组内用例):1.账号的使用,同一个测试类中每个测试方法之间需使用不同测试账号(之前未考虑并发,串行执行时方法间使用同样账号,没有影响),咱们组V4的用例共个,假设每个用例使用3个账号,则同时执行用例时,则需个账号,现库里有个账号,可能需要增加用户(空间换时间); 当然也可以控制并发执行测试方法的数量,来减少用户的使用,比如可以指定同时5个(可调)测试方法并发执行,当然,执行时间上就会相应的增加。2.非final的全局变量,全改写到测试方法内定义,变成局部变量。

Android 自定义组件之如何实现自定义组件 原文地址:

Android动画探索——图标依次变大的水滴效果 一直打算模仿ios,做一个安卓的水滴效果:比如有四个图标,四个图标依次出现,并由小变大。就像水滴掉落时一头大一头小一样。首先分析需求:1.四

安卓getListView().setTextFilterEnabled(true) getListView().setTextFilterEnabled(true),函数setTextFilterEnabled,属性为true表示listview获得当前焦点的时候,与相应用户输入的匹配符进行比对,筛选出匹配的ListV

标签: junit 原理

本文链接地址:https://www.jiuchutong.com/biancheng/381029.html 转载请保留说明!

上一篇:android实现拨打电话但不弹出拨号界面(android接听电话)

下一篇:Android 自定义组件之如何实现自定义组件(android自定义组件开发详解)

  • 无票收入后面附单据吗
  • 房产税的计算方法举例说明
  • 纳税人证明模板
  • 购买理财产品计入交易性金融资产
  • 怎么免费用别人的网
  • 增值税开票金额最大多少
  • 汽车年审属于什么费用
  • 资产负债表预收预付账款怎么填
  • 辅助生产车间最后结转到哪里
  • 软件技术服务合同需要备案吗
  • 房地产销售税额抵减
  • 消防增值服务
  • 待抵扣进项税额是什么情况下用的
  • 旧房转让土地增值税计算
  • 开票信息没有电话号码可以吗
  • 消费税的征税范围有哪些?
  • 酒店式公寓配套服务包括哪些
  • 发票过期未认证可以用吗
  • 汇算清缴报错了怎么更正
  • 非公益性赠送该怎么进行会计处理?
  • 职工福利费进项税转出怎样做账务处理
  • 投资性房地产公允价值模式账务处理
  • 技术发明案例
  • 未认证的进项税账务处理
  • 核定征收如何做账务处理
  • win10如何设置闹钟
  • 保护地址是什么意思
  • pruttct.exe - pruttct是什么进程 有什么用
  • 金钱树的养殖方法和浇水方式
  • windows太阳谷更新
  • 工作流activity
  • daio.dll 病毒
  • fatal error: opencv/cv.h: 没有那个文件或目录 错误;fatal error: opencv2/contrib/contrib.hpp: 没有那个文件或目录,opencv多版本
  • 禁止input标签输入
  • 个体户要交哪些税怎么交
  • 包装物适用的税率是多少
  • 企业购进的商品又赠送给客户,怎么做分录呀
  • cpu和gpu性能对比
  • 个体工商户年报逾期怎么办
  • vue项目打包后还能修改吗
  • 一文教会你何为重绘、回流?
  • 应付账款重分类含不含暂估
  • 餐饮费是业务招待费还是差旅费
  • 分享2款CSS3母亲节主题寄语文字动画特效
  • javascrapt
  • 营业外支出结转损益
  • 企业转让固定资产增值税税率
  • 工资以现金形式发放英文
  • linux安装ms
  • 业务招待费报销制度及流程
  • 一般纳税人附加税减半征收政策2023
  • 固定成本和变动成本举例
  • 员工备用金会计分录
  • 不开票销售收入怎么做账务处理
  • 账上存货太多实收怎么办
  • 对公帐户资金转入个人帐户规定
  • 应付职工薪酬的工资是实发工资还是应发工资
  • 基建待摊费用如何分摊
  • 代扣代缴增值税申报期限
  • 预付账款无法取得发票如何做账
  • 营业外收入算未开票收入吗
  • 纳税申报利润总额计算公式
  • 如何记账固定资产成本
  • 投资管理工作内容
  • pg 正则表达式
  • Sqlserver聚集索引和非聚集索引的区别
  • Sqlserver聚集索引和非聚集索引的区别
  • 安装Win8 64位旗舰版系统提示“windows无法安装到这个磁盘”的故障分析及解决方法
  • xp windows功能在哪里
  • linux rootkit查杀
  • vic32.dll是什么
  • 如何关闭windows8的密码
  • xp3软件
  • rapimgr.exe - rapimgr进程是什么文件.有哪些作用
  • style=display:inline
  • shell脚本用法
  • javascript点击切换div内容
  • python常用的库
  • jQuery插件是什么
  • 安卓cts认证
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设