-
Notifications
You must be signed in to change notification settings - Fork 1
micllo/pythonAppium_iOS
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
【 用 例 编 写 注 意 事 项 】 1.在'Project'下创建'项目名称'目录:Project > pro_demo_1 2.在'项目名称'目录下创建两个目录:page_object、test_case 3.在'page_object'目录下提供:元素定位、页面操作方法 4.在'case_test'目录下提供:测试用例 5.在'Config > pro_config.py'文件中进行项目配置: (1)get_test_class_list 通过'项目名'获取'测试类'列表 (2)pro_exist 判断项目名称是否存在 (3)get_login_accout 通过'线程名的索引' 获取登录账号 (4)get_app_info 通过项目名称 获取APP信息 ( bundleId ) (5)config_ios_device_list 配置'iOS'设备信息列表 【 未 解 决 的 问 题 】 1.有时在长时间未运行后的第一次运行会报错连接失败,之后再执行就正常了 【 关于 本地 gulp 部 署 前 的 注 意 事 项 】 1.在通过'xcodebuile'命令启动WDA服务前,需要先通过'XCode'工具手动启动'WebDriverAgent'项目,并确认是否能正常启动( 模拟器、真机 ) ######################################################################################################################## 【 本 地 配 置 项 目 开 发 环 境 】 1.配置本地 venv 虚拟环境 (1)修改:requirements_init.txt (2)删除:原有 venv 目录 (3)执行:sh -x venv_install.sh 2.配置 gulpfile 依赖 (1)修改:gulpfile_install.sh (2)删除:原有的 package.json 文件、node_modules目录 (3)执行:sh -x gulpfile_install.sh 3.配置 Nginx -> python_appium_iOS.conf upstream api_server_appium_iOS{ server 127.0.0.1:3001 weight=1 max_fails=2 fail_timeout=30s; ip_hash; } server { listen 3010; server_name localhost; location /test_report_local/ { sendfile off; expires off; gzip on; gzip_min_length 1000; gzip_buffers 4 8k; gzip_types application/json application/javascript application/x-javascript text/css application/xml; add_header Cache-Control no-cache; add_header Cache-Control 'no-store'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; alias /Users/micllo/Documents/works/GitHub/pythonAppium_iOS/Reports/; } location /api_local/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404; proxy_pass http://api_server_appium_iOS/; #proxy_pass http://127.0.0.1:3001/; proxy_redirect default; } } 【 备 注 】 MAC本地安装的 nginx 相关路径 默认安装路径:/usr/local/Cellar/nginx/1.15.5/ 默认配置文件路径:/usr/local/etc/nginx/ sudo nginx sudo nginx -t sudo nginx -s reload ######################################################################################################################## 【 配 置 Openatx/Facebook-wda iOS 环 境 】 【 安 装 工 具 】 1.安装 libimobiledevice:使用本机与苹果iOS设备的服务进行通信的库 https://www.jianshu.com/p/cff879e5ca65 2.安装 carthage:iOS第三方库管理工具,项目依赖管理,WebDriverAgent用它做项目依赖 3.安装 ideviceinstaller(iOS 版本9及以下):不依赖于XCODE,进行安装和调试IOS应用程序 安装 iOS-deploy(iOS 版本10及以上): 不依赖于XCODE,进行安装和调试IOS应用程序 4.安装 appium-doctor:检查 appium 项目配置环境( 检查命令 appium-doctor --ios ) 5.安装 node & npm 6.安装 Xcode 7.安装 iproxy:将设备上的端口映射到电脑上的某个端口( brew install usbmuxd ) 8.安装 WebDriverAgent:在模拟器或真机中运行的用于iOS的WebDriver服务器 ( 通过命令将 WebDriverAgent 应用安装在设备上并启动WDA监听服务,使设备与电脑保持通信 ) 【 开 启 服 务 】 1.在设备中启动'WebDriverAgent'服务,开启监听端口(默认8100) 终端命令(真机) :xcodebuild test -project ../WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=$UDID" 终端命令(模拟器):xcodebuild test -project ../WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "platform=iOS Simulator,name=iPhone 8" < 备 注 > (1)原理:通过命令将 WebDriverAgent 应用安装在设备上并启动WDA监听服务,使设备与电脑保持通信 (2)真机必须与电脑通过 USB 一直连接着 (3)第一次需要使用Xcode进行配置调试,确认是否能正常启动 2.端口映射(将手机的端口映射到MAC上) 终端命令:iproxy 8100 8100 验证地址:http://localhost:8100/status < 备 注 > (1)仅针对使用真机的情况 (2)有些国产iPhone无法通过手动的IP和端口进行访问,需要通过iproxy命令,将手机的端口转发到Mac上 【 启 动 多 个 WDA 服 务 的 方 法 】 1.创建两个 WebDriverAgent 项目 (1)../WDA_iOS/8100/WebDriverAgent/WebDriverAgent.xcodeproj (2)../WDA_iOS/8200/WebDriverAgent/WebDriverAgent.xcodeproj 2.通过Xcode进行配置调试成功 3.进入第二个项目,将8100端口改成8200,然后保存( 搜索"8100",可找到两处) 4.通过 xcodebuild 命令,分别将两个项目安装入对应的设备中,并启动相应的监听端口:8100、8200 ----------------------------------------------- 【 终端启动 WebDriverAgent 服务命令 】 举 例: < iPhone 8 模 拟 器 ( WDA 8100 端 口 )> xcodebuild test -project /Users/micllo/Documents/works/GitHub/WDA_iOS/8100/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "platform=iOS Simulator,name=iPhone 8" < iPhone 11 模 拟 器 ( WDA 8200 端 口 )> xcodebuild test -project /Users/micllo/Documents/works/GitHub/WDA_iOS/8200/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "platform=iOS Simulator,name=iPhone 11" < iPhone 7 真 机 ( WDA 8100 端 口 )> xcodebuild test -project /Users/micllo/Documents/works/GitHub/WDA_iOS/8100/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=3cbb25d055753f2305ec70ba6dede3dca5d500bb" # 打开模拟器应用( 若模拟器未打开的情况 ) open "/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/" # 查看模拟器可用列表 xcrun simctl list xcrun simctl list devices # 查看启动设备进程 ps -ef | grep -v "grep" | grep WebDriverAgentRunner ps -ef | grep -v "grep" | grep WebDriverAgentRunner | awk '{print $2}' | xargs kill -9 # 真机 端口映射 iproxy 8100 8100 ps -ef | grep -v "grep" | grep iproxy ps -ef | grep -v "grep" | grep iproxy | awk '{print $2}' | xargs kill -9 # 查询 映射情况 http://localhost:8200/status ######################################################################################################################## 【 本地 Mac 相关 】 1.uWSGI配置文件:./vassals/mac_app_uwsgi.ini (1)启动 uWSGI 命令 在 ./start_uwsgi_local.sh 脚本 (2)停止 uWSGI 命令 在 ./stop_uwsgi.sh 脚本 2.上传 GitHub 需要被忽略的文件 (1)Logs、Reports -> 临时生产的 日志、报告 (2)vassals_local、venv -> 本地的 uWSGI配置、python3虚拟环境 (3)node_modules、gulpfile.js、package.json、package-lock.json -> 供本地启动使用的gulp工具 3.访问地址( server.py 启动 ): (1)接口地址 -> http://127.0.0.1:3002/ http://127.0.0.1:3002/API/index http://127.0.0.1:3002/API/get_project_case_list/<pro_name> 4.访问地址( uwsgi 启动 ): (1)用例页面 -> http://localhost:3010/api_local/iOS/index (2)测试报告 -> http://127.0.0.1:3010/test_report_local/<pro_name>/[iOS_report]<pro_name>.html (3)接口地址 -> http://127.0.0.1:3010/api_local/ http://127.0.0.1:3010/api_local/iOS/sync_run_case http://127.0.0.1:3010/api_local/iOS/get_img/5e5cac9188121299450740b3 ( 备注:uwgsi 启动 3001 端口、nginx 配置 3010 反向代理 3001 ) 5.本地相关服务的启动操作( gulpfile.js 文件 ) (1)启动服务并调试页面:gulp "html debug" (2)停止服务命令:gulp "stop env" (3)部署docker服务:gulp "deploy docker" 【 虚拟环境添加依赖 】 1.创建虚拟环境:virtualenv -p /usr/local/bin/python3 venv (-p:指明python3所在目录) 2.切换到虚拟环境:source venv/bin/activate 3.退出虚拟环境:deactivate 4.添加依赖: pip3 install -v flask==0.12 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com ######################################################################################################################## 【 服 务 端 配 置 Openatx/Facebook-wda 环 境 】 [ 未 解 决 的 问 题 ] 'Docker'中无法获取通过'USB'连接的真机设备 [ 环 境 配 置 方 案 ] 1.在 mac_mini | centos 上启用一个Docker容器:监控服务 2.在 mac_mini 主机上安装相应工具和服务,并配置iOS设备的连接 (1)若使用真机,则需要USB连接电脑 (2)使用'xcodebuild'命令将WDA服务安装入真机或模拟器中并启动端口 (3)有些真机无法通过IP和端口访问,需要通过'iproxy'命令将设备的端口映射到电脑上 ------------------------------------------ 1.uWSGI配置文件:vassals_docker/app_uwsgi.ini (1)启动 uWSGI 命令 在 ./start_uwsgi.sh 脚本 (2)停止 uWSGI 命令 在 ./stop_uwsgi.sh 脚本 2.服务器目录结构 /var/log/uwsgi/ -> pid_uwsgi.pid、app_uwsgi.log、emperor.log /var/log/nginx/ -> error.log、access.log /etc/uwsgi/vassals/ -> app_uwsgi.ini /opt/project/logs/ -> 项目日志 /opt/project/reports/ -> 测试报告 /opt/project/${pro_name} -> 项目 /opt/project/tmp -> 临时目录(部署时使用) 3.服务器部署命令: (1)从GitGub上拉取代码至临时目录 (2)关闭nginx、mongo、uwsgi服务 (3)替换项目、uwsgi.ini配置文件 (4)替换env_config配置文件 (5)启动nginx、mongo、uwsgi服务 (6)清空临时文件 4.部署时的存放位置: (1)./pythonSelenium -> /opt/project/pythonSelenium (2)./pythonSelenium/vassals/app_uwsgi.ini -> /etc/uwsgi/vassals/app_uwsgi.ini 5.部署时相关配置文件的替换操作: (1)将./Env/目录下的 env_config.py 删除 (2)将./Env/目录下的 env_config_docker.py 重命名为 env_config.py 6.访问地址( Docker 内部 ): (1)测试报告 -> http://127.0.0.1:80/test_report/<pro_name>/[iOS_report]<pro_name>.html (2)接口地址 -> http://127.0.0.1:80/api/ http://127.0.0.1:80/api/iOS/sync_run_case http://127.0.0.1:80/api/iOS/get_img/5e5cac9188121299450740b3 ( 备注:uwgsi 启动 8081 端口、nginx 配置 80 反向代理 8081 ) 7.访问地址( 外部访问 ): (1)用例页面 -> http://192.168.31.10:1080/api/iOS/index (2)测试报告 -> http://192.168.31.10:1080/test_report/<pro_name>/[iOS_report]<pro_name>.html (3)接口地址 -> http://192.168.31.10:1080/api/ http://192.168.31.10:1080/api/iOS/sync_run_case http://192.168.31.10:1080/api/iOS/get_img/5e5cac9188121299450740b3 ( 备注:docker 配置 1080 映射 80 ) 8.关于部署 1.通过'fabric'工具进行部署 -> deploy.py (1)将本地代码拷贝入临时文件夹,并删除不需要的文件目录 (2)将临时文件夹中的该项目压缩打包,上传至服务器的临时文件夹中 (3)在服务器中进行部署操作:停止nginx、mongo、uwsgi服务 -> 替换项目、uwsgi.ini配置文件 -> 替换config配置文件 -> 启动nginx、mongo、uwsgi服务 (4)删除本地的临时文件夹 命令:gulp "deploy docker" -> 编译后 部署docker服务 2.需要在本地启动相关模拟器或真机 命令:gulp "start env_docker" ######################################################################################################################## 【 框 架 工 具 】 Python3 + Openatx/Facebook-wda + unittest + Flask + uWSGI + Nginx + Bootstrap + MongoDB + Docker + Fabric + Gulp 【 框 架 结 构 】( 提高代码的:可读性、重用性、易扩展性 ) 1.Api层: 对外接口、原静态文件 2.Build层: 编译后的静态文件 3.Common层: 通用方法、测试方法 4.Config层: 错误码映射、全局变量、定时任务、项目配置、测试地址配置 5.Env层: 环境配置 6.Project层: 区分不同项目、page_object(页面操作方法、元素定位)、test_case(测试用例) 7.TestBase层: 封装了浏览器驱动操作方法、提供'测试用例'父类第基础方法(继承’unittest.TestCase')、测试报告生成、同步执行用例方法 8.Tools层: 工具函数 9.其他: (1)vassals/ -> 服务器的'uWSGI配置' (2)vassals_local/、venv/ -> 本地的'uWSGI配置、python3虚拟环境' (3)Logs/、Reports/、Screenshot/ -> 临时生产的 日志、报告、截图 (4)node_modules/、gulpfile.js、package.json、package-lock.json -> 供本地启动使用的gulp工具 (5)deploy.py、start_uwsgi_local.sh、stop_uwsgi_local.sh、tmp_uwsgi_pid.txt -> 本地部署文件及相关命令和临时文件 【 功 能 点 】 1.使用 Python3 + Openatx/Facebook-wda + unittest + Bootstrap: (1)使用'unittest'作为测试用例框架 (2)通过动态修改和添加'unittest.TestSuite'类中的方法和属性,实现启用多线程同时执行多条测试用例 (3)通过修改'HTMLTestRunner'文件并结合'unittest'测试框架,优化了测试报告的展示方式,并提供了每个测试用例的截图显示 (4)所有用例执行后,若有'失败'或'错误'的用例,则发送钉钉和邮件通知 (5)提供日志记录功能:按照日期区分 (6)提供定时任务:定时删除过期(一周前)的文件:日志、报告、截图文件(mongo数据),定时执行测试用例 (7)提供页面展示项目用例,实现用例上下线、批量执行用例、显示报告、用例运行进度等功能 (8)多线程并发处理方式:先通过'ps aux'命令查看'WebDriverAgentRunner'服务连接的iOS设备情况、再将'已连接'的设备列表数量 作为 并发线程数量 2.使用 Flask : (1)提供 执行用例的接口 (2)提供 获取截图的接口:供测试报告页面调用 3.使用 Nginx : (1)提供测试报告的查看地址 (2)反向代理相关接口、解决测试报告调用'获取截图接口'时的跨域访问问题 4.使用 uWSGI : (1)用作 web 服务器 (2)使用'emperor'命令进行管理:监视和批量启停 vassals 目录下 uwsgi 相关的 .ini 文件 5.使用 Docker: (1)使用Dockerfile构建centos7镜像:提供项目所需的相关配置环境 (2)使用'docker-compose' 一键管理多个容器 6.使用 MongoDB : (1)使用'GridFS'进行图片文件的保存与读取 7.使用 Fabric : (1)配置相关脚本,实现一键部署 8.使用 NodeJS 的 Gulp 命令 : (1)配置本地启动的相关服务,实现一键启动或停止 (2)编译静态文件,防止浏览器缓存js问题 (3)实时监听本地调试页面功能 9.使用的工具和服务:XCode 工具、WebDriverAgent 服务 ( WDA 服务 )
About
iOS Appium 自动化测试框架
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published