Android提升开发测试效率,程序员应该多干了些什么?

Android提升开发测试效率,程序员应该多干了什么?

一、前言

Android提升开发测试效率,程序员应该多干了些什么?

什么?

当你听到要多干些什么,要多写些代码时候,估计就会头疼了,我业务上的需求都还写不完呢。还要多加提高开发测试的需求。

别急!!!先看完下面:

当我们在Android里面工作了很多年时候,肯定不只做了一个App,也肯定不只在一家公司呆过,也肯定不只是做手机上App开发,我汇总一下遇到的那些问题,然后可以怎么做才能提高开发效率。

  1. 测试人员 你这个界面提示报错了,或者报错网路异常了,然儿网络正常的,你排查一下,然儿当你连接上调试线排查时候,却发现原来是服务器在编译期间,报错500了等。
    这不浪费你时间吗?
    怎么让测试人员自己知道等一会儿呢,这样才不浪费表情

  2. 一般一套系统的环境包含4个环境:

    1)线上环境

    2)线上模拟环境(QA环境)

    3)测试环境(Stage)

    4)开发环境(Develop)
    测试人员 给我打一个xxxx环境的包吧,我要用,帮我安装一个xxxx环境的包吧,
    联调人员 你先连接我本地服务器试试
    每次都这样,这不浪费你时间吗?

  3. 当Android设备是手机时候,新来台设备,新来测试机,怎么安装app?
    普通搞法: 找个调试线,运行代码安装(大多数情况下只能运行debug包)。或者蓝牙传过去,

    那如果新来设备比较多呢,你手上开发的App不只这一个,有多个呢?
    怎么快捷方便?

  4. 当Android 设备不是手机时候,如果是收银机,收银秤,或者车机机器,或者智能家居,电视TV,或者大屏广告屏等,反正比较大,不好放,又比较重不容易拿,或者一个人都搬不动。

    总不可能每次都花费很大力气抱到电脑旁边,插上数据线运行安装吧,或者电脑抱过去 ,无线ADB调试有些第一次还必须插线才行。 这TMD太浪费时间了,怎么快捷方便?

  5. 业务数据排查问题时,偶尔会以登录的账号维度排查,当有些数据不是以登录账号为维度,而是以设备唯一序列号为维度,怎么好方便排查呢,总不会把那台机器抱过来吧。
    有什么方法可以快捷方便?

  6. 如果是Android收银机设备的机器,里面有频繁支付功能。某一台测试机上面大多数情况下安装了测试环境的包,测试环境支付实际不扣钱的。突然那天去测试发现,已支付,原来里面是正式环境,把钱给扣了,然后得想办法把相关钱退回来。
    有什么方法避免大家这样误操作?

  7. 打包发布,拒绝原始单个单个打,各渠道包配置好,一键打,系统更新包打好task配置好自动上传,在线打包等。

我们试想:
在一个公司,做一个app,肯定会遇到上面这些低效问题,
当在一个公司,做了多个app,还是会遇到这些低效问题,
当在下一家公司,或者下下一家公司,还是会有这些低效问题。

怎么避免这些低效的沟通,或者做了很多低效重复的工作呢

且看下面分解:

二、网络异常精细处理

将网路异常精细化,让开发测试人员,在碰到简单的异常时候,立马就知道原因。不用每一次都去调试找原因。
比如:当服务器编译期间报错500了,立马就知道,不用调试找原因
比如:联调阶段当服务器数据结构变了忘了告诉客户端,提示:数据错误,json解析错误,这边可以立马知道原因

等等

ini 复制代码
<string name="ehttpio_msg">服务器开小差,请重试</string>
<string name="emobilenetuseless_msg">当前网络不可用</string>
<string name="enetworkio_msg">网络连接异常</string>
<string name="enotfoundmethods_msg">没有找到反射方法</string>
<string name="ehttpprotocol_msg">网络连接异常</string>
<string name="exmlparser_msg">XML解析出错</string>
<string name="exmlio_msg">XML通讯错误</string>
<string name="eclassnotfound_msg">没有找到反射类</string>
<string name="eillegalaccess_msg">反射调用时指针出错</string>
<string name="esecurity_msg">反射安全出错</string>
<string name="econnecttimeout_msg">请求超时,请重试</string>
<string name="eparamhasnull_msg">反射方法中有传入为null的参数</string>
<string name="eparamuninvalid_msg">反射方法中传入参数不合法</string>
<string name="HostBaseUrlError">请求地址错误</string>
<string name="failed_to_connect_to">无法连接到服务器</string>
<string name="JsonSyntaxException">数据错误,json解析错误</string>
<string name="ehttp_request_fail400">服务器异常400</string>
<string name="ehttp_request_fail403">请求ip被封了</string>
<string name="ehttp_request_fail404">服务器异常404</string>
<string name="ehttp_request_fail405">服务器异常405</string>
<string name="ehttp_request_fail502">服务器异常502</string>
<string name="ehttp_request_fail503">服务器异常503</string>
<string name="ehttp_request_fail504">服务器异常504</string>
<string name="ehttp_request_fail500">服务器异常500</string>
<string name="ehttp_request_fail401">服务器异常401</string>
<string name="ehttp_eunknownhost_msg">host地址配置错误异常</string>
<string name="ehttp_unknownservice_msg">网络连接异常</string>
<string name="ehttp_unsupportedencoding_msg">通信编码出错</string>
<string name="ehttp_requestsslhandshakeexception">证书校验异常</string>
<string name="enotdefine_msg">未知错误异常</string>

三、切换环境,切换序列号可配置

  1. 可开发一个界面,自己设计,控制在打测试包的时候,登录之前有入口可以进来,更严格的可以通过ASM字节码插桩, 只有测试包Debug时候才会有代码进入该控制界面,正式包Release包时候没有那些代码
  2. 可以控制切换http,https, 切换设备序列号,切换环境地址,让其可选可填,可控制测试模式,和正式模式,当测试模式时候所有选择保存才会有效。
  3. 所有切换配置可以存入MMKV,或者FastKV,或者SP,DataStore等,本地存储。
  1. 特别注意:
    1)如果涉及到数据库时候:需要分别配置测试Debug包的数据库名,和Release包的数据库名,两个名字要分开,
    2)数据库里面表字段要加一个字段来区分环境(存入值:建议就用切换环境的地址)。这样当测试包切换环境时候,查询的数据库时要带上当前环境值去匹配,才能和当前环境下数据能够对得上。 如下:
  1. 当切换环境,切换序列号等设置好,保存后,让其App 3秒后自动重启:
ini 复制代码
val intent = baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
val restartIntent = PendingIntent.getActivity(applicationContext, 0, intent, PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE)
val mgr = getSystemService(ALARM_SERVICE) as AlarmManager
mgr[AlarmManager.RTC, System.currentTimeMillis() + 3000] = restartIntent
ActivityManager.exitApplication()// 退出app
  1. 上面内容:甚至你可以封装好成一个包,以后做1个app,第2个app,第3个app,都可以一键接入,甚至来到其他公司,都可以说服大家这样做。毕竟方便嘛,同时也可以控制只有Debug包才接入它。Release包没有的。

四、测试包正式包区分,测试包各个环境提醒

当在测试包 Debug 包的时候,可以多写个TextView在头部展示环境(覆盖在其他上面也无所谓),这样在测试包时候,大家可以放心看到,不会出现以为不付钱时候而实际支付到生产环境了。

注意:Release打包时候没有这块内容!!!

五、下载工具

自己写个下载器,同时也可以学习

  1. 断点续传,
  2. 单文件多个线程同时下载,
  3. 多个文件同时下载,
  4. 自定义下载进度按钮
  5. 自己电脑本地搭建好服务器。配置好json,让其客户端读取该json,json内容就是配置的要下载的文件地址,可以是本地电脑里面的,也可以是线上的地址
  6. 注意要连接同一个网,让其保持在同一个局域网内。
  7. 让该下载器可以手动输入IP地址,可以手写个键盘:因为局域网内部ip可能变化。
  8. 不要嫌弃麻烦,当你有很多个app需要下载安装,当你在任何一家公司都可能有这些安装问题,你只需要把这个下载器安装到设备,或者测试机里面,把本地服务器打开,然后一切都变得很轻松。我前言里面提到的那些麻烦全部迎刃而解
  9. 甚至可以本地电脑局域网准备一份,服务器里面准备一份。当本地服务没有开,可以下载线上的,当自己不在公司,当请假了,测试人员,想要那个包,完全可以自己玩游戏一样的。
  10. 这个工具大多数情况只有自己和测试人员用,不外用。
  11. 注意,本地gradle打包,可以配置好task任务,在打包完直接copy到,本地服务器文件地址。

如下图:我N年前学习写断点续传下载,自己设计的有点不美观,但是当时写好的工具一直用到现在,经历了几家公司了,是真的方便。

六、自动化打包上传

  1. 各渠道包配置好,一键打,
  2. 系统更新包打好task配置好自动上传,一键搞定
  3. 在线打包等

这个我不具体介绍了,网上很多资料。

七、总结

本文重点介绍了:

Android提升开发测试效率,程序员应该多干了些什么?

  1. 网络异常精细处理
  2. 切换环境,切换序列号可配置
  3. 测试包正式包区分,测试包各个环境提醒
  4. 下载工具
  5. 自动化打包上传

感谢阅读:

欢迎用你发财的小手 关注,点赞、收藏

这里你会学到不一样的东西

相关推荐
谦行4 分钟前
前端视角 Java Web 入门手册 5.4:真实世界 Web 开发——Java Web 代码组织与分层
java·后端·架构
Goboy7 分钟前
构建异步消息通信机制设计与实现
后端·程序员·架构
IT成长日记1 小时前
【HDFS入门】HDFS核心组件JournalNode运行机制剖析:高可用架构的基石
hadoop·hdfs·架构·journalnode
掘金-我是哪吒2 小时前
分布式微服务系统架构第107集:Netty开发,模拟报文生成器代码
分布式·微服务·云原生·架构
QING6183 小时前
详解:Kotlin 类的继承与方法重载
android·kotlin·app
QING6183 小时前
Kotlin 伴生对象(Companion Object)详解 —— 使用指南
android·kotlin·app
一一Null3 小时前
Android studio 动态布局
android·java·android studio
TE-茶叶蛋6 小时前
2025-Gateway架构
架构·gateway
琢磨先生David6 小时前
Java 在人工智能领域的突围:从企业级架构到边缘计算的技术革新
java·人工智能·架构
somdip10 小时前
若伊微服务版本教程(自参)
微服务·云原生·架构