当前位置: 首页 > news >正文

移动端App持续集成体系构建实战

这里写目录标题

  • 一、目标
    • 1、前言
    • 2、优势:
    • 3、涉及技术点
    • 4、目标
  • 二、测试app构建、打包过程
    • 1、安卓打包的环境要求
  • 三、演示安卓源码打包
  • 四、演示安卓App部署
    • 1、前提条件
    • 2、命令控制apk安装与卸载
  • 五、安卓UI自动化测试
    • 1、Appium app自动化测试-Python
    • 2、实现的验证点:
    • 3、演示
  • 六、安卓App持续集成体系建设实战
    • 1、将之前的内容所做的事情用jenkins任务实现
    • 2、实现流程图
    • 3、jenkins配置
    • 4、安卓App自动部署
    • 5、测试任务
    • 6、添加邮件通知
  • 七、App打包任务与自动部署、自动化测试任务关联

一、目标

1、前言

在持续迭代开发中,开发写代码,将新的功能加入到app中,这样需要测试新的功能。我们需要一个新的可以测试的app包,进行测试。

用自动化构建,最好是能完成一些基础功能的测试(回归测试,保证新的迭代不影响旧的功能),基础功能测试通过后,说明这个测试包可以用,接下来可以测试新的功能。

在传统的测试中,往往UI自动化测试要滞后于手工测试,UI自动化测试验证的功能往往是已有的功能。

现有的自动化体系中,UI自动化测试往往测试的是回归的功能,已有的功能。

目标:app每天build打包,build发布,build UI自动化测试,通过技术手段做一些杂活,节省时间、节省人力、物力。

2、优势:

重复性定时任务,减少人力参与,提升工作效率
Build不再是阻碍测试进度的因素
自动化重用率高,维护频率低
部署独立的打包构建+自动化运行环境,让独立运行的帮助团队“干活”

3、涉及技术点

Android App构建
Android SDK使用
安卓模拟器或真机
Appium自动化测试
Jenkins持续集成
Shell脚本开发
Java程序开发
Git (github使用 )

4、目标

App持续集成体系:全自动化打包、发布、部署、测试的实现思路
安卓App的构建、打包方法
安卓App部署与自动化测试实践
利用Jenkins平台进行持续集成演练

二、测试app构建、打包过程

a、android应用
b、源码:https://gitee.com/zhilongya/androidSamplePython
c、安卓打包的目标文件:app-debug.apk文件
d、安卓打包命令:gradlew clean assembleDebug
e、安卓安装包的输出路径:/root/app/AndroidSampleApp/app/build/outputs/apk/debug

1、安卓打包的环境要求

DK
Android SDK
Gradle

三、演示安卓源码打包

[root@mylinux1 app]# git clone git@gitee.com:zhilongya/AndroidSampleApp.git
正克隆到 'AndroidSampleApp'...
remote: Enumerating objects: 67, done.
remote: Counting objects: 100% (67/67), done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 67 (delta 2), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (67/67), 591.43 KiB | 751.00 KiB/s, done.
处理 delta 中: 100% (2/2), done.[root@mylinux1 app]# ls
AndroidSampleApp[root@mylinux1 app]# cd AndroidSampleApp/
[root@mylinux1 AndroidSampleApp]# ls
app           gradle             gradlew      license.txt   README.md    settings.gradle
build.gradle  gradle.properties  gradlew.bat  README.en.md  ScreenShots
[root@mylinux1 AndroidSampleApp]# sh gradlew clean assembleDebug
Starting a Gradle Daemon (subsequent builds will be faster)BUILD SUCCESSFUL in 46s
27 actionable tasks: 25 executed, 2 up-to-date[root@mylinux1 AndroidSampleApp]# cd app/build/outputs/apk/
[root@mylinux1 apk]# cd debug/
[root@mylinux1 debug]# ls
app-debug.apk  output.json
[root@mylinux1 debug]# pwd
/root/app/AndroidSampleApp/app/build/outputs/apk/debug

四、演示安卓App部署

1、前提条件

  • 安卓实体机或者安卓模拟器
  • 安卓SDK

目标:通过命令安装/卸载app

2、命令控制apk安装与卸载

  • 安装:adb install <file_path>
  • 卸载:adb uninstall <package_name>
D:\androidSamplePython>adb install D:\jenkins_CICD\workspace\BuildAndroidSample_Pipeline_paral\AndroidSampleApp\app\build\outputs\apk\debug\app-debug.apk
Performing Push Install
D:\jenkins_CICD\workspace\BuildAndroidSample_Pipeline_para...le pushed, 0 skipped. 609.5 MB/s (1736320 bytes in 0.003s)pkg: /data/local/tmp/app-debug.apk
Success

五、安卓UI自动化测试

1、Appium app自动化测试-Python

源码位置:https://gitee.com/zhilongya/iAppBVT_Python.git
开发工具:pycharm
UI自动化框架:appium
测试执行框架:pytest
appium运行配置DesireCap的获取:pytest-testconfig配置文件读取

2、实现的验证点:

app可安装
app可启动
app首页预期元素存在

3、演示

from appium import webdriver
import unittest
import time
from pytest_testconfig import configclass TestAppSample:def setup(self):desired_caps = {}desired_caps['platformName'] = 'Android'desired_caps['deviceName'] = '127.0.0.1:7555'desired_caps['udid'] = '127.0.0.1:7555'desired_caps['appActivity'] = '.launch.LaunchSplashActivity'desired_caps['appPackage'] = 'com.tencent.wework'self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)def tearDown(self):self.driver.quit()def test_demo(self):time.sleep(3)self.driver.find_element(AppiumBy.ID,"com.tencent.wework:id/cjz").click()tip=self.driver.find_element(AppiumBy.ID,"com.tencent.wework:id/adn").textassert "微信登录"==tip

六、安卓App持续集成体系建设实战

1、将之前的内容所做的事情用jenkins任务实现

  • jenkins平台源码构建、打包、发布app测试包
  • jenkins自动部署、测试新app测试包
  • jenkins通知运行结果

2、实现流程图

在这里插入图片描述

3、jenkins配置

a、新建项目:0902_build_android_app

b、限制项目的运行节点:app_CICD_node
在这里插入图片描述

c、源码管理

在这里插入图片描述

d、检出到子目录
目的:将源码checkout到AndroidSampleApp目录下
在这里插入图片描述

在这里插入图片描述

e、添加构建步骤

在这里插入图片描述

cd AndroidSampleApp
gradlew clean assembleDebug

f、添加构建后操作,选择归档成品

目的:将app测试包输出到控制台,方便其他人下载测试

在这里插入图片描述

g、构建产生的文件
在这里插入图片描述

4、安卓App自动部署

a、新建项目:0902_bvt_android_app

b、限制项目的运行节点:app_CICD_node
在这里插入图片描述

c、源码管理
在这里插入图片描述
d、检出到子目录
目的:将源码checkout到iAppBVT_Python目录下
在这里插入图片描述
e、构建步骤

adb uninstall com.appsflyer.androidsampleapp
adb install D:\jenkins_CICD\workspace\0902_build_android_app\AndroidSampleApp\app\build\outputs\apk\debug\app-debug.apk

在这里插入图片描述

构建步骤优化

{adb uninstall com.appsflyer.androidsampleapp}||{adb install D:\jenkins_CICD\workspace\0902_build_android_app\AndroidSampleApp\app\build\outputs\apk\debug\app-debug.apk}
adb install D:\jenkins_CICD\workspace\0902_build_android_app\AndroidSampleApp\app\build\outputs\apk\debug\app-debug.apk

5、测试任务

{adb uninstall com.appsflyer.androidsampleapp}||{adb install D:\jenkins_CICD\workspace\0902_build_android_app\AndroidSampleApp\app\build\outputs\apk\debug\app-debug.apk}
adb install D:\jenkins_CICD\workspace\0902_build_android_app\AndroidSampleApp\app\build\outputs\apk\debug\app-debug.apkcd iAppBVT_Python
pip install -r requirements.txt
pytest -sv test/test_bvt.py

在这里插入图片描述

6、添加邮件通知

在这里插入图片描述

邮件通知结果
在这里插入图片描述

七、App打包任务与自动部署、自动化测试任务关联

实现完成打包任务之后,运行自动化测试任务,安装新包,并运行UI自动化测试验证新安装包的正确性

父子任务
在这里插入图片描述
构建后操作:选择子任务
在这里插入图片描述
当运行完父任务后,自动触发子任务的执行

在这里插入图片描述

相关文章:

移动端App持续集成体系构建实战

这里写目录标题 一、目标1、前言2、优势&#xff1a;3、涉及技术点4、目标 二、测试app构建、打包过程1、安卓打包的环境要求 三、演示安卓源码打包四、演示安卓App部署1、前提条件2、命令控制apk安装与卸载 五、安卓UI自动化测试1、Appium app自动化测试-Python2、实现的验证点…...

Mybatis的关联关系配置一对一,一对多,多对多的映射关系

目录 关联关系映射 一对一关联&#xff1a; 一对多关联&#xff1a; 多对多关联&#xff1a; 导入数据库表 一对多 一对一 多对多 关联关系映射 关联关系映射在Mybatis中主要通过三种方式实现&#xff1a;一对一关联和一对多关联及多对多关联。 一对一关联&#xff1a;…...

计算机竞赛 基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类

文章目录 1 前言2 情感文本分类2.1 参考论文2.2 输入层2.3 第一层卷积层&#xff1a;2.4 池化层&#xff1a;2.5 全连接softmax层&#xff1a;2.6 训练方案 3 实现3.1 sentence部分3.2 filters部分3.3 featuremaps部分3.4 1max部分3.5 concat1max部分3.6 关键代码 4 实现效果4.…...

时序预测 | MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测

时序预测 | MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现CNN-BiGRU卷积双向门控循环单元时间序列预测&#xff1b; 2.运行环境…...

[Rust GUI]0.10.0版本iced代码示例 - progress_bar

-1 字体支持 iced0.10.0 仅支持指定系统内置字体(iced默认字体中文会乱码) iced0.10.0 手动加载字体的功能已经砍了&#xff0c;想手动加载就用0.9.0版本&#xff0c;文档0.9.0版本 想显示中文则需要运行在一个自带字体的Windows系统上。而且这个字体最好不要钱。 (Windows闲着…...

使用vue-pdf出现的卡顿,空白,报错,浏览器崩溃解决办法

如果想直接知道解决办法&#xff0c;请翻到最下面 今天&#xff0c;接到了一个新的需求&#xff0c;我们公司的PDF展示卡住了&#xff0c;导致浏览器直接奔溃。我也刚来公司不久&#xff0c;就去看看是怎么发生的&#xff0c;公司前同事用的vue-pdf&#xff0c;刚开始以为是文…...

(笔记七)利用opencv进行形态学操作

&#xff08;1&#xff09;程序清单 形态学操作是一种图像处理技术&#xff0c;它基于数学形态学理论&#xff0c;用于改变图像的形状和结构。它主要通过结构元素的腐蚀和膨胀操作来实现。 #!/usr/bin/env python # -*- coding:utf-8 -*- """ author: LIFEI t…...

Spring是什么?

什么是Spring 我知道你现在可能迫不及待地想要开始编写Spring应用了。我向你保证&#xff0c;在本章结束之前&#xff0c;你肯定能够开发一个简单的Spring应用。但首先&#xff0c;我将使用Spring的一些基础概念为你搭建一个舞台&#xff0c;帮助你理解Spring是如何运转起来的…...

电梯SIP-IP五方对讲管理系统

电梯SIP-IP五方对讲管理系统 是深圳锐科达精心打磨的一款IP数字信号对讲设备&#xff0c;是在传统电梯对讲系统基础上的一次全新升级&#xff0c;突破了模拟、FM调频系统存在的技术障碍&#xff0c;实现联网;在模/数交替的过程中&#xff0c;继承了模拟、FM调频系统的优点&…...

leetcode283移动零

题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入:…...

Docker 部署SpringBoot项目,使用外部配置文件启动项目

一、Springboot项目引入配置文件的方式&#xff1a; 第一种是在jar包的同一目录下建一个config文件夹&#xff0c;然后把配置文件放到这个文件夹下&#xff1b; 第二种是直接把配置文件放到jar包的同级目录&#xff1b; 第三种在classpath下建一个config文件夹&#xff0c;然后…...

电子半导体行业电能质量监测与治理系统解决方案 安科瑞 许敏

摘要&#xff1a;在国家鼓励半导体材料国产化的政策导向下&#xff0c;本土半导体材料厂商不断提升半导体产品技术水平和研发能力&#xff0c;逐渐打破了国外半导体厂商的垄断格局&#xff0c;推进中国半导体材料国产化进程&#xff0c;促进中国半导体行业的发展。半导体产品的…...

pdfh5在线预览pdf文件

前言 pc浏览器和ios的浏览器都可以直接在线显示pdf文件&#xff0c;但是android浏览器不能在线预览pdf文件&#xff0c;如何预览pdf文件&#xff1f; Github: https://github.com/gjTool/pdfh5 Gitee: https://gitee.com/gjTool/pdfh5 使用pdfh5预览pdf 编写预览页面 <…...

Java智慧工地大数据中心源码

智慧工地技术架构&#xff1a;微服务JavaSpring Cloud VueUniApp MySql 智慧工地形成安全、质量、进度、人员、机械、绿色施工六大针对性解决方案。 安全管理 围绕重大危险源提供管控&#xff0c;可视化跟踪消防、安防、基坑、高支模、临边防护、卸料平台等设施设备的安全状态…...

关于人工智能的担忧

人工智能的快速发展引发了一系列关于其潜在风险和担忧的讨论。以下是一些常见的人们对人工智能的担忧&#xff1a; 失业问题&#xff1a;人工智能的出现可能会导致很多工作岗位的消失&#xff0c;特别是那些需要重复性劳动的工作。人们担心机器取代人类工作将导致大规模失业和社…...

JVM之强软弱虚引用

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;有几种不同类型的引用&#xff0c;它们分别是&#xff1a;强引用&#xff08;Strong Reference&#xff09;、软引用&#xff08;Soft Reference&#xff09;、弱引用&#xff08;Weak Reference&#xff09;、虚引用&am…...

Python编程练习与解答 练习98:一个数是素数吗

质数是大于1的整数&#xff0c;它只能被1和它本身整除。编写一个函数&#xff0c;来确定他的参数是不是质数&#xff0c;如果是&#xff0c;则返回True&#xff0c;否则返回False。编写一个main程序&#xff0c;从用户那里读取一个整数并显示一条消息&#xff0c;指示它是不是质…...

vue3+ts+uniapp实现小程序端input获取焦点计算上推页面距离

vue3tsuniapp实现小程序端input获取焦点计算上推页面距离 input获取焦点计算上推页面距离 1.先说我这边的需求2.发现问题3.解决思路4.代码展示 自我记录 1.先说我这边的需求 需求 1.给键盘同级添加一个按钮例如’下一步’ or ‘确认’ 这种按钮 2.初步想法就是获取input焦点时…...

【2023集创赛】加速科技杯二等奖作品:基于ATE的电源芯片测试设计与性能分析

本文为2023年第七届全国大学生集成电路创新创业大赛&#xff08;“集创赛”&#xff09;加速科技杯二等奖作品分享&#xff0c;参加极术社区的【有奖征集】分享你的2023集创赛作品&#xff0c;秀出作品风采&#xff0c;分享2023集创赛作品扩大影响力&#xff0c;更有丰富电子礼…...

Java入坑之Robot类

一、概述 1.1Robot类概述 在Java中&#xff0c;Robot是一个属于java.awt包的类。它还扩展了 Object 类。该类用于为测试自动化、自运行演示以及需要控制鼠标和键盘的其他应用程序生成本机系统输入事件。换句话说&#xff0c;我们使用 Java Robot 类来触发输入事件&#xff0c;…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...