网站首页 > 技术文章 正文
持续集成 (Continuous integration,简称 CI)
持续集成是一种开发实践,它倡导团队成员需要频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、自动化测试)来验证,从而尽快地发现集成中的错误。让正在开发的软件始终处于可工作状态,让产品可以快速迭代,同时还能保持高质量。
Jenkins 是基于 Java 开发的持续集成工具,开源免费,官网:https://jenkins.io/
App 自动化测试执行策略
自动化测试主要用于回归测试,我们可以制定执行策略:比如每天固定、开发代码更新后定时执行,这就需要与 Jenkins 进行集成。
Jenkins 集成 App 自动化测试问题点:
App 自动化需要用到真机或模拟器,而 Jenkins 一般是部署在服务器上面的,将真机或模拟器接入到服务器上显然是不可能。
解决方案:
- 申请一台专门用于做自动化测试的本地电脑,部署自动化测试环境,连接本地的真机/模拟器
- 在公司服务器(内部服务器 or 阿里云/腾讯云服务器)上部署 Jenkins
- 利用 Jenkins master-slave 模式将任务下发给对应的本地电脑,在本地电脑上执行任务
具体步骤
需要注意的是:本地执行电脑需要配置好 JDK+Maven+Android SDK+Git 的环境,并且需要通过 adb 链接上设备。
Jenkins 主从模式(master-slave)使用:
添加 Node 节点
Manage Jenkins -> Manage Nodes and Clouds -> New Node
需要注意 Launch method 一定要开启 jenkins 的远程连接端口,否则 slave 从机无法连接上 Jenkins 服务。这种连接用的是 JNLP4 协议, 这种协议是在 WebSocket + TLS 的基础上封装而成的长连接协议。可以在 jenkins 的安全设置面板中开启:进入 Jenkins 首页-> 安全面板
连接 slave 从机
两种方式都可以连接 slave 从机
任务配置中选择对应 slave 从机构建
可能碰到的问题 1:
D:\jenkins-slave\workspace\jenkins_maven_demo>mvn clean test
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
ERROR: Error cloning remote repo 'origin'
hudson.plugins.git.GitException: Could not init D:\jenkins-
slave\workspace\jenkins_maven_demo
解决方案:在 slave 节点配置工具路径:
可能碰到的问题 2:
mvn not found
Jenkins slave 节点的环境变量中没有 maven 的导致的,解决方案:将 slave 机器上面的 PATH 环境变量复制到此处:
【免费领】App专项测试资料 半小时完成自动化测试
今|日|福|利
告别点点点,提升工作效率
带你了解App测试的那些事儿~
私信“测试”免费领取
猜你喜欢
- 2025-08-06 如何阅读Linux内核源码?Linux内存管理中SLAB分配器(源码分析)
- 2025-08-06 关于读取smbios数据
- 2025-08-06 内存管理:Malloc缺页中断不同情况处理总结
- 2025-08-06 android 功耗分析方法和优化(1)
- 2025-08-06 Tenda AX12 路由器设备分析(一)
- 2025-08-06 译见:从理论到实践,基于Java的开源大数据工具
- 2025-08-06 全新 MQTT 订阅、BLOB 类型:TDengine 时序数据库 最新版本亮点速览
- 2025-08-06 NXP Steps Up China Push as EV Boom Reshapes Global Chip Landscape
- 2025-08-06 Why China is irreplaceable in supply chain
- 2025-05-24 ROS2 Jazzy:用C++实现一个动作服务器和客户端
- 最近发表
-
- count(*)、count1(1)、count(主键)、count(字段) 哪个更快?
- 深入探索 Spring Boot3 中 MyBatis 的 association 标签用法
- js异步操作 Promise fetch API 带来的网络请求变革—仙盟创梦IDE
- HTTP状态码超详细说明_http 状态码有哪些
- 聊聊跨域的原理与解决方法_跨域解决方案及原理
- 告别懵圈!产品新人的接口文档轻松入门指南
- 在Javaweb中实现发送简单邮件_java web发布
- 优化必备基础:Oracle中常见的三种表连接方式
- Oracle常用工具使用 - AWR_oracle工具有哪些
- 搭载USB 3.1接口:msi 微星 发布 990FXA Gaming 游戏主板
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)