python脚本打包apk-上传到内测平台-企业微信通知

python打包Android项目+上传服务器+通知测试

作为一名Android开发工程师,免不了要打apk给公司的测试人员进行测试。iOS那边每次打包完就上传,并且在企业微信发送消息到群里通知测试人员,感觉挺方便的。之前也浅学了一下python,于是花了两天撸了一个。下面分享下这个流程。

执行脚本,输入更新内容
打包apk—》上传到内测分发平台(需要注册第三方平台)—》企业微信通知测试(需要服务端提供部分配置信息)

目标:自动完成以下操作

打包apk
上传到内测分发平台
企业微信通知测试

需要掌握知识点

  • 编译打包apk命令
  • 使用python请求接口

命令行编译打包apk

打包指令:.\gradlew :android:assembleDebug

# Android编译打包apk
def packApk():
    os.chdir(AppConstVal.APP_PROJECT_PATH)
    iRet = subprocess.call('.\gradlew ' + AppConstVal.APP_GRADLE_BUILD_TYPE + ' --stacktrace', shell=True)  # 编译
    print("打包完成", iRet)

AppConstVal是自定义的常量类,这里拼接字符主要是为了以后容易拓展,执行脚本的时候可以用过传入不同参数来决定打debug包还是打release包

上传到服务器

关键代码:
requests.post(url=BetaqrConstVal.baseUrl, params=params, headers=headers)
requests.post(uploadIconUrl, files=iconFile, data=iconParams)


# 上传apk ,分两步:1、获取apk上传url 2、上传apk到获取到的url中
def uploadApk():
    uploadUrl = _getUploadAppUrl()
    uploadApkAndShow(uploadUrl)

# 获取上传应用url
def _getUploadAppUrl():
    # 获取上传的目标服务器
    params = {"type": "android", "bundle_id": BetaqrConstVal.appBundleId, "api_token": BetaqrConstVal.apiToken}
    uploadTokenResponse = requests.post(url=BetaqrConstVal.baseUrl, params=params, headers=headers)
    jsonData = json.loads(uploadTokenResponse.text)
    print("getUploadAppUrl()--->", jsonData)
    return jsonData

def uploadApkAndShow(jsonData):
    # 获取上传的目标服务器
    uploadIconUrl = jsonData["cert"]["icon"]["upload_url"]
    iconKey = jsonData["cert"]["icon"]["key"]
    iconToken = jsonData["cert"]["icon"]["token"]

    uploadApkUrl = jsonData["cert"]["binary"]["upload_url"]
    key = jsonData["cert"]["binary"]["key"]
    token = jsonData["cert"]["binary"]["token"]

    iconPath = AppConstVal.APP_ICON_PATH
    iconFile = {'file': open(iconPath, "rb")}
    iconParams = {
        "key": iconKey,
        "token": iconToken,
    }

    uploadIconResult = requests.post(uploadIconUrl, files=iconFile, data=iconParams)
    print("icon上传结果:", uploadIconResult.text)

    print("=============apk正在上传,清耐心等待==============")
    # 上传安装包
    apkFile = {'file': open(AppConstVal.APP_APK_PATH, "rb")}
    params = {
        'key': key,
        'token': token,
        'file': AppConstVal.APP_APK_PATH,
        'x:name': appData['name'],
        'x:version': appData['versionShort'],
        'x:build': appData['build'],
        'x:changelog': appData['changelog'],
        'file0': ('comeinbeta', open(AppConstVal.APP_APK_PATH, 'rb')),
    }

    e = MultipartEncoder(
        fields={
            'key': key,
            'token': token,
            'x:name': appData['name'],
            'x:version': appData['versionShort'],
            'x:build': appData['build'],
            'x:changelog': appData['changelog'],
            'file': (
                'comein-beta-internal-debug.apk', open(AppConstVal.APP_APK_PATH, 'rb'), 'application/octet-stream'),
        }
    )
    m = MultipartEncoderMonitor(e, my_callback)
    uploadResult = requests.post(uploadApkUrl, data=m, headers={'Content-Type': m.content_type})
    print("\napk上传结果:", uploadResult.text)
    return


def my_callback(monitor):
    progress = (monitor.bytes_read / monitor.len) * 100
    print("\r 文件上传进度:%d%%(%d/%d)" % (progress, monitor.bytes_read, monitor.len), end=" ")
通知测试

这个就很简单了,根据企业微信的api,调用即可

# 发送企业微信通知同事
def notifyPerson(msg):
    contact_list = {
        "张三": "1878251xxxx",
    }
    # 企业微信通知的同事
    mentioned_mobile_list = contact_list.values()
    body = {
        "msgtype": "text",
        "text": {
            "content": msg,
            "mentioned_mobile_list": list(mentioned_mobile_list),
        }
    }
    notifyResponseData = requests.post(NotifyConstVal.wx_send_url, json=body, headers=headers)
    print("发送企业微信消息:", msg)
    print("发送企业微信消息结果:", notifyResponseData.text)

    return

Github

代码已经上传到github了,欢迎交流
https://github.com/KubyWong/assembleApkUpload

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值