精华内容
下载资源
问答
  • 串行测试 并行测试 随着技术的进步,随着组织从手动测试转向Selenium测试自动化 ,测试解决方案变得比以往更具可扩展性。 但是,大多数组织仍在努力的领域之一是可并行运行多个测试的可伸缩性。 许多公司仍在使用...

    串行测试 并行测试

    随着技术的进步,随着组织从手动测试转向Selenium测试自动化 ,测试解决方案变得比以往更具可扩展性。 但是,大多数组织仍在努力的领域之一是可并行运行多个测试的可伸缩性。 许多公司仍在使用顺序测试方法来提供质量保证,这会浪费大量的时间,资源和精力。 有些人不愿在Selenium中实施并行测试,而另一些人则不愿这样做,因为它们的Web应用程序足够小,可以由当前版本的窗口进行管理。 但是请记住,每个发行版本都必然会扩展Web应用程序,并且在将来某个地方,如果不采用并行测试,将会遇到很多困难。 勿忘,存在Selenium Grid的主要原因是允许测试人员并行运行测试用例。

    本文是我的尝试,旨在帮助您意识到下一个发行周期中并行测试的重要性。 我将详细讨论并行测试,从定义到Selenium中并行测试的最佳实践,我们将一一讨论,以帮助您扩展测试工作。 事不宜迟,让我们开始吧!

    Selenium自动化中的并行测试是什么?

    Selenium中的并行测试是一个过程,您可以在不同的环境中同时运行相同的测试。 并行执行测试的主要目的是减少总体时间并减少自动浏览器测试的时间,同时通过使用Selenium Grid确保高质量的产品。

    让我们来测试一下顺序执行的场景。

    假设您要测试注册表单的功能,然后为该表单编写了自动化测试脚本。 如果您想对60种不同的浏览器和操作系统组合执行此测试,并且假设一次测试在2分钟内运行,则总共需要120分钟,即2个小时。 这只是注册表单,如果您要在其他模块(例如定价页面,演示计划表单,联系表单等)上运行自动化脚本,将会发生什么! 即使您自动化了Selenium测试套件,如果您一个接一个地运行它们,那么要花很长时间才能完成测试。

    现在,在上述情况下,如果同时运行3个并行测试会发生什么?

    你是对的! 总执行时间将从120分钟缩短到40分钟。 同样,如果您运行了4个并行测试,则总时间将仅减少到30分钟,依此类推。

    为什么要并行运行Selenium测试?

    有多种原因使测试人员在Selenium中采用并行测试作为他们的第一个自动浏览器测试方法变得至关重要。 一些最受欢迎的原因是:

    广泛的测试范围

    与顺序测试相比,并行执行测试是一种更快的方法,因为它为测试人员提供了更短的测试兼容性。 例如,如果您要测试新Web应用程序的用户界面功能,则不必针对不同的OS和浏览器组合反复运行测试,则可以通过运行测试同时测试所有组合在平行下。

    减少测试时间

    顺序测试的确为Web应用程序提供了全面而彻底的自动化浏览器测试,但是这非常耗时。 另一方面,并​​行测试可以通过在多台计算机上并行运行测试来减少总体测试时间。 例如,如果您要运行100个并发测试,则可以将自动浏览器测试时间减少100倍,从而帮助您更快地交付产品。

    成本效益

    顺序测试需要开发,维护和保持测试环境为最新,这可能会影响您的总体预算。 但是Selenium中的并行测试是在云上运行的自动化过程,因此无需维护。 此外,您不必担心更新,因为云基础架构始终处于更新状态。

    优化持续集成和交付

    为了持续集成和持续交付 ,您需要频繁且快速地运行功能测试。 而且,如果您并行运行测试,它不仅可以为您节省更多时间,还可以使您获得详细的测试数据报告。 开发团队以后可以使用这些报告在代码中查找问题并快速修复它们,以优化CI / CD。

    连续测试

    在尽可能短的时间内发布高质量产品的好方法是使用持续集成和交付方法。 连续测试需要更快的测试周期,这对于顺序自动浏览器测试是不可行的。 但是,如果您在Selenium中使用并行测试,从而允许您利用云和虚拟化以更快的速度执行更多测试,则可以更快地将产品发布到市场。

    如何在像Pro这样的DevOps中实施连续测试?

    什么时候应该在Selenium中执行并行测试?

    现在,您知道Selenium中的并行测试如何对应用程序的持续集成和交付有所帮助,现在该了解何时以及如何在SDLC中实现它了。 您可以针对以下情况使用并行测试:

    • 新应用程序的功能是否具有最小的不确定性,尤其是在应用程序的更新版本与早期版本相似时。
    • 对于与银行部门有关的金融应用程序,其中大多数应用程序是相同的。 Selenium中的并行测试可用于验证应用程序的较早和最新版本。
    • 将旧数据从一个系统导入另一个系统,或从旧系统迁移到新系统的公司。
    • 自动浏览器测试期间当您需要跨浏览器,操作系统和设备的多种组合测试应用程序时。

    如何处理Selenium中的并行测试用例?

    我们认为并行执行测试的最佳方法是创建用于浏览器兼容性测试的不同项目,以测试Web应用程序的各个部分,并创建用于测试这些不同项目的主项目。 通常,在Selenium中有两个级别的并行测试标准。 第一个是入门级条件,另一个是退出条件。

    在入门级标准中,定义了在成功并行执行测试之前应满足的特定任务,例如:

    • 在Selenium中开始并行测试之前需要测试环境设置
    • 在开始自动浏览器测试过程之前,必须先定义前提条件和方案
    • 新数据和旧数据必须成功迁移

    退出级别标准描述了成功执行并行测试的步骤,包括:

    1. 针对新开发的系统运行旧系统
    2. 了解两个系统之间的差异
    3. 使用相同的输入进行完整的自动浏览器测试周期
    4. 与旧系统相比,测量新开发系统的输出
    5. 向开发团队报告错误(如果发现)

    并行测试方法只有在使用最佳实践来实现时才能成功。 以下是一些可用于在Selenium中实施并行测试的有效方法。

    使用TestNG在Selenium中进行更快的并行测试

    Selenium中并行测试执行的最佳实践是什么?

    即使使用Selenium Grid,并行运行自动化浏览器测试也不是一件容易的事,这是由于您在Selenium中执行并行测试所使用的是非结构化自动化框架。 以下是一些最佳实践,可以帮助您成功并行并行执行Selenium测试自动化。

    1.生成独立的测试用例

    如果您生成可以独立运行的独立测试,则并行执行它们会更容易。 简而言之,测试必须是独立的。 因此,在运行任何测试时,您不必担心运行测试套件的顺序。

    有时,并行执行的测试会表现出无效的行为,例如不应该失败或不应该失败,这就是脆弱性。 独立测试可以通过减少测试中可能的断点数量来减少自动浏览器测试过程中的脆弱性。 使用独立测试的另一个重要优势是,如果一个测试失败了,它不会阻止您测试其他测试功能。

    2.使用基于云的Selenium网格进行并行测试

    在本地Selenium Grid上执行自动浏览器测试可能会筋疲力尽,因为您不仅必须管理和维护所有机器,还必须设置它们。 在本地Selenium网格上进行并行测试将遇到一些可伸缩性问题,因为您将无法涵盖所有​​主要的浏览器,它们的不同版本和操作系统。

    使用基于云的Selenium Grid,您无需再担心设置。 使用LambdaTest Selenium Grid,您可以在2000多种真实浏览器及其不同版本上运行并行测试。 您不仅可以在建立基础结构上节省很多钱,而且还可以有足够的时间来完成重要的任务。

    3.避免使用硬编码值

    由于直接将硬代码嵌入源代码中,因此大多数测试人员必须按特定顺序运行测试。 这种方法不允许您有效地并行运行测试,因为它会在测试用例之间建立依赖关系。

    因此,请避免在Selenium测试自动化脚本中使用硬代码值,以确保每个测试都是独立的,并可以在必要时执行。 您甚至可以在测试框架中选择数据驱动的方法来配置测试用例。

    4.防止Selenium测试自动化案例之间的依赖性

    由于各种测试用例之间的依赖性,许多测试人员经常发现并行执行测试具有挑战性。 当测试相互依赖时,它们需要以特定的顺序运行,这通常会影响并行测试策略。 因此,您应该专注于创建可以独立执行的独立测试和原子测试。

    5.您需要有效地管理测试数据

    成功进行并行Selenium测试自动化的主要关键是有效地处理测试数据。 但是要实现这一点,您需要一个有效的策略,该策略可以在需要时创建测试数据,并在必要时进行清理。 以下是一些非常有效的基本数据管理策略。

    • 持续刷新数据–这种方法允许您在测试执行期间重置源代码。
    • 使用RESTful API –这是在运行时创建和销毁数据的好方法。
    • 自私的数据生成–这种方法具有创建策略,但是不提供任何数据清理功能。

    这些只是可用于有效管理测试数据的几种方法。 您甚至可以组合两种方法以获得所需的输出。

    创建可以有效并行运行的测试

    如果您打算在Selenium中采用并行测试,那么您肯定不想让自己失望,因为创建了多个不能在产品发布之前并行运行的测试。 因此,从一开始就要考虑并行化来开发Selenium测试自动化案例。

    从头开始进行计划不仅可以使您免于最后一刻的灾难,而且还可以帮助您有效地测试所有组合中的应用程序。 我们知道这听起来很复杂,但是编写并行运行的测试用例更容易,更小巧,更快捷。

    结语

    Selenium中的并行测试是一种快速交付Web应用程序而又不影响质量的绝佳方法,尤其是在涉及自动跨浏览器测试时。 通过并行执行Selenium测试自动化,您可以节省质量检查费用,高精度运行测试用例,优化连续集成/交付过程以及不断改进测试脚本。 但是,实施并行化需要从一开始就采取有效的策略。 在本文中,我们讨论了并行化的不同方案,以及如何将并行化用于您的业务对您有好处。

    希望您喜欢这篇文章,请在下面的评论部分中告诉我们您对这篇文章的看法。 此外,请随时转发该文章,并与希望了解有关Selenium中并行测试的更多信息的朋友共享。 目前为止就这样了。 测试愉快!

    翻译自: https://www.javacodegeeks.com/2020/05/what-is-parallel-testing-and-why-to-adopt-it.html

    串行测试 并行测试

    展开全文
  • 本文将分享一些并行测试实践相关内容。主要以理论为主 并行测试方法只有在使用最佳实践来实现时才能成功。以下是一些可用于在 Selenium 中实施并行测试的有效方法。 Selenium中并行测试执行的最佳实践 即使使用 ...

    本文将分享一些并行测试实践相关内容。主要以理论为主

    并行测试方法只有在使用最佳实践来实现时才能成功。以下是一些可用于在 Selenium 中实施并行测试的有效方法。

    Selenium中并行测试执行的最佳实践
    即使使用 Selenium Grid ,并行运行自动化浏览器测试也不是一件容易的事,这是由于您在 Selenium 中执行并行测试所使用的非结构化自动化框架所致。以下是一些最佳实践,可以帮助您成功并行并行执行 Selenium 测试自动化。

    加入我们~~群!!642830685,领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

    在这里插入图片描述
    生成独立的测试用例
    如果项目生成可以独立运行的独立测试,则并行执行它们会更容易。简而言之,测试必须是独立的。因此,在运行任何测试时,不必担心运行测试套件的顺序问题。

    有时并行执行的测试会表现出误报的行为,例如误报失败或误报成功,这就是脆弱性。独立测试可以通过减少测试中可能的断点数量来减少自动浏览器测试过程中的脆弱性。使用独立测试的另一个重要优点是,如果一个测试失败,则不会阻止您测试其他测试功能。

    基于云的Selenium网格
    在本地 Selenium Grid 上执行自动浏览器测试可能会比较麻烦,因为不仅必须管理和维护所有机器,而且还必须设置它们的基本属性和运行环境。在本地 Selenium 网格上进行并行测试会遇到一些可伸缩性问题,因为将难以涵盖所有​​主要的浏览器,不同的版本和操作系统的组合。

    使用基于云的 Selenium Grid ,无需花费过多精力在硬件和运行环境的维护上。不仅可以在建立基础结构上节省很多钱,而且还可以有足够的时间来完成重要的任务。

    在这里插入图片描述
    防止自动化用例之间的依赖
    由于各种测试用例之间的依赖性,许多测试人员经常发现并行执行测试具有极大的挑战性。当测试相互依赖时,它们需要以特定的顺序运行,这通常会影响并行测试策略。因此,并行测试应该专注于创建可以独立执行的独立测试和原子测试。

    高效地管理测试数据
    成功进行并行 Selenium 测试自动化的主要关键是有效地处理测试数据。但是要实现这一点,整个团队需要一个统一有效的策略,该策略可以在需要时创建测试数据,并在必要时进行清理。以下是一些非常有效的基本数据管理策略。

    持续刷新数据:这种方法可以在测试执行期间重置数据

    使用RESTful API:这是在运行时创建和销毁数据的好方法

    自私的数据生成:这种方法具有创建策略,但是不提供任何数据清理功能。

    这些只是可用于有效管理测试数据的几种方法。可以组合两种方法来获得所需的数据维护策略。

    在这里插入图片描述
    创建并行测试用例
    如果团队打算在 Selenium 中采用并行测试,那么肯定希望自己能够使效率得到成倍的提升。因为很多测试用例的编写都需要建立在测试环境发布的产品基础上,很难创建在产品发布之前并行运行的测试用例。因此,从一开始就要考虑并行化来开发 Selenium 测试自动化案例。

    从头开始进行计划不仅可以使您免于 最后一小时 的灾难,而且还可以有效地测试所有组合场景中的应用程序。这听起来很复杂,但是编写并行运行的测试用例更容易,更小巧,更快捷。

    总结
    Selenium 中的并行测试是一种快速交付 Web应用 而又不影响质量的绝佳方法,特别是在涉及到 如何在跨浏览器测试 时。通过并行执行 Selenium 测试自动化,可以节省质量检查费用,高精度运行测试用例,优化连续集成/交付过程以及不断改进测试脚本。但是实施并行化需要从一开始就采取有效的策略。

    加入我们~~群!!642830685,领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!

    展开全文
  • 浅谈并行测试

    千次阅读 2019-01-18 11:20:17
    并发(Concurrent) vs 并行(Parallel)一谈到并行测试,很多人自然而然的想到了使用多线程来执行测试的方式。其实多线程执行的方式叫做并发,并不能做到完全的并行,特别是针对目前大部分虚拟机都是多核CPU,并发测试...

    并发(Concurrent) vs 并行(Parallel)

    一谈到并行测试,很多人自然而然的想到了使用多线程来执行测试的方式。其实多线程执行的方式叫做并发,并不能做到完全的并行,特别是针对目前大部分虚拟机都是多核CPU,并发测试并不能完全发挥硬件的计算能力。让我们先看看并发和并行的概念吧:

    • 并发:多个任务在同一个 CPU 核上按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。针对 CPU 内核来说,任务仍然是按细粒度的串行执行。
    • 并行:区别与串行,多个任务真正的分配到不同的 CPU 内核上去执行的,它们是真正的同时执行。

    更通俗一点的类比,并发是多辆马车在同一个赛道上跑; 并行是多赛道,马车在各自的赛道上跑,彼此不受影响。

    并发测试 vs 并行测试

    类似的概念也应用到了Maven Surefire 执行所有测试用例的行为上,基于不同的配置:

    • 测试并发执行 -- 所有测试用例逻辑上在同一个 JVM 上执行,使用多线程分割测试执行集
    • 测试并行执行 -- 所有测试用例可进行分组跑在多个的 JVM 上,使用多进程分割测试测试集
    测试代码要求资源消耗 (CPU、内存)稳定性
    并发测试高,必须做到线程安全差,存在资源竞争,很难重现问题
    并行测试低,无好,资源隔离

    针对各种测试场景,采用多线程和多进程方式执行测试优化的能力大致如下:

    CPU密集型文件读写网络请求
    多线程小,无法改善运行效率中,效率改善提现在读写大文件大,网络延时往往超过时间片切换时间
    多进程大,能够利用计算机的多核优势大,不管大小文件都能够改进效率中,创建进程效率低

    结论:CPU密集任务一般用多进程提高运行效率,网络请求任务一般用多线程提高运行效率,文件读写看主要是CPU计算耗时还是等待耗时

    执行策略

    并行和并发测试不是互斥的,正好相反,可以根据的硬件测试环境来响应指定对应的策略。通过测试执行观察平均的CPU和内存的利用率,在CPU有空闲利用率的情况先,优先添加进程,在CPU利用率满负荷的情况,可以适当添加线程来进一步提升效率,一般的经验是多线程数 = n*处理器核心数,过多的程序线程数不但不会提高性能,反而还会因为线程间的频繁切换而受影响,具体需要根据线程处理的业务考略,不断调整线程数个数,确定当前系统最优的线程数。

    从实践角度上说,maven的surefire的插件可以同时支持forkCount (多进程)和parallel(多线程)

    • parallel:可以指定是class还是suite,还是all,同时指定threadCount确定线程个数
    • forkCount: 指定是多少个进程,同时通过reuseForks确定是否重用进程,还是每次新开

    具体可以参考surefire的文档

    调度优化

    当应用了并行测试提高测试执行效率以后,跟木桶原理一样,整个测试计划的执行时间取决于最耗时的进程或者最耗时的线程,如果执行调度不合理,很有可能不能达到节省执行时间的目的。

    推荐对每个case执行的时间做记录,统计顺序执行所有case的时间T,然后根据进程*线程的个数N,计算每个线程理论上平均时间T/N,把这个作为基准值,去拼装case的执行序列,从而让执行时间无限接近于T/N。



    展开全文
  • 2018-06-20 今天学习的主题主要是并行测试。 因为对并行的概念还不是太了解,因此翻阅了计算机操作系统这本书,这本书中对于并行是这样阐述的...再来了解一下并行测试的概念,这里参考了一篇文献《并行测试技...

    2018-06-20

    今天学习的主题主要是并行测试。

    因为对并行的概念还不是太了解,因此翻阅了计算机操作系统这本书,这本书中对于并行是这样阐述的:

    在操作系统的基本特性中,有一个特性叫做并发性,而并行性和并发性是既相似又互相区别的两个概念:

    并行性是指两个或多个事件在同一时刻发生,而并发性是指两个或多个事件在同一时间间隔内发生。

    再来了解一下并行测试的概念,这里参考了一篇文献《并行测试技术综述 》

    并行测试是建立在并行概念基础之上的,并行测试的核心是可以对多个被测对象进行测试。UUT(unit under test)被测试模块。

    • 多个UUT的并行测试实现方式:

    1.通过接口开关转换测试:先连接第一个 UUT进行测试,在处理器对测试信号进行分析处 理等操作的同时,接口开关断开第一 个 UUT,将另一 UUT 连接到 ATS进行测试; 依次类推到多个 UUT。

    优点:

    这种并行测试实现方法通过转换开关使得测试系统在整个测试过程中始终处于非空闲状态,系统的测试吞吐量成倍提高。 UUT可以处于不同的测试区域,加上配套的网络设备,可 以实现分布式并行测试,实现 ATS的共享。实际上,这种方式在某一时刻, ATS只测试某一个 UUT执行一项测试任务,还不是真正意义上的并行测试。

    缺点:

    每项测试均需是独立的,它无需上一项测试的结果,测试结果也不会影响到下一项测试,系统容易出现死锁。

    2.并发测试:

    真正意义上的并行测试,主要是建立在一个分布式测试系统上,每个测试节点都可以独立进行一个测试[ 7~ 9] 。缺点是需要增加许多额外测试设备,而且需避免复杂的资源共享问题。

    • 单个UUT的并行测试实现方式:

    1.交迭等待并行测试

    2.分组并行测试

    真正在单个 UUT上的并行测试是同步或异步地运行两个或多个测试程序,完成对多个参数的测量。程序执行第一组测试,即测试 1和测试 2分别在不同的线程内同时执行。第二组内的各项 测试也能同步或异步进行,在不同的线程内同时执行测试 3、测试 6和测试 10,依次类推。之所以要把测试分组,是因为要保证同一组的被测试量具有相同的测试要求,在并行运行的时候不会互相影响。这就要求在 测试需求分析时对测试任务进行分组。

    并行测试技术通过对系统资源的优化利用,大大提高了测试系统的测试效率和性价比,其突出表现为:

    1)提高 ATS的吞吐率。并行测试系统的主要优势就是能在同一时间内完成多个 UUT的测试任务,从 批量测试的角度提高了系统的吞吐率,从而达到减少测试时间的目的。

    2)提高仪器使用效率。并行测试从减少仪器的闲置时间和充分利用仪器资源两个方面来提高仪器的使用效率。如前文所述,并行测试任务不断地运行,申请仪器地使用,仪器一旦闲置就再次被新的测试任务申请使用。在最理想的状态下,整个测试过程中仪器一直处于工作状态。

    3)缩减测试时间。并行测试可以同时进行多个测试,在一定时间内,在执行两个测试任务时,并行测试 要能比传统顺序测试测试量提高 50%,但事实上,由于存在多个测试的切换时间,因此一般会低于 50%。

    针对上述文献中所提到的进程和线程,同步和异步的概念:

    1. 进程较为典型的定义:
    2. 进程是程序的一次执行。
    3. 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
    4. 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

    进程的基本状态:

    就绪(Ready)状态

    执行(Running)状态

    阻塞(Block)状态

    进程中一个很重要的概念**PCB(进程控制块),它的作用是使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能够独立运行的基本单位,一个能与其他进程并发执行的进程。**详细阐述如下:

    1.作为独立运行基本单位的标志

    2.能实现间断性运行方式

    3.提供进程管理所需要信息

    4.提供进程调度所需要信息

    5.实现与其他进程的同步与通信

    进程同步:

    是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间按照一定的规则(或时序)共享系统资源,并能很好的相互合作,从而使程序的执行具有可再现性。

    生产者-消费者模式

    生产者-消费者问题是经典的线程同步问题:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费,为使生产者进程与消费者进程能并发执行,在两者之间设置一个具有n个缓冲区的缓冲池,生产者进程将其所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。

    //用一个数组buffer来表示上述的具有n个缓冲区的缓冲池
    //每投入一个产品时,数组单元指针in+1
    //循环缓冲in=(in+1)%n
    //缓冲池满(in+1)%n=out,in=out表示缓冲池空
    //整型变量counter
    int in=0,out=0,count=0;
    item buffer[n]
    //生产者
    void producer(){
    while(1){
    	produce an item in nextp;
    	...
    	while(counter==n)
    	;
    	buffer[in]=nextp;
    	in=(in+1)%n;
    	counter++;
    }
    };
    //消费者
    void consumer()
    {
        while(1){
            while(counter==0)
                ;
            nextc=buffer[out];
            out=(out+1)%n;
            counter--;
            consumer the item in nextc;
        }
    }
    

    java实现中必须掌握的方法Blocking Queue:

    package com.zjn.inter;
    
    public interface Consumer {
        void consume() throws InterruptedException;
    }
    
    
    package com.zjn.inter;
    
    public interface Producer {
        void produce() throws InterruptedException;
    }
    
    
    package com.zjn.impl;
    
    public class Task {
        public int no;
        public Task(int no){
            this.no=no;
        }
    }
    
    
    package com.zjn.model;
    //为模型定义抽象工厂方法
    public interface Model {
        Runnable newRunnableConsumer();
        Runnable newRunnableProducer();
    }
    
    
    package com.zjn.test;
    
    import com.zjn.inter.Consumer;
    
    abstract class AbstractConsumer implements Consumer,Runnable {
        @Override
        public void run(){
            while (true){
                try {
                    consume();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    break;
                }
            }
        }
    }
    
    
    package com.zjn.test;
    
    import com.zjn.inter.Producer;
    
    abstract  class AbstractProducer implements Producer,Runnable {
        @Override
        public void run(){
            while (true){
                try {
                    produce();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    break;
                }
            }
        }
    }
    
    
    package com.zjn.test;
    
    import com.zjn.impl.Task;
    import com.zjn.inter.Consumer;
    import com.zjn.inter.Producer;
    import com.zjn.model.Model;
    
    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.LinkedBlockingDeque;
    import java.util.concurrent.atomic.AtomicInteger;
    
    //把并发和容量控制在缓冲区中
    public class BlockingQueueModel implements Model {
        private final BlockingQueue<Task> queue;
        private final AtomicInteger increTaskNo=new AtomicInteger(0);
        public BlockingQueueModel(int cap){
            //LinkedBlockingQueue的队列是lazy-init的
            //但ArrayBlockingQueue在创建时就已经init
            this.queue=new LinkedBlockingDeque<>(cap);
        }
    
        @Override
        public Runnable newRunnableConsumer() {
            return new ConsumerImpl();
        }
    
        @Override
        public Runnable newRunnableProducer() {
            return new ProducerImpl();
        }
        private class ConsumerImpl extends AbstractConsumer implements Consumer,Runnable{
    
            @Override
            public void consume() throws InterruptedException {
                Task task=queue.take();
                //固定时间范围的消费,模拟相对稳定的服务器处理过程
                Thread.sleep(500+(long)(Math.random()*500));
                System.out.println("consume:"+task.no);
            }
    
        }
        private class ProducerImpl extends AbstractProducer implements Producer,Runnable{
    
            @Override
            public void produce() throws InterruptedException {
                 //不定期生产,模拟随机的用户请求
                Thread.sleep((long)(Math.random()*1000));
                Task task=new Task(increTaskNo.getAndIncrement());
                queue.put(task);
                System.out.println("produce:"+task.no);
            }
        }
        public static void main(String[] args){
            Model model=new BlockingQueueModel(3);
            for(int i=0;i<2;i++){
                new Thread(model.newRunnableConsumer()).start();
            }
            for(int i=0;i<5;i++){
                new Thread(model.newRunnableProducer()).start();
            }
        }
    }
    
    

    参考博文:http://www.importnew.com/27063.html

    展开全文
  • Verilog中always块并行测试

    千次阅读 2020-03-29 19:53:02
    Verilog中always块并行测试   FPGA的特色是并行执行的,尤其是在多个always块,并行执行时,要考虑一下变量值的变化。本文使用两个always块,第一个在clk上升沿到来时,更新a的值;第二个always块在clk上升沿到来...
  • 一、什么是并行测试多台设备同时执行多个用例。。。二、原理appium启动多个服务,每个用例对应手机,占用不同的服务端口进行测试。利用testng的多线程实现并行。 网上有些教程说grid,然后加什么json,这是以前...
  • 随着技术的进步,随着组织从人工测试转向Selenium测试自动化 ,测试... 有些人不愿在Selenium中实施并行测试,而另一些人则不愿这样做,因为它们的Web应用程序足够小,可以由当前版本的窗口进行管理。 但是请记住...
  • 增加并行测试的好处

    万次阅读 2020-08-17 10:08:00
    借助并行测试,组织可以极大地节省执行自动化测试所需的时间,同时极大地改善了所述测试的范围和规模。 ROI是即时的,可以很容易地量化,因为并发执行的次数和运行测试套件所花费的时间之间存在直接的关联。例如,...
  • 分析了突变测试的最新进展,这有助于降低与此技术相关的成本,并提出应用它们来解决进化突变测试(EMT)中的当前缺陷. 将重点放在突变测试中提出的方法应用于进化突变测试,这是一种基于遗传...
  • A Path Coverage-Based Reduction of Test Cases and Execution ...基于路径覆盖的并行执行减少测试用例和执行时间 © Springer Nature Singapore Pte Ltd. 2019 M. N. Hoda et al. (eds.), Software Engineerin...
  • Appium提供了一种方式以在一台设备上自动操作多个会话,也就是采用多个标识符的方式启动多个Appium服务器端从而实现测试并行执行
  • SPLASH2并行测试程序

    千次阅读 2012-08-28 15:54:41
    SPLASH2 1992年,斯坦福大学推出了Stanford ParalleL ...SPLASH-2使用C语言,由12个程序组成,使用PThread并行方式。 SPLASH-2包含4个核心程序: Cholesky:用于将一个稀疏矩阵拆分成一个下三角矩阵和它的
  • nose有个MultiProcess插件,可以多进程并发测试你的用例,缩减测试时间。 贴上简单的例子: from nose.plugins.plugintest import run_buffered as run from nose.plugins.multiprocess import MultiProcess import ...
  • appium+selenium grid appium并行测试

    千次阅读 2015-12-19 23:45:49
    appium使用说明 ...1、nodeconfig.json的browserName、Version、platform在分配测试用例起到作用,但需要在代码中设置BrowserName 2、一台电脑最好只连接一个设备,appium运行会运行在最先连接的设备上。
  • 作为C++11 STL参考实现的boost库,不仅支持11标准,而且做了许多扩展,掌握其使用方法,对于提高代码质量,尤其重要。以其多线程并行无锁队列为例,结合代码和说明,演示了无锁boost库的使用和编译方法。
  • maven 单元测试并行 大约是时候单元测试的开发人员能够使用批注在Parallel中运行测试。 在今天的博客文章中,我们将介绍如何使用Easytest提供的注释使传统的Junit测试并行运行。 易测 是在JUnit之上构建的测试框架...
  • Junit 并行执行测试

    2018-05-16 18:43:00
    从Junit4.7开始可以并行运行测试。 必须设置parallel参数,可以改变threadCount或useUnlimitedThreads属性。 测试中指定了parallel,项目使用的是JUnit 4.7+的话,就会用到concurrent JUnit provider,它利用了...
  • 并行程序测试

    2006-09-28 12:17:00
    写一个正确的并行程序要比写顺序执行程序困难。 其原因是并行程序中潜在的风险和错误的... 同样测试并行程序要比测试顺序执行程序困难。首先,测试并行程序的程序本身就是并行程序;其次,并行程序的错误更难预测...
  • 测试用例都是独立的,用例之间不存在依赖时,我们可以进行并行设置,并行执行测试用例。 并行用例执行的维度有哪些? 本文将介绍通过TestNG并行执行case的相关知识点 正文 1、创建两个测试类 TestNGParallel1....
  • matlab2016并行操作测试

    2017-05-15 20:35:52
    matlab2016 自带并行操作简单测试
  • 测试并行程序

    2012-04-09 10:42:13
    测试并行程序   作者:Cesar Martinez(英特尔) 计算机科学领域的一条定律就是世人对更高性能的追求永远不会满足。如今,这些需求不仅仅针对速度,而且还针对体积更小、功能更加强大的移动设备。为了满足...
  • .NET并行测试实例

    千次阅读 2009-03-04 20:31:00
    .NET并行测试实例并行库存应用场景: 并行计算首要目的是提高CPU的计算能力,简单说程序应该是以CPU密集型运算为主的,如果你的程序是IO(磁盘和网络)密集型运算,并行计算并不能对你的程序有多大的提高。...
  • 有一些排序算法如归并排序、快速排序等可以分解为子问题的算法是可以使用多线程来加速排序的,之前做了个小实验,测试了下自己写的MergeSort::parallelSort、QuickSort::parallelSort以及Arrays::sort、Arrays::...
  • 并行处理系统测试正式启动

    千次阅读 2015-11-09 23:39:30
    作者:朱金灿来源:http://blog.csdn.net/clever101 公司的硬件终于买好了,正式开始并行处理系统的测试。无图无真相,先上两张图: 上图是并行处理系统的机架正面图。简单说下这个机架的硬件配置吧:四台浪潮...
  • 并行计算中测试时间

    2016-09-19 10:29:36
    多核并行计算测试时间以最后一个为准: 因为按照常理说每个函数只是输出一次时间,而多核并行则每个线程都会输出一次时间,所以以最后一次输出为准。
  • C#并行计算测试

    千次阅读 2014-10-24 17:30:04
    using System.Threading.Tasks; class Program { static void Main(string[] args) { //aa(); //bb(); //Parallel.For(0, 100, (x) => //结束索引不包含在内
  • 测试并行程序与以往有什么不同 ? 随着多核的普及,并行程序的开发已经提上日程。相对串行程序而言,并行程序更有可能出错。一方面,并行程序的执行序列具有很强的随机性,线程交错执行的序列可能每次都不一样,而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 248,540
精华内容 99,416
关键字:

并行测试