Android APP稳定性测试工具Fastbot

2023-05-16

我在 自动遍历测试之Monkey工具 和 AppCrawler自动遍历测试 分别介绍了APP稳定性测试工具monkey和AppCrawler,它们各有优缺点,本文介绍另一款也比较好用的稳定性测试工具Fastbot。

目录

  • 简介
  • 前期准备
    • 环境
  • Fastbot遍历测试示例
    • 添加限定词
    • 获取包名
    • 开启遍历测试
  • 专家系统
    • 自定义输入法
      • 1. 下载安装ADBKeyBoard
      • 2. 配置随机输入字符串
      • 3. 配置fuzzing输入
    • 自定义事件序列
    • Activity屏蔽
      • 1、Activity白名单配置
      • 2、Activity黑名单配置
    • 屏蔽控件或区域
    • 高速截图
    • 权限自动授予

简介

Fastbot是由字节跳动 Quality Lab开源的一款基于model-based testing 结合机器学习、强化学习的APP 稳定性测试工具,提供了Android和iOS版本。具体原理介绍可参考这篇文章:https://mp.weixin.qq.com/s/QhzqBFZygkIS6C69__smyQ。

本文记录一下Fastbot的使用方法。

前期准备

环境

本文使用环境:

  • Windows10
  • Android 10真机
  • adb 1.0.40

adb安装可参考Android ADB原理及常用命令。

使用数据线将手机连接到电脑,到手机设置中的开发人员选择中开启USB调试,电脑命令行输入adb devices 查看手机是否连接成功:

$ adb devices
List of devices attached
CUYDU19626004019        device

克隆Fastbot_Android项目到本地:

git clone https://github.com/bytedance/Fastbot_Android.git

然后进入项目目录,将 framework.jar fastbot-thirdpart.jar monkeyq.jar push 到手机/sdcard目录,push libs/* /data/local/tmp/目录:

$ adb push fastbot-thirdpart.jar /sdcard
fastbot-thirdpart.jar: 1 file pushed. 4.1 MB/s (85664 bytes in 0.020s)

$ adb push framework.jar /sdcard
framework.jar: 1 file pushed. 32.3 MB/s (1149240 bytes in 0.034s)

$ adb push monkeyq.jar /sdcard
monkeyq.jar: 1 file pushed. 12.3 MB/s (77375 bytes in 0.006s)

$ adb push libs/. /data/local/tmp/
libs/.\: 4 files pushed. 24.9 MB/s (7740944 bytes in 0.296s)

Fastbot遍历测试示例

下面介绍如何使用Fastbot进行简单的遍历测试。

添加限定词

添加限定词,可提升模型, 使用AAPT2(Android 资源打包工具)解析apk中的索引字符串资源,aapt2是Google Android开发工具包Android SDK中提供的工具,所以要先安装一下Android SDK,下载地址为:http://tools.android-studio.org/index.php/sdk。

安装完成后将aapt2添加到 PATH 环境变量中,我的电脑路径为 D:\android-sdk-windows\build-tools\29.0.3\

下面提取要测试APP的apk文件中字符串,以东方财富APP为例,字符提取命令如下:

aapt2 dump strings dfcf_0005564.apk > max.valid.strings

max.valid.stringspush到手机sdcard目录下:

adb push max.valid.strings /sdcard 

获取包名

接下来读取要测试的APP包名,可以使用aapt2工具:

$ aapt2 dump badging dfcf_0005564.apk
package: name='com.eastmoney.android.berlin' versionCode='10003000' versionName='10.3' platformBuildVersionName='' platformBuildVersionCode='' compileSdkVersion='29' compileSdkVersionCodename='10'
sdkVersion:'16'
targetSdkVersion:'28'
.................

或者手机打开东方财富,然后执行如下命令:

$ adb shell dumpsys activity activities | findstr mResumedActivity
mResumedActivity: ActivityRecord{a9dd009 u0 com.eastmoney.android.berlin/com.eastmoney.android.module.launcher.internal.search.NewSearchActivity t64017}

可获取到包名为com.eastmoney.android.berlin

开启遍历测试

Fastbot遍历测试命令如下:

adb -s 设备号 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p 包名 --agent reuseq --running-minutes 遍历时长 --throttle 事件频率 -v -v
  1. -s 设备号 :多个设备需要指定设备号,单独设备无需此-s参数
  2. -p 包名 :遍历app的包名,-p+包名
  3. --agent reuseq :遍历模式,无需更改
  4. --running-minutes 遍历时长(分钟) :# 遍历时间:–running-minutes 时间
  5. --throttle 事件频率 :遍历事件频率,建议为500-800
  6. 可选参数
    • --bugreport :崩溃时保存bug report log
    • --output-directory /sdcard/xxx :log/crash 另存目录

示例:

$ adb -s CUYDU19626004019 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.eastmoney.android.berlin --agent reuseq --running-minutes 1 --throttle 500 -v -v --output-directory /sdcard/fastbot_results&adb pull /sdcard/fastbot_results D:\ProgramWorkspace\DevTest-Notes\APP\Android\Fastbot_Android\results

................
[Fastbot][2022-09-01 22:18:48.386] :Sending Touch (ACTION_DOWN): 0:(592.0,412.0)
[Fastbot][2022-09-01 22:18:48.391] Wait Event for 633 milliseconds
[Fastbot][2022-09-01 22:18:49.025] Events injected: 815
[Fastbot][2022-09-01 22:18:49.027] // Monkey is over!
[Fastbot][2022-09-01 22:18:49.028] :Sending rotation degree=0, persist=false
[Fastbot][2022-09-01 22:18:49.128] Total app activities:
[Fastbot][2022-09-01 22:18:49.129]    1 com.eastmoney.android.ad.fund.test.FundAdTestMainActivity
[Fastbot][2022-09-01 22:18:49.130]    2 com.eastmoney.android.cfh.activity.ColumnActivity
[Fastbot][2022-09-01 22:18:49.130]    3 com.tencent.connect.common.AssistActivity
................
[Fastbot][2022-09-01 22:18:49.248] Explored app activities:
[Fastbot][2022-09-01 22:18:49.248]    1 com.eastmoney.android.account.activity.CMAssistanceActivity
[Fastbot][2022-09-01 22:18:49.249]    2 com.eastmoney.android.account.activity.PassportLoginActivity
.................
[Fastbot][2022-09-01 22:18:49.253] Activity of Coverage: 3.3240995%
:Dropped: keys=0 pointers=11 trackballs=0 flips=0 rotations=0

打印日志会记录每次操作细节,totalActivity(APP所有activity),ExploredActivity(遍历到的activity列表)以及本次遍历的总覆盖率。

其中Java Crash、ANR、Nativie Crash会以追加方式写入到/sdcard/crash-dump.log文件中,捕获的Anr 同时也会写入 /sdcard/oom-traces.log 文件。

专家系统

不同业务线支持不同的个性化需求,业务深度定制化

自定义输入法

ADBKeyBoard在输入栏自动输入内容,屏蔽UI输入法

适用需求: 遇到搜索栏乱输入,想要输入指定字符

1. 下载安装ADBKeyBoard

下载ADBKeyBoard.apk,adb安装:

$ adb install ADBKeyBoard.apk
Success

安装完成后设置ADBKeyBoard为默认输入法,设置生效后,点击输入栏时ADBKeyBoard不会弹起ui输入栏。

2. 配置随机输入字符串

配置输入框可输入的字符串,遍历测试时会随机选择字符输入。

设置配置文件max.config:

max.randomPickFromStringList = false # 关闭随机输入字符串
max.randomPickFromStringList = true # 从文件中随机读取字符串

如果设置 max.randomPickFromStringList = true ,需要编辑 max.strings 文件,输入想要输入的字符串:

1   搜索
2   打开
3   检查

将文件max.config push到手机:

adb push max.strings /sdcard

3. 配置fuzzing输入

编辑项目中 test 目录下的 max.fuzzing.strings文件,输入想要输入的字符串

将文件push到手机:

adb push test/max.fuzzing.strings /sdcard

fuzz概率如下:

1. 50% 概率输入fuzzing.strings中某个string
2. 35% 概率输入被测试 App 历史页面中text/desc文本内容(不存在max.fuzzing.strings文件时概率提高到85%)
3. 15% 概率不输入

自定义事件序列

可以人工配置操作路径,用来覆盖 Fastbot 自动遍历不到的场景。也可以自定义操作序列,设置操作的先后顺序。

1、新建 max.xpath.actions 文件(文件名称不可更改)

2、编写事件序列配置(case):

  • prob:发生概率,“prob”:1,代表发生概率为100%
  • activity:所属场景,详见:三.获取当前页面所属的Activity
  • times:重复次数,默认为1即可
  • actions:具体步骤的执行类型
  • throttle:action间隔事件(ms)

action 支持以下类型:必须大写

  • CLICK:点击,想要输入内容在action下补充text,如果有text 则执行文本输入
  • LONG_CLICK:长按
  • BACK:返回
  • SCROLL_TOP_DOWN:从上向下滚动
  • SCROLL_BOTTOM_UP:从下向上滑动
  • SCROLL_LEFT_RIGHT:从左向右滑动
  • SCROLL_RIGHT_LEFT:从右向左滑动

下面以东方财富为例:

[
{
    "prob": 1,
    "activity":"com.eastmoney.android.module.launcher.internal.home.HomeActivity",
    "times": 1,
    "actions": [
        {
            "xpath":"//*[@resource-id="com.eastmoney.android.berlin:id/et_search"]",
            "action": "CLICK",
            "text": "600519",
            "throttle": 2000
        }
    ]
},
{
    "prob": 1,
    "activity":"com.eastmoney.android.module.launcher.internal.search.NewSearchActivity",
    "times": 1,
    "actions": [
        {
            "xpath":"//*[@resource-id="com.eastmoney.android.berlin:id/rv_search_stock_list"]//*[@text="600519"]",
            "action": "CLICK",
            "throttle": 2000
        }
    ]
}
]

编写好文件后,push到手机:

$ adb push max.xpath.actions /sdcard   

Activity屏蔽

手动配置黑、白名单配置,可用来单独覆盖几个场景或屏蔽一些不必要场景。

1、Activity白名单配置

只覆盖白名单内的activity

1、在PC端新建 awl.strings文件,写入Activity的名称,例如

com.eastmoney.android.module.launcher.internal.home.HomeActivity

2、将 awl.strings 文件push到手机端的sdcard目录下, 目录必须为sdcard

adb push awl.strings  /sdcard 

3、运行命令时添加以下参数:--act-whitelist-file /sdcard/awl.strings

adb -s CUYDU19626004019 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.eastmoney.android.berlin --agent reuseq --act-whitelist-file /sdcard/awl.strings --running-minutes 1 --throttle 500 -v -v

只会遍历白名单内的设置的activity。

2、Activity黑名单配置

黑名单内的activity不覆盖

1、新建 abl.strings 文件,在文件中输入Activity的名称,同白名单方法一致

com.eastmoney.android.module.launcher.internal.home.HomeActivity
com.eastmoney.android.msg.center.MsgCenterActivity
com.eastmoney.android.module.launcher.internal.search.NewSearchActivity
com.eastmoney.android.activity.StockActivity

由于白名单和黑名单不能同时设置,设置了白名单则白名单外的都为黑名单。先把白名单awl.strings文件删掉。

2、然后将abl.strings文件push到手机端的sdcard目录下:

adb push abl.strings  /sdcard 

3、运行命令时添加以下参数:

--act-blacklist-file /sdcard/abl.strings
adb -s CUYDU19626004019 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.eastmoney.android.berlin --agent reuseq --act-blacklist-file /sdcard/abl.strings --running-minutes 1 --throttle 500 -v -v

屏蔽控件或区域

配置需要屏蔽的控件或区域,比如屏蔽退出登录按钮。

1、新建 max.widget.black 文件,可配置activity、xpath和bounds,比如:

[
	{
		"activity":"com.eastmoney.android.module.launcher.internal.home.HomeActivity",
		"xpath": "//*[@resource-id='com.eastmoney.android.berlin:id/et_search']"
	},
	{
		"activity":"com.eastmoney.android.module.launcher.internal.home.HomeActivity",
		"bounds":"0,0.87,1,0.95"
	}
]

屏蔽控件或区域共有三种方式:

  • bounds:屏蔽某个区域,在该区域内的控件或坐标不会被点击,bounds 为 0.0~1.0 之间的一个百分比值。
  • xpath:查找匹配的控件,屏蔽点击该控件。
  • xpath+bounds:查找匹配的控件,当控件存在时屏蔽指定的区域。

2、将max.widget.black文件push到手机sdcard目录下

adb push max.widget.black /sdcard 

执行:

adb -s CUYDU19626004019 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.eastmoney.android.berlin --agent reuseq --running-minutes 1 --throttle 500 -v -v

高速截图

保存测试过程中的截图。

1、新建 max.config文件,增加以下属性

  • max.takeScreenshot = true

  • max.takeScreenshotForEveryStep = true

  • max.saveGUITreeToXmlEveryStep =true

2、将max.config 文件push到手机sdcard目录中:

adb push max.config /sdcard 

添加--output-directory参数指定输出路径, --throttle 参数要 >200 才会截图:

adb -s 设备号 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p 包名 --agent reuseq --running-minutes 遍历时长 --throttle 事件频率 -v -v --output-directory 指定路径

示例代码:

adb -s CUYDU19626004019 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.eastmoney.android.berlin --agent reuseq --running-minutes 1 --throttle 500 -v -v --output-directory /sdcard/fastbot_results&adb pull /sdcard/fastbot_results D:\ProgramWorkspace\DevTest-Notes\APP\Android\Fastbot_Android\results

image

权限自动授予

app 的权限弹窗处理, 默认启动app前会自动授予app所需的所有权限,但如果想测试app运行过程中的动态权限弹窗 在 max.config 配置

  • max.grantAllPermission = true Fastbot启动后会自动授予各种权限;

  • shell中增加

     -p com.android.packageinstaller 
     -p com.android.permissioncontroller
     -p com.lbe.security.miui  # for (miui android 10)
     -p com.samsung.android.permissioncontroller #  for (samsung android 10)
    

增加弹窗相关package,可在权限弹窗时关闭弹窗。

Fastbot android APP自动遍历测试就介绍到这里,更多功能可参考官方文档:https://github.com/bytedance/Fastbot_Android/blob/main/handbook-cn.md。

--THE END--

我的回答之所以发挥作用,原因不是别的,是因为他们自己很努力,如自己不想积极认真的生活,不管得到什么样的回答都没用。——东野圭吾《解忧杂货店》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android APP稳定性测试工具Fastbot 的相关文章

  • Debian9.4.0win10上双系统U盘安装教程

    一 镜像下载 Debian一直是本人最喜欢的桌面操作系统 xff0c 所以也分享下windows10下双系统安装的过程 xff0c 至于虚拟机安装则就更简单了 xff0c 在此不做赘述 相比虚拟机本人更喜欢完全抛弃win而在linux un
  • win10系统如何开启/安装ubuntu子系统

    注 xff1a 此教程仅对windows 10家庭中文版做过测试 第一步 开启linux子系统选项 控制面板 gt 程序 gt 程序和功能 gt 启用或关闭Windows功能 gt 适用于Linux的Windows子系统 gt 确定 xff
  • maven日常问题

    问题1 jdk配置打包报错问题 maven打包报错如下 dependencyManagement dependencies dependency systemPath span class token keyword for span jd
  • 穿山甲广告对接

    一 清除其他sdk影响 二 接入穿山甲SDK 1 注册登录 广告对接的第三方的穿山甲 需要先在穿山甲注册好自己的账号链接 https www pangle cn 创建项目应用和代码位 xff0c 获取ID 2 导入sdk包 下载SDK ht
  • jdbc连接mysql8.x踩坑

    问题描述 使用jdbc连接数据库报错密码错误 xff0c 提示检查编码 Caused by java sql SQLException Access denied for user 39 root 39 64 39 localhost 39
  • 面向对象一"类与对象"的概念与特性

    面向对象程序设计 Object oriented programming OOP 一 类与对象 类 class 对一类具有相同 属性的对象的 抽象 类的定义包含了数据的形式以及 对数据的操作 对象 object 类的实例 每个对象都是其类中
  • 使用sql语句解析json字符串

    发现当前数据库对字符串的解析都是使用存储过程 xff0c 但是大部分公司不建议使用存过 xff0c 无奈之下写了如下的解析方式 xff1a 原始数据如下图 xff1a 经过数据分析发现 xff0c 每个键值对的分隔符是 34 34 xff0
  • nginx+tomcat负载均衡配置,实现流量切换

    Nginx负载均衡流量切换 实现方法有两种第一步 xff1a 在Servlet配置第二步 xff1a 配置nginx第三步 xff1a 动态配置开发 目前在用的方案是 xff1a 使用Nginx 43 Tomcat配置负载均衡 xff0c
  • 超分辨率相关资源大列表-2

    本文收藏自Github xff0c 仅供学习交流所用 Video Super Resolution A collection of state of the art video or single image super resolutio
  • 12-判断字符串是否以指定字符开头(数据验证)

    StringUtil java package com lh bean public class StringUtil 指定开头的字符串 private String startStr 被判断的字符串 private String str
  • repo init失败的几种解决方法

    试了几天 xff0c 终于解决了同步repo init失败的问题 谨此记录一下 希望对读者有用 由于每个人的情况都不一样 所以我这里会列举我尝试的所有方法 注意repo sync的问题不在本文讨论的范围内 环境说明 xff1a mac xf
  • 分享中国天气网的接口

    http m weather com cn data 101010100 html 注意 xff1a 1 101010100是北京的代号 xff0c 想查询你的城市 xff0c 请看更改城市代号 xff0c 网上百度一大堆 2 不要丢掉 h
  • mybatis的4种分页方式

    原文见 xff1a https blog csdn net chenbaige article details 70846902 今天我们就来进行基于mybatis和MySql进行分页功能的实现 常见的数据分页有哪几种实现 xff1f xf
  • pve模板制作cloud-init

    ubuntu 33 wget http cloud images ubuntu com releases focal release ubuntu 20 04 server cloudimg amd64 img 37 qm create 9
  • vnc viewer最新版,vnc viewer最新版工具有哪些

    现在 市面上有着各种各样的vnc viewer工具 xff0c 在日常工作中 xff0c 你会选择哪一款呢 xff1f 你所了解的vnc viewer最新版工具又有哪些呢 xff1f 今天就和大家聊聊我所了解的超级好用的几款vnc view
  • tableview为空的时候显示空视图

    参考链接 xff1a http stackoverflow com questions 3660313 present a default view instead of tableview if datasource is empty 关
  • QT中textBrowser每行显示不同颜色

    ui gt tbMessage gt append 34 lt font color 61 34 FF0000 34 gt 34 43 strMsg 43 34 lt font gt 34 加上颜色显示之后 xff0c n就没了 这里加上
  • source insight 4.x挂死(win10 21H1)

    问题 点击 34 Add and Remove Project Files 34 在 34 File Name 34 下面的输入框中输入任意内容 Source insight挂死 解决方案 设置 gt 时间和语言 gt 语言 xff0c 如
  • 内核调试小结

    文章目录 1 网络相关1 1 IP地址字符串转 be321 2 打印数值类型的IP地址 2 模块相关2 1 uboot给模块传递参数 1 网络相关 1 1 IP地址字符串转 be32 span class token keyword ext
  • Linux shell常用方法

    目录 1 文件操作1 1 查找文件并执行1 2 hexdump mtd的内容 1 文件操作 1 1 查找文件并执行 span class token function find span span class token builtin c

随机推荐

  • Ubuntu搭建dhcpv4服务器(Kea DHCP Server)

    1 安装kea dhcp服务器 1 1 apt安装 我还没有试过 span class token function sudo span span class token function apt span span class token
  • ubuntu IPv4 pppoe服务器搭建

    1 安装pppoe服务器 sudo apt get install pppoe 2 配置pppoe服务器 1 修改 etc ppp chap secrets xff0c 增加拨号用户名 xff0c 密码 xff1a 增加一行 xff1a 3
  • mac地址老化时间配置

    1 查看老化时间 cat proc sys net ipv4 neigh br0 base reachable time 2 配置老化时间 echo 300 gt proc sys net ipv4 neigh br0 base reach
  • ubuntu 18.04 编译openwrt 18.06

    sudo apt install y gitsudo apt install y makesudo apt install y gcc g 43 43 sudo apt install y libncurses5 devsudo apt i
  • vnc连接树莓派,4步轻松实现vnc连接树莓派

    在使用vnc时 xff0c 作为一个新手小白 xff0c 是不是很苦恼不会vnc连接树莓派 xff1f 没关系 xff0c 之前小编也不会 xff0c 今天看完我这篇文章 xff0c 你一定会有所收获的 xff0c 接下来 xff0c 让我
  • windows10+vs2019下 安装cuda10.1

    已有环境 xff1a windows10专业版 43 vs2019 准备工作 参考链接 xff1a xff08 前言部分 xff09 https www cnblogs com xiamuzi p 13470890 html 1 查看NVI
  • openwrt 18.06修改lan ip之后,自动跳转到新的ip

    feeds luci modules luci base luasrc view footer htm xff0c 强制修改为不需要回滚 xff0c 应该还有更好的方法 uci apply true 43 uci apply false f
  • 开源代码网站集合

    USB ModeSwitch xff1a http www draisberghof de usb modeswitch LWIP xff1a https savannah nongnu org projects lwip cJSON xf
  • adb.exe无法运行,提示0xc000007b错误

    运行android studio xff0c 提示adb server无法运行 xff0c 在命令行下进入C Users Administrator AppData Local Android Sdk platform tools xff0
  • 【Flutter入门到进阶】Dart进阶篇---进阶用法

    1 Dart对象扩展 1 1 extension 1 1 1 介绍 可以在不更改类或创建子类的情况下 xff0c 向类添加扩展功能的一种方式 灵活使用 extension 对基础类进行扩展 xff0c 对开发效率有显著提升 1 1 2 需求
  • 中国天气网API(最新接口)

    一 产品概述 SmartWeatherAPI 接口 简称 SWA 接口 是中国气象局面向 网络媒体 手机厂商 第三方气象服务机构等用户 xff0c 通过 web 方 式提供数据气象服务的官方载体 二 使用说明 该数据主要包括预警 实况 指数
  • MySQL事务:事务隔离

    对数据进行并发操作时 xff0c 事务可以确保数据的完整性 xff0c 在银行 证券交易等业务场景需要用到它 xff0c 本文将介绍MySQL事务是如何保证数据的一致性的 目录 事务特性事务启动与提交事务回滚 什么是事务隔离事务隔离级别 事
  • MySQL锁:全局锁、表级锁和行锁

    事务的实现离不开MySQL数据库的锁机制 xff0c 设计锁的目的也是为了处理并发访问问题 xff0c 本文简单介绍MySQL 里面的全局锁 表级锁和行锁三类锁 目录 全局锁表级锁表锁1 读锁实例2 写锁实例 元数据锁 行锁行锁简介行锁实例
  • Java环境安装配置步骤介绍

    本文记录Windows环境和Linux环境 centos7 安装Java以及Linux环境升级Java JDK版本的步骤 目录 Windows环境安装Java JDK1 下载安装2 配置环境变量 Linux环境安装Java JDK1 下载安
  • Maven 安装和配置方法详解

    通常一个Java项目会引用大量的 jar 包 xff0c 而jar 包之间可能存在各种依赖关系 xff0c 如果运行Java项目时仅使用classpath 参数来管理jar包会非常不方便 xff0c 此外 xff0c 在项目编译 打包 升级
  • MySQL索引介绍

    索引主要是用来提高数据库的查询效率的 xff0c 它对指定的列或列的集合生成索引 xff0c 然后可以通过索引来检索目标数据 xff0c 就像目录一样 xff0c 缩小了扫描范围 xff0c 大大提高了查询效率 如果不使用索引 xff0c
  • 第二、UIScrollView的使用大全

    UIScrollView 原理详解 ScrollView UIScrollView UIScrollView 为了显示多于一个屏幕的内容或者超过你能放在内存中的内容 Scroll View 为你处理缩小放大手势 xff0c UIScroll
  • 持续集成平台Jenkins:docker镜像升级

    Jenkins 2 357 及 LTS 2 361 1之后的版本要求Java 11 或者 17 xff0c 如果使用的是Java 8 xff0c 要升级最新版本的Jenkins xff0c 就需要升级Java JDK版本 xff0c 本文记
  • 持续集成:通过Jenkins API创建项目和节点

    我在持续集成 xff1a Jenkins API使用方法详细介绍中介绍了jenkins API的使用方法 xff0c 比如使用API读取jenkins项目相关信息 触发构建等操作 xff0c 除此之外 xff0c 还可以直接使用API来创建
  • Android APP稳定性测试工具Fastbot

    我在 自动遍历测试之Monkey工具 和 AppCrawler自动遍历测试 分别介绍了APP稳定性测试工具monkey和AppCrawler xff0c 它们各有优缺点 xff0c 本文介绍另一款也比较好用的稳定性测试工具Fastbot 目