我用selenium和java写了一些自动化。
我用build.gradle运行cucumber功能。
每个功能都有一些测试。
是否有现成的方法可以使独立脚本并行运行?
他们都使用selenuim ChromeWebDriver。
如果没有,你建议我怎么写?
我假设您使用测试任务来执行cucumber跑步者?如果是这样,你可以在build.gradle中使用它:
tasks.withType(Test) {
maxParallelForks = 5
}
task uiTests(type: Test){ includes = ['**/*Cucumber*'] }
此 uiTests 任务假设所有 Runner 类的名称中都有 Cucumber,如果这不适合您,您可以在其中编写每个 Runner 类。
现在,如果您为每个特征文件提供一个自己的运行程序,那么不同的运行程序将并行执行
您可以在顶部给每个Feature一个不同的标签,然后让每个跑步者只执行一个标签。可以这样配置
@CucumberOptions{tags = @Feature1}
在每个跑步班
这是一种对我有用的方法(重要说明:使用 Maven 作为构建管理器)
===========================================
为了运行这个例子,您需要在您的机器上安装Maven和Firefox。
检索源代码后,可以通过导航到 Cucumber-JVM-Parallel 目录并发出以下命令来运行:
mvn全新安装
这将运行示例项目并同时启动两个浏览器窗口。每个浏览器窗口对应于示例中的Cucumber特征文件。运行完成后,将在/target/cumber-report/index.html生成报告。
本文的其余部分将进一步详细介绍示例项目的结构,尽管假设您之前有一些Cucumber的经验。如果没有,Cucumber JVM自述是一个很好的开始。
你首先需要的是你的特征文件来描述你期望的行为。在本例中,我们有两个独立的特性,尽管您也可以在单个特性中并行运行场景。
我们可以做的方法是使用 Cucumber 标签,它可以应用于功能中的所有场景或单个场景。
上面,您可以看到我们有两个功能文件。这些文件位于“src/test/resources”文件夹中。每个功能文件都被标记(@autocorrect
和@search
),并包含一个场景。
现在我们有了我们的场景,我们需要添加一些粘合代码来将每一步绑定到我们的底层测试框架中
这些被称为步骤定义,可以在“src/Java/cucumber . JVM . parallel/cumber/step defs”中找到。
在上面的片段中,您可以看到我们使用ShareDRiver实例直接与浏览器窗口通信。这是基于在所有测试之间共享单个浏览器会话的cucumber示例之一(使用依赖注入),以消除每次测试启动浏览器实例的需要,从而加快执行速度。在我们的例子中,这导致每个线程一个浏览器会话。ShareDRiver类可以在“/src/test/java/cucumber.jvm.parallel/cucumber”中找到。
该片段还显示了我们使用了一个“SearchPageObject”实例,它只是一个表示谷歌搜索页面的类,位于“/src/test/java/cumper.jvm.parallel/pageobjects”中。
这不是必需的,但在更大的项目中使用页面对象模式以简化可运维性是一个很好的实践。
上面,您可以看到page对象包含页面上元素的标识符以及特定于该页面的方法。
该过程的下一阶段是添加测试运行程序。我们正在使用 JUnit 而不是 CLI,这是我们需要开始专门构建事物以处理测试并行运行的地方。
在上面来自“SearchAT.class”的代码片段中,您可以看到我们正在指定特性文件的位置。我们还指定了一个标签(< code>@search),它与我们的一个cucumber特性文件标签和测试结果的html报告目的地相关。
这意味着“运行所有标记为@search的测试,并将结果写入/search文件夹”。
然后我们有另一个类“AutoCorrectAT”,它对所有标记为“@autocorrect”的测试都执行相同的操作。这两个类都可以在“/src/test/java/cumber.jvm.parallel/cumber”下找到。
添加另一个线程只是添加一个带有不同标签的新运行器类的情况。
到目前为止,这些说明与使用WebDRiver创建一组相对简单的非并行Cucumber-JVM测试以与网站交互相同。
我们现在需要转到Maven POM文件,看看我们是如何使测试并行运行的。
在上面的片段中,您可以看到maven-surefire插件用于运行我们的验收测试——任何以*AT结尾的类都将作为JUnit测试类运行。多亏了JUnit,使测试并行运行现在是设置forkCount配置选项的一个简单例子。在示例项目中,这被设置为5,这意味着我们一次最多可以运行5个线程(即5个runner类)。
============================
您可以在并行文章中的运行Cucumber-JVM测试中获得更多详细信息
希望这对你有帮助。
内存池 简介: Nginx里内存的使用大都十分有特色:申请了永久保存,抑或伴随着请求的结束而全部释放,还有写满了缓冲再从头接着写.这么做的原因也主要取决于Web Server的特殊的场景,内存的分配和请求相关,一条请求处理完毕,即可释放其相关的内存池,降低了开发中对内存资源管理的复杂度,也减少了内存碎片的存在. 所以在Nginx使用内存池时总是只申请,不释放,使用完毕后直接destroy整个内存池
Computers in the future may have as few as 1,000 vacuum tubes and weigh only 1.5 tons. — Popular Mechanics (1949) 在本章中,我们将学习如下内容: 使用版本控制 使用提交钩子 使用 Rake 部署变更 配置 Puppet 的文件服务器 从 cron 运行 Puppet 使用自动签名 预签
9.2 ABP基础设施层 - 集成Dapper 9.2.1 简介 Dapper 是基于.NET的一种对象关系映射工具。Abp.Dapper简单的将Dapper集成到ABP。它作为第二个ORM可以与EF 6.x, EF Core 或者 Nhibernate 工作。 9.2.2 安装 在开始之前,你需要安装Abp.Dapper以及 EF 6.x, EF Core 或者 NHibernate 这3个当中
9.2 ABP基础设施层 - 集成NHibernate ABP可以与任何ORM框架协同工作,它内置了对NHibernate的集成支持。本文将介绍如何在ABP中使用NHibernate。本文假定你已经初步掌握了NHibernate。 译者注:怎么才算初步掌握了NHibernate呢?译者认为应当懂得使用NHibernate进行CRUD,懂得使用Fluent模式进行映射。 9.2.1 Nuget包 要
9.1 ABP基础设施层 - 集成Entity Framework ABP可以与任何ORM框架协同工作,它内置了对EntityFramework的集成支持。本文将介绍如何在ABP中使用EntityFramework。本文假定你已经初步掌握了EntityFramework。 译者注:怎么才算初步掌握了EntityFramework呢?译者认为应当懂得使用Code First模式进行CRUD。 9.1
ngrok运行全球分布式隧道服务器,为您的应用程序提供快速,低延迟的流量。 地点 ngrok运行世界各地数据中心的隧道服务器。数据中心在给定区域内的位置可能改变而不通知(例如,欧洲服务器可能从法兰克福移动到伦敦)。 us - United States (Dallas) eu - Europe (Frankfurt) ap - Asia/Pacific (Singapore) au - Austr