一、契机

相信很多使用selenium进行UI测试,再对接jenkins时,都是简单的在jenkins上将命令输入就完事了。

但是,相信你一定会遇到以下问题:

1、你需要同时跑不同文件或不同类的用例,怎么处理?用selenium grid,但我仅仅是功能,不想去区分浏览器,并且代码中我也不想写grid?

2、在jenkins中并发,怎么将报告合并成一份?

3、用测试框架的并发插件,比如nose processes, pytest的xdist,都是在一台机器上,执行selenium 同时打开多个浏览器,你确保机器能受得了?

二、思路

    带着以上几个问题,网上一直没有好的解决方法,普遍使用的是selenium grid,但相信很多人对grid都不喜欢

最近在看jenkins中的pipeline模式,发现其中有一个很好用的功能:parallel 并发,那就来用parallel来解决我们以上的问题

三、解决

    jenkins的pipeline就不多介绍,看官网https://jenkins.io/doc/book/pipeline/就行,以后看时间会写写这方面的文章

   1)先看看用Declarative方法写的并发parallel

pipeline {
agent none stages {
stage('Run Tests') {
parallel {
stage('Run_test1') {
agent {
label "10.3.208.151"
}
steps {
script{
sh "sleep 20"
}
}
} //-----------------------------------------------------------
stage('Run_test2') {
agent {
label "10.3.208.151"
}
steps {
script{
sh "sleep 10" }
}
} //----------------------------------------------------------- //----------------------------------------------------------
}
}
}
}

这么简单的一个并发脚本,看看执行时间,总的构建时长为23秒

那有了这个基础后,我们将我们的在jenkins上执行selenium脚本全改成pipeline方式,按类或者按文件执行,这里就由你自己控制了。

2)问题一解决了,我们看看问题二,将报告合并

相信很多测试者生成的报告有很多种,有xml格式的,有html格式的,有用allure生成的。这里我们介绍xml和allure格式的,因为html格式的还要自己写合并程序,太麻烦

1,   xml方式的,在jenkins上会直接生成TestReport,所以这个很好处理,只需要在pipeline中的每个stage中用post将 xml发布,如下

post {
always {
junit 'acl.xml'
}
}

2,  allure方式的,这个我们了解下allure原理,allure是将本地的生成的xml文件最后用allure命令生成报告的,所以我们的难点是怎么拿到在不同机器上的文件,然后再放在一台机器上,最后生成报告。

还好,pipeline有一个stash的方式,是在构建后将文件存在master上,给后续的job使用,后续的job再用unstash拿到

所以我们可以在每个stage中这么写

stash includes: 'allure-results\\*', name: 'xxxxx'

将报告存起来,名字叫xxxx

然后我们在parallel并发的stage外再起一个stage,拿到文件,最后生成报告,如下

stage('Report') {
agent {
label "master"
}
steps {
unstash 'xxxxxx'
unstash 'xxxxxx2'
}
post {
always {
allure includeProperties: false, jdk: '', results: [[path: 'allure-results']]
}
} }

完美解决

3)  任务的并发限制

  如果你想控制你的并发数量,可以有两种方式实现

1,用节点的executors来限制

2,下载jenkins插件 Throttle Concurrent Plugin

好了,基本解决方案已实现,但实际落地,还需要学习很多。比如jenkins中pipeline的各种使用方法,过程中的各种坑。有问题大家可以留言。

使用jenkins pipeline,并发selenium测试 --- 你值得了解的更多相关文章

  1. Jenkins中配置selenium测试

    Jenkins中配置selenium测试 2015/03/23 第一步在jenkins中配置selenium服务器 第二步工程配置: 第三步:执行构建: 第四步,查看报告:

  2. Jenkins 十二: 集成 selenium 测试

    我的selenium采用的是python版本. 其实 selenium java版本也类似. 1. 在jenkins里面新建selenium 测试项目. 源码管理采用 “Subversion”,输入 ...

  3. [转] Jenkins Pipeline插件十大最佳实践

    [From] http://blog.didispace.com/jenkins-pipeline-top-10-action/ Jenkins Pipeline 插件对于 Jenkins 用户来说可 ...

  4. [持续交付实践] Jenkins Pipeline 高可用设计方法

    前言 这篇写好一段时间了,一直也没发布上来,今天稍微整理下了交下作业,部分内容偷懒引用了一些别人的内容.使用Jenkins做持续集成/持续交付,当业务达到一定规模的时候,Jenkins本身就很容易成为 ...

  5. Docker的Jenkins Pipeline工作流

    原文地址:http://www.youruncloud.com/blog/127.html 分享主题 一个软件产品的开发周期中,尤其是敏捷开发,持续集成和持续部署是必不可少的环节,而随着产品的丰富,模 ...

  6. jenkins pipeline的声明式与脚本式

    自从Jenkins 2.0 版本升级之后,支持了通过代码(Groovy DSL)来描述一个构建流水线,灵活方便地实现持续交付,大大提升 Jenkins Job 维护的效率,实现从 CI 到 CD 到转 ...

  7. 在容器中运行 Jenkins pipeline 任务

    持续集成中的 pipeline 技术和 docker 都是当前正在发展的主流方向,当然把它们结合起来在 CI/CD 过程中发挥出更强大的威力也是大家共同的目标.本文将介绍如何在 Jenkins pip ...

  8. 基于Jenkins Pipeline的ASP.NET Core持续集成实践

    最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署效率,因此这里总结一下. 一.关于持续集成与Jenkins Pipelin ...

  9. Jenkins pipeline job 根据参数动态获取触发事件的分支

    此文需要有Jenkins pipeline job 的简单使用经验 场景 我们日常的测试函数, 一般是不能仅仅在本地跑的,还需要一个公共的跑测试的环境,作为合并新的PR的依据. 如果用Jenkins ...

随机推荐

  1. C#利用QRCoder生产二维码

    系统使用.NET4.5.1 代码如下: using System; using System.Collections.Generic; using System.Linq; using System. ...

  2. Installing Windows Features without Internet

    To set the source file path for the sxs folder, complete these steps: Ensure you have the correct in ...

  3. art.template 循环里面分组。

    后台提供给我们一个数组,我们要用模版实现上面的格式输出怎么版呢? 下面就是解决方案: <h2>循环4个一组</h2> <script type="text/ht ...

  4. Global Mapper如何加载在线地图

    Global Mapper是一个比较好用的GIS数据处理软件,官网:http://www.bluemarblegeo.com/products/global-mapper.php ,除使用ArcGIS ...

  5. 微软BI 之SSIS 系列 - 使用 Multicast Task 将数据同时写入多个目标表,以及写入Audit 与增量处理信息

    开篇介绍 在 SSIS Data Flow 中有一个 Multicast 组件,它的作用和 Merge, Merge Join 或者 Union All 等合并数据流组件对比起来作用正好相反.非常直观 ...

  6. window7开启Administrator账户

    需求描述: 在工作遇见,安装部分软件,对目录不具有写权限.为了彻底解决问题.启用Administrator账户! 问题解决: 激活Administrator账户,并设置密码 重启系统,用Adminis ...

  7. 公司Docker环境配置

    1.安装最新的docker:$ curl -fsSL get.docker.com -o get-docker.sh$ sudo sh get-docker.sh 2.安装docker-compose ...

  8. ES 插入十万条数据耗时1573秒

  9. Python中的format()函数

    普通格式化方法 (%s%d)生成格式化的字符串,其中s是一个格式化字符串,d是一个十进制数; 格式化字符串包含两部分:普通的字符和转换说明符(见下表), 将使用元组或映射中元素的字符串来替换转换说明符 ...

  10. android开发(48) Android Snackbar 的使用

    Snackbar 类似toast,用于向 用户展示信息,和用户交互,它能够显示一个 按钮 获得用户的操作.它的特点如下: 作为android.support.design.widget.Coordin ...