环境配置
Charles抓包工具
Charles教程:https://www.axihe.com/tools/charles/charles/tutorial.html
Charles证书配置
注意,在Android 7以上Charles无法代理https请求,系统默认不信任用户证书,解决方法:
- 更换Android 7以下的安卓手机测试
- 修改apk文件,配置安全策略,需要反编译apk文件,较麻烦
mitmproxy抓包工具
mitmproxy地址:https://github.com/mitmproxy/mitmproxy/releases
安装:pip install mitmproxy
mitmproxy证书配置
对接python脚本:mitmdump -s script.py
注意:
- 在Windows上不支持mitmproxy的控制台接口,使用mitmdump、mitmweb
- Charles默认在本地的8888端口开启一个代理服务,mitmproxy为8080
- Charles一般用于抓包分析,mitmproxy则可对接python脚本:重写request(flow)、response(flow)方法等
Appium自动化测试工具
Appium地址:https://github.com/appium/appium-desktop/releases
Android Studio(包含Android SDK):https://developer.android.google.cn/studio/
Appium启动安卓APP,Desired Capabilities:
{
“platformName”: “Android”,
“deviceName”: “1801_A01”,
“appPackage”: “com.tencent.mm”,
“appActivity”: “.ui.LauncherUI”,
}
python启动安卓APP:
- 安装模块:pip install Appium-Python-Client -i https://pypi.tuna.tsinghua.edu.cn/simple
- 自动启动WX并登录
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
server = 'http://localhost:4723/wd/hub'
desired_caps = {
'platformName': 'Android',
'deviceName': '1801_A01',
'appPackage': 'com.tencent.mm',
'appActivity': '.ui.LauncherUI'
}
driver = webdriver.Remote(server, desired_caps)
wait = WebDriverWait(driver, 5)
login = wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/e80')))
login.click()
phone = wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/l3')))
phone.set_text('18888888888')
next_1 = wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/ay8')))
next_1.click()
passwd = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@resource-id="com.tencent.mm:id/dbs"]/android.widget.EditText')))
passwd.set_text('123456')
login_1 = wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/ay8')))
login_1.click()
yes = wait.until(EC.presence_of_element_located((By.ID, 'com.tencent.mm:id/b00')))
yes.click()
sleep(10)
appPackage为APP包名,appActivity为APP入口类,获取方式:
- 手机通过数据线连接电脑,开启USB调试,命令行:adb devices -l,若发现设备则连接成功
- 手机打开APP,命令行:adb shell dumpsys activity activities >D:\log.log
- 日志搜索cmp关键字
注意:
- 由于没有Java环境,Appium启动安卓APP一直失败
- python启动过程APP过程中,出现socket hang up报错,导致程序异常停止,原因:由于Appium、python同时打开APP,会导致socket接口冲突而中断连接