通过Appium日志,分析其运行原理
1.启动appium;
![clipboard.png](https://img.bosszhipin.com/beijin/upload/tmp/20210813/cbbc646730eb772f445b69cb5822892991c558c16dada0fe03e88dda924a9769.png)
appium的rest http 接口开始监听 4723 端口;
2.运行 python 脚本;
![2.png](https://img.bosszhipin.com/beijin/upload/tmp/20210813/5dbb775621b02224c4fd3ce0d54932de91c558c16dada0fe03e88dda924a9769.png)
appium接收到一个post请求 /wd/hub/session,并携带了 capabilities 字典参数;
3.appium创建session;
![3.png](https://img.bosszhipin.com/beijin/upload/tmp/20210813/f1f5901b470861a96023aa00d1c794c191c558c16dada0fe03e88dda924a9769.png)
调用 AppiumDriver.createSession() 方法,并把携带的参数传入;
创建成功session,显示session id;
4.找到jdk和adb;
![4.png](https://img.bosszhipin.com/beijin/upload/tmp/20210813/d7c66cb9154fe6843522f1bb18a2d6c991c558c16dada0fe03e88dda924a9769.png)
5.检查android还是ios,判断是否连接设备、系统版本号、设备名称;
![5.png](https://img.bosszhipin.com/beijin/upload/tmp/20210813/84b600cf6a40bcf77ff4e58335c0d76f91c558c16dada0fe03e88dda924a9769.png)
6.启动创建的 session,连接设备,获取设备的详情信息;
![6.png](https://img.bosszhipin.com/beijin/upload/tmp/20210813/d2045cbacab5bc411868435f7c22c86891c558c16dada0fe03e88dda924a9769.png)
7.开始执行,运行 UiAutomator ,找到 AppiumBootstrap.jar ,并 push 到手机上;找到 要运行的包名,并尝试连接设备;失败后,会重新运行 UiAutomator ,尝试链接设备;唤醒屏幕,启动测试程序;
![7.png](https://img.bosszhipin.com/beijin/upload/tmp/20210813/8a03d76ab4595c2f42d5f60c8ab1f48391c558c16dada0fe03e88dda924a9769.png)
8.请求 close url,调用 AppiumDriver.closeApp() 方法,传入参数 session id;
关闭会话,等待60秒;
关闭session会话,删除session id;
通过adb命令向android发送 shutdown 命令,AndroidBootstrap 接收并返回结果;
![8.png](https://img.bosszhipin.com/beijin/upload/tmp/20210813/6b5e8f1c5a6eede7127a2a4fd6baafe891c558c16dada0fe03e88dda924a9769.png)
9.关闭 UiAutomator;
![9.png](https://img.bosszhipin.com/beijin/upload/tmp/20210813/5a8236af21938013fb8506ddb81b493191c558c16dada0fe03e88dda924a9769.png)
需要知道的
1.android通过package来识别app的。如果俩apppackage一样,只能安装一个,另一个安装时会提示已安装或直接覆盖上一个app;
Activity为app提供屏幕显示内容,也就是界面化,所有的UI都显示在Activity;
启动app时,手机先通过package找到要启动的app,然后再查找主Activity启动。一般为欢迎页面、登录页面或其他主页面;
app的UI测试就是要测试各Activity的页面元素;
2.appium是C/S架构,核心是web服务器,它提供一套REST的接口,会接收到客户端的连接,监听到命令。执行会再将结果通过Http响应返回给客户端;
appium服务端会创建一个session,自动化始终围绕一个session进行。不同语言有不同实现方式,但最终都会是发送一个Post请求给服务端,请求中包含一个Json对象,被称作‘Desired Capabilities’,Desired Capabilities是一些键值对的集合,客户端将这些键值对发给服务端,告诉服务端我们想怎么测试。