移动端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 [email protected]: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
  • 卸载:adb uninstall
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 config

class 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").text
    assert "微信登录"==tip

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

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

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

2、实现流程图

移动端App持续集成体系构建实战_第1张图片

3、jenkins配置

a、新建项目:0902_build_android_app

b、限制项目的运行节点:app_CICD_node
移动端App持续集成体系构建实战_第2张图片

c、源码管理

移动端App持续集成体系构建实战_第3张图片

d、检出到子目录
目的:将源码checkout到AndroidSampleApp目录下
移动端App持续集成体系构建实战_第4张图片

移动端App持续集成体系构建实战_第5张图片

e、添加构建步骤

移动端App持续集成体系构建实战_第6张图片

cd AndroidSampleApp
gradlew clean assembleDebug

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

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

移动端App持续集成体系构建实战_第7张图片

g、构建产生的文件
移动端App持续集成体系构建实战_第8张图片

4、安卓App自动部署

a、新建项目:0902_bvt_android_app

b、限制项目的运行节点:app_CICD_node
移动端App持续集成体系构建实战_第9张图片

c、源码管理
移动端App持续集成体系构建实战_第10张图片
d、检出到子目录
目的:将源码checkout到iAppBVT_Python目录下
移动端App持续集成体系构建实战_第11张图片
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

移动端App持续集成体系构建实战_第12张图片

构建步骤优化

{
   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.apk

cd iAppBVT_Python
pip install -r requirements.txt
pytest -sv test/test_bvt.py

移动端App持续集成体系构建实战_第13张图片

6、添加邮件通知

移动端App持续集成体系构建实战_第14张图片

邮件通知结果
移动端App持续集成体系构建实战_第15张图片

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

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

父子任务
在这里插入图片描述
构建后操作:选择子任务
移动端App持续集成体系构建实战_第16张图片
当运行完父任务后,自动触发子任务的执行

移动端App持续集成体系构建实战_第17张图片

你可能感兴趣的:(持续集成,ci/cd,android,django,python)