热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pipeline建立自动化测试job

背景最近读了一本书,讲CICD,从《敏捷测试》到pipeline实战演练不得不得承认Jenkinsbuleocean,界面风格十分nice,探索了pipeline中的测试步骤 前期

背景

最近读了一本书,讲CICD,从《敏捷测试》到pipeline实战演练

不得不得承认Jenkins bule ocean,界面风格十分nice,探索了pipeline中的测试步骤

 

前期-----

实话书里直接就是pipeline的测试步骤就是,main-->xxxxx testcase,所有框架都是这样的收集测试用例并运行。

而实际项目中,jenkins的linux节点服务器,被各个项目或者其他同事所共用,就像1间房子其他人也在住,怎么样隔离环境,其实就是容器化技术docker

所以Jenkins blue + pipline + docker....开始了,如下;

1、构建镜像   (包括了依赖环境、代码等)

2、实例出容器

3、容器运行命令行

4、生成报告

---------------------------------------

之前提及的docker做UI自动化是一致的,但是新建了依赖包、库之类的,构建镜像的依赖环境应该如何处理?只能重新升级、添加依赖。

将旧的的依赖镜像删除,重新通过pip install -r requirements生成新的镜像,进而有了如下的自动化的一步【推送镜像】,检查到requiremets就会做如下步骤

 

jenkinsfile 如下

pipeline {
agent {
label "master"
}
options {
buildDiscarder(logRotator(numToKeepStr: '15'))
disableConcurrentBuilds()
timestamps()
timeout(12)
}
parameters {
choice(name: 'test_env', choices: ['test','gray'],description: 'test 测试环境\ngray 灰度环境')
choice(name: 'marker', choices: ['all','smoke'],description: '选择用例')
booleanParam(name: 'build', defaultValue: false, description: '构建容器')
}
stages {
stage("推送镜像") {
when {
changeset "requirements.txt"
}
steps {
sh 'cat pwd.txt | docker login
sh 'docker build -t python:latest --rm --no-cache -f lib/Dockerfile .'
sh 'docker tag '
sh 'docker push'
sh 'docker rmi '
}
}
stage("构建自动化测试镜像"){
when{
anyOf {
changeset "testcase/**/*.py"
changeset "conf/config.ini"
equals expected: "${params.build}",
actual: 'True'
}
}
steps {
echo '开始构建'
sh '/usr/local/bin/docker-compose down'
sh '/usr/local/bin/docker-compose build --no-cache'
}
}
stage("容器执行用例") {
steps {
sh '/usr/local/bin/docker-compose up'
}
post('测试报告') {
always{
script{
allure includeProperties: false, jdk: '', report: 'report/allure_report', results: [[path: 'report/allure_result']]
}
}
}
}
stage("生成测试报告") {
steps{
sh 'echo 生成报告中'
}
post('测试报告') {
always{
}
}
}
}
}

 

————

我愿翻山越岭,我愿乘风破浪。只为你,扬帆,远航...



推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
author-avatar
胡同里带小猪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有