使用jenkins pipeline,并发selenium测试 --- 你值得了解
一、契机
相信很多使用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测试 --- 你值得了解的更多相关文章
- Jenkins中配置selenium测试
Jenkins中配置selenium测试 2015/03/23 第一步在jenkins中配置selenium服务器 第二步工程配置: 第三步:执行构建: 第四步,查看报告:
- Jenkins 十二: 集成 selenium 测试
我的selenium采用的是python版本. 其实 selenium java版本也类似. 1. 在jenkins里面新建selenium 测试项目. 源码管理采用 “Subversion”,输入 ...
- [转] Jenkins Pipeline插件十大最佳实践
[From] http://blog.didispace.com/jenkins-pipeline-top-10-action/ Jenkins Pipeline 插件对于 Jenkins 用户来说可 ...
- [持续交付实践] Jenkins Pipeline 高可用设计方法
前言 这篇写好一段时间了,一直也没发布上来,今天稍微整理下了交下作业,部分内容偷懒引用了一些别人的内容.使用Jenkins做持续集成/持续交付,当业务达到一定规模的时候,Jenkins本身就很容易成为 ...
- Docker的Jenkins Pipeline工作流
原文地址:http://www.youruncloud.com/blog/127.html 分享主题 一个软件产品的开发周期中,尤其是敏捷开发,持续集成和持续部署是必不可少的环节,而随着产品的丰富,模 ...
- jenkins pipeline的声明式与脚本式
自从Jenkins 2.0 版本升级之后,支持了通过代码(Groovy DSL)来描述一个构建流水线,灵活方便地实现持续交付,大大提升 Jenkins Job 维护的效率,实现从 CI 到 CD 到转 ...
- 在容器中运行 Jenkins pipeline 任务
持续集成中的 pipeline 技术和 docker 都是当前正在发展的主流方向,当然把它们结合起来在 CI/CD 过程中发挥出更强大的威力也是大家共同的目标.本文将介绍如何在 Jenkins pip ...
- 基于Jenkins Pipeline的ASP.NET Core持续集成实践
最近在公司实践持续集成,使用到了Jenkins的Pipeline来提高团队基于ASP.NET Core API服务的集成与部署效率,因此这里总结一下. 一.关于持续集成与Jenkins Pipelin ...
- Jenkins pipeline job 根据参数动态获取触发事件的分支
此文需要有Jenkins pipeline job 的简单使用经验 场景 我们日常的测试函数, 一般是不能仅仅在本地跑的,还需要一个公共的跑测试的环境,作为合并新的PR的依据. 如果用Jenkins ...
随机推荐
- Android的Databinding-自定义生成类名字
1. 在xml中,添加class的属性并设置为自定义名字<data class="com.example.CustomBinding"></data>2. ...
- wxParse解析富文本内容使点击图片可以选中并实现放大缩小
wxParse解析富文本内容不多说,之前写过步骤介绍,主要是在使用过程中发现解析的富文本内容里有图片时有的可以点击放大缩小,有的点击却报错,找不到imgUrls. 经过排查发现:循环解析的富文本内容正 ...
- 微软BI SSRS 2012 Metro UI Win 8 风格的报表课程案例全展示
开篇介绍 微软BI SSRS 2012 Metro UI 高端报表视频教程 (http://www.hellobi.com/course/15)课程从2014年6月开始准备,于2014年9月在 天善B ...
- How to measure IOPS for VMware
http://blog.synology.com/blog/?p=2225 Executive SummaryThis article, intended towards IT Professiona ...
- pid 控制算法
http://blog.csdn.net/huangkangying/article/details/78129148 https://zh.wikipedia.org/wiki/PID%E6%8E% ...
- JMX-Java Management Extensions
JMX全称Java Management Extensions, 为Java应用提供管理扩展功能.在Java 5的时候引入 概念 Name Description MBean 全称为Managed B ...
- connect by prior start with 语句实现树递归查询[百度经验]
TART WITH CONNECT BY PRIOR子句实现递归查询 TART WITH CONNECT BY PRIOR这个语法主要用于查询数据包中的树型结构关系.先看下原始数据时怎么样的吧! 表中 ...
- [转]关于ios 推送功能的终极解决
刚刚做了一个使用推送功能的应用 遇到了一些问题整的很郁闷 搞了两天总算是弄明白了 特此分享给大家 本帖 主要是针对产品发布版本的一些问题 综合了网上一些资料根据自己实践写的 不过测试也可以看看 首先要 ...
- Spring Boot 2.0 整合 FreeMarker 模板引擎
本篇博文将和大家一起使用Spring Boot 2.0 和FreeMarker 模板引擎整合实战. 1. 创建新的项目 2. 填写项目配置信息 3. 勾选web 模块 4. 勾选freemarker模 ...
- python列表中元素插入位置总结
要完成的操作是把一个列表里的元素通过for循环添加到另外一个列表里,但是通过insert()方法添加到另外一个列表后却发现元素的位置与原始列表的颠倒了.如以下实例: li1 = ['] li2 = [ ...