当前位置: 首页 > 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;…...

seo关键词文章的结构应该怎么安排

SEO关键词文章的结构应该怎么安排 在当前竞争激烈的互联网环境中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已经成为每个网站运营者必须掌握的技能之一。其中&#xff0c;关键词的选择和布局是SEO文章结构的核心部分。SEO关键词文章的结构应该怎么安排呢&#xff1…...

HTML怎么标注输入格式示例_HTML placeholder展示格式模板【技巧】

不能。placeholder属性值仅支持纯文本&#xff0c;HTML标签如<small>会被原样显示&#xff0c;不解析&#xff1b;它不支持样式、子元素或换行&#xff0c;且无法替代label实现无障碍访问&#xff0c;需用浮动label等结构替代。placeholder 里能写 HTML 吗不能。placehol…...

深入STM32F407的UART Bootloader:除了烧程序,你还能用它做什么?

深入STM32F407的UART Bootloader&#xff1a;解锁系统级设计的五大高阶应用 当大多数开发者还在将UART Bootloader视为简单的固件烧录工具时&#xff0c;那些真正理解嵌入式系统设计精髓的工程师已经将其转化为产品全生命周期管理的核心组件。STM32F407芯片内置的Bootloader远…...

救命!这些毕设太好抄了,3000+毕设案例推荐第1027期

271、基于Java的建材租赁智慧管理系统的设计与实现(论文&#xff0b;代码&#xff0b;PPT)建材租赁智慧管理系统主要功能包括&#xff1a;会员操作、客户资料、建材管理、计量单位、建材损坏收费标准、租赁合同、租费标准、租出登记、归还登记、丢赔管理、入库登记、租金计算、…...

Workbench网格划分实战指南:从基础到进阶技巧

1. Workbench网格划分入门&#xff1a;为什么选择它&#xff1f; 如果你是第一次接触Workbench的网格划分功能&#xff0c;可能会好奇为什么这么多工程师选择它。简单来说&#xff0c;Workbench提供了一个可视化操作界面&#xff0c;让复杂的网格划分变得像搭积木一样直观。我刚…...

AgentCPM-Report开源模型教程:Pixel Epic在科研团队中的协作部署实践

AgentCPM-Report开源模型教程&#xff1a;Pixel Epic在科研团队中的协作部署实践 1. 项目介绍与核心价值 Pixel Epic是一款基于AgentCPM-Report大模型构建的创新型研究报告辅助工具。它将枯燥的科研工作流程转化为充满游戏化体验的交互过程&#xff0c;让团队成员在轻松愉悦的…...

每日一问-20260405--戴尔显示器型号命名速查表

戴尔显示器型号命名速查表&#xff08;超清晰版&#xff09;看完这张表&#xff0c;以后任何戴尔显示器&#xff0c;看一眼型号就知道定位、尺寸、年份、功能。一、整体结构格式&#xff1a;系列 尺寸 年份 后缀例&#xff1a;SE 24 16 H 入门家用系列 24 英寸 2016 年款 …...

OpenLens节点和Pod菜单扩展完整指南:恢复Kubernetes管理的关键功能

OpenLens节点和Pod菜单扩展完整指南&#xff1a;恢复Kubernetes管理的关键功能 【免费下载链接】openlens-node-pod-menu Node and pod menus for OpenLens 项目地址: https://gitcode.com/gh_mirrors/op/openlens-node-pod-menu 引言&#xff1a;解决OpenLens 6.3.0的功…...

Electron Webpack Dashboard 高级用法:WebSocket 实时通信与数据流处理

Electron Webpack Dashboard 高级用法&#xff1a;WebSocket 实时通信与数据流处理 【免费下载链接】electron-webpack-dashboard Electron Desktop GUI for Webpack Dashboard 项目地址: https://gitcode.com/gh_mirrors/el/electron-webpack-dashboard Electron Webpa…...

ai辅助qt性能优化:让快马平台帮你设计多线程数据可视化方案

最近在开发一个Qt实时数据可视化应用时&#xff0c;遇到了主界面卡顿的问题。经过分析发现&#xff0c;数据采集和处理操作直接在主线程执行&#xff0c;导致UI响应延迟。通过InsCode(快马)平台的AI辅助功能&#xff0c;我快速获得了一个多线程优化方案&#xff0c;效果显著。这…...