一 资源索引

Lyrebird Github
请参考大会的ppt--客户端QA测试效率工具-赵晔.pdf  

在今年的移动互联网测试大会上首次分享的一款保证客户端App的质量工具。

个人看后是这么理解的,正如文中所说“使用Lyrebird后客户端完全和后端API服务器分离。API服务器相关的缺陷将不会被测到。可使用接口测试工具继续完成API接口服务的测试工作,以保障客户端质量。”

该工具比较适合在系统集成测试的中后期;
或者服务接口测试结束(服务接口可靠性有一定保障)且前端客户端app手工业务也主要测试完成后;
或者在小版本迭代上线新功能(服务接口变动不大)的测试场景下;
利用代理mitmproxy捕获客户端app的操作api请求,然后利用mock工具(Lyrebird的Datamanager)进行模拟返回,更多将测试重点聚焦于客户端App的前端测试或前端业务场景模拟。

二 部署记录

本人是ubuntu18.04桌面版,其它windows或mac系统部署类似,只要有python3环境均可使用。
以下为利用python virtualenv部署python3和Lyrebird

# 利用virtualenv 创建名为 Lyrebirdpython3.6.5 虚拟环境
cmd@TR:~$ pyenv virtualenv 3.6.5 Lyrebird
Requirement already satisfied: setuptools in /home/cmd/.pyenv/versions/3.6.5/envs/Lyrebird/lib/python3.6/site-packages
Requirement already satisfied: pip in /home/cmd/.pyenv/versions/3.6.5/envs/Lyrebird/lib/python3.6/site-packages

# 激活使用Lyrebird虚拟python3环境
cmd@TR:~$ pyenv activate Lyrebird
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior

# 检查初始虚拟环境带的py
(Lyrebird) cmd@TR:~$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip (9.0.3)
setuptools (39.0.1)

# 升级下过老的py
(Lyrebird) cmd@TR:~$ pip install --upgrade pip
(Lyrebird) cmd@TR:~$ pip install --upgrade setuptools

(Lyrebird) cmd@TR:~$ pip list
Package Version
---------- -------
pip 10.0.1
setuptools 40.0.0

# 安装lyrebird
(Lyrebird) cmd@TR:~$ pip install lyrebird

# 看下lyrebird 依赖安装了其他哪些py
(Lyrebird) cmd@TR:~$ pip list
Package Version
---------------- ---------
aniso8601 3.0.2
asn1crypto 0.24.0
beautifulsoup4 4.6.0
blinker 1.4
brotlipy 0.7.0
certifi 2018.4.16
cffi 1.11.5
chardet 3.0.4
click 6.7
colorama 0.3.9
cryptography 2.2.2
fire 0.1.3
Flask 1.0.2
Flask-RESTful 0.3.6
Flask-SocketIO 3.0.1
genson 1.0.1
h11 0.7.0
h2 3.0.1
hpack 3.0.0
hyperframe 5.1.0
idna 2.7
itsdangerous 0.24
Jinja2 2.10
kaitaistruct 0.8
ldap3 2.5
lyrebird 0.10.5
MarkupSafe 1.0
mitmproxy 4.0.3
packaging 17.1
passlib 1.7.1
pip 10.0.1
portpicker 1.2.0
pyasn1 0.4.3
pycparser 2.18
pycryptodome 3.4.11
pyOpenSSL 18.0.0
pyparsing 2.2.0
pyperclip 1.6.2
python-engineio 2.2.0
python-socketio 2.0.0
pytz 2018.5
requests 2.19.1
ruamel.yaml 0.15.44
setuptools 40.0.0
six 1.11.0
sortedcontainers 2.0.4
tornado 5.0.2
urllib3 1.23
urwid 2.0.1
Werkzeug 0.14.1
wsproto 0.11.0



# 查看下命令行参数帮助
(Lyrebird) cmd@TR:~$ lyrebird --help
WARNING: The proper way to show help is 'lyrebird -- --help'.
Showing help anyway.

Fire trace:
1. Initial component
2. Instantiated class "CommandLine" (/home/cmd/.pyenv/versions/3.6.5/envs/Lyrebird/lib/python3.6/site-packages/lyrebird/manager.py:127)
3. ('Could not consume arg:', '--help')

Type: CommandLine
String form: <lyrebird.manager.CommandLine object at 0x7f4f83a07b00>
Docstring: 命令行入口

* lyrebird
以缺省参数启动lyrebird

* lyrebird start
以缺省参数启动lyrebird

* lyrebird v start
以输出详细日志模式启动lyrebird

* lyrebird no-browser start
启动lyrebird不默认打开浏览器

* lyrebird start --mock 9090 --proxy 4272 --data .
指定参数启动lyrebird
参数:
--mock 默认9090 , mock服务及前端端口
--proxy 默认4272, 代理服务端口
--data 默认./data, mock数据根目录
--name 默认lyrebird,服务别名(用于通过别名停止指定的lyrebird服务)

* lyrebird stop
停止lyrebird

* lyrebird stop --name foo
停止别名为foo的lyrebird

Usage: lyrebird
lyrebird no-browser
lyrebird resource
lyrebird server
lyrebird start
lyrebird stop
lyrebird v


# 带v 日志方式 启动lyrebird服务
(Lyrebird) cmd@TR:~$ lyrebird v start
lyrebird Load config : {
"
version": "0.10.5",
"
proxy.filters": [],
"
proxy.port": 4272,
"
mock.port": 9090,
"
mock.data": "data",
"
mock.proxy_headers": {
"
scheme": "MKScheme",
"
host": "MKOriginHost",
"
port": "MKOriginPort"
},
"
ip": "your ip "
}
lyrebird start on your ip:9090
* Serving Flask app "
MOCK" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
mitmproxy start on your ip:4272 ***请在被测设备上设置代理服务器地址***
INFO - [mock_server] - 302 GET http://localhost:9090/
INFO - [mock_server] - 200 GET http://localhost:9090/ui/


小米手机设置代理参考

https://jingyan.baidu.com/article/1974b2895cb780f4b1f774b5.html
我本机是ubuntu18.04 用的公司无线wifi dhcp获得IP ,手机也是连接的公司同一wifi
根据日志输出“mitmproxy start on your ip:4272 请在被测设备上设置代理服务器地址”提示,配置好手机该wifi代理的ip和端口4272
被测设备上用浏览器打开 http://mitm.it 选Android 提示下载 pem.crt 安装,并安装证书。

小米mix2 miui9.6 安装mitmproxy证书问题解决:

用手机自带的浏览器 或者 Firefox (从日志来看小米浏览器被一个url 为sec.miui.com的安全服务限制了,无法正常下载该pem.crt证书,Firefox则是没有什么提示,但再此点击Android图标又会提示“此证书已在此前安装为一个证书颁发机构”)

都无法正常唤起 “证书安装程序” ,最后尝试用了Chrome ,终于点击Android图标下载文件pem.crt成功后提示并唤起了手机系统的“证书安装程序” ,此处还要输入锁屏密码,然后就是一个“为证书命名”的提示框。输入一个名字lyrebird ,确定即正常提示安装证书成功。

通过Chrome的下载管理来看该pem文件名

该证书凭据最后可以在设置 ->其他设置-> 系统安全-> 加密与凭据-> 信任的凭据-> 用户下找到,名为mitmproxy

然后在地址 http://localhost:9090/ui/ 便可以点击record图标 ,来开始录制手机上操作app的请求。

界面只有inspector和datamanager解决 

其他界面是插件形式提供的,目前默认没有集成插件。还是需要自己装的。
安装方式如下
pip install lyrebird-ios
pip install lyrebird-android
pip install lyrebird-api-coverage

Android界面

lyrebird-android 
需要安装该插件。目前lyrebird 默认界面inspector  DataMagnager
插件有ios   api-coverage   android
像overbridge 和大会里提到的其他 还未开放?

这个Android界面,我实验了下usb连接真机,不开启开发者模式中的usb调试相关 或adb devices -l 命令list不出来真机,界面上刷新Android界面 是找不到你的真机的。
所以还是要开启开发者模式相关。

可以看到真机界面(但非实时双向的)实时日志,和其他快捷启动app等

码完待续,先部署好。


↙↙↙阅读原文可查看相关链接,并与作者交流