美文网首页
Python+adb+Android源码+后台接口测试构想

Python+adb+Android源码+后台接口测试构想

作者: c4a1d989518e | 来源:发表于2017-09-09 23:04 被阅读211次

之前微店的面试问过一个问题,问我“如何用adb开发一个自动抢红包的插件”,我当时就懵逼了,adb还有这样强大的功能。但直到我真正见识到adb的使用还是那天看了腾讯测试的推送,那就是开发一个后台接口自动化测试。

我之前的理解的后台接口自动化测试都是理解的前后端分离的,那种restful api接口,用python写个get和post,然后在加个断言和定时操作就可以了。但是那篇文章所说的后台接口测试是直接开发了一个APP。

事情的背景是这样,现在一些接口,有了很多限制,直接用浏览器,或者请求接口的postman等工具不能访问到,必须要用客户端来访问,这样的限制有了以后,一个后台接口监控是否直接能用app的运行来完成,说到客户端的运行,我们可能会第一时间想到的就是UI自动化测试,但是UI自动化测试运行起来比较慢,且维护成本也比较高。但是我们可以做一个没有UI界面的APP,这样运行时间就可以变得很快了

实现方案

由于我的业务暂时还不用这样,我们的后台没有这样的限制,我实践的部分是实现这样的三步:

1.通过adb发送消息给Android设备
2.Python能收到Android的log
3.初尝改造APP

1.通过adb发送消息给Android设备

adb发送消息的命令为:

adb shell am start -n com.example.mytest/.MainActivity --es msg "end"

发送一个“end”命令给com.example.mytest包下的MainActivity。有了发送,那Android客户端怎么读取到这个消息呢?

安卓部分的代码为:

@Override
    protected void onCreate(Bundle savedInstanceState) {



        super.onCreate(savedInstanceState);
        setContentView(R.layout.button);

        Button button1=(Button)findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=getIntent();
                String msg=intent.getStringExtra("msg");
                Log.d(msg,"#####################");
                startActivity(intent);

            }
        });
    }

log里面的#####################,是为了在log界面中更好找到。

运行adb命令,然后在用Android Studio运行app,去Android Studio中查看,可以看到已经读取了msg为“end”


image.png

这个adb命令可以不用自己去命令行中敲,可以直接在Python中添加这个。
Python部分的代码为

import os

os.system("adb shell am start -n com.example.mytest/.MainActivity --es msg \"end\"")

2.Python能收到Android的log

查看Android中的log,可以直接用adb log -c(-c的意思是清空之前的log)查看,通过adb还可以设置一些过滤方法,所有直接用Python运行adb的这个命令就好了
代码为:

def logcat_monitor2():
    os.system("adb logcat -c")
    time.sleep(1)
    f=open(logname,'wb')

也可以直接print os.system("adb logcat -c")查看能不能接受返回

3.初尝改造APP

这个听起来很吓人,要在Android开发人员开发的APP上进行开发,我如果有那么厉害,我不是高级Android开发工程师了,我简单的尝试了一部分,发现没有想象中的额那么困难,很多地方就是copy和delete。

如果是MVP,M是处理数据逻辑的部分,这部分我们是要保留的,V是视图部分,耗时操作主要是这里,而且主要是一个界面化的展示,我们不需要,P的部分是用于M和V部分进行数据交换的,这个保不保留看情况。如果要实现整个工程,我现在的构想是,各种M部分埋点log,然后可能困难的部分,在于让在没有V界面的情况下,让一个完整的流程跑起来。这些整个跑起来不是一两天能完成的事情,以后用到了在实施吧,先做个简单的记录。

还有就是Android的运行,我尝试的时候,我是把一些函数的运行放到了onCreate中,这个是在Activit在第一次创建时被调用,还有一些是在Activity被销毁时被调用,各取所需吧。Android 活动(Activity)

相关文章

网友评论

      本文标题:Python+adb+Android源码+后台接口测试构想

      本文链接:https://www.haomeiwen.com/subject/jjkejxtx.html