# 自动化测试平台(后端) **Repository Path**: lengyao/rd-testing-platform ## Basic Information - **Project Name**: 自动化测试平台(后端) - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: https://www.shangguangroup.top/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 10 - **Created**: 2025-01-25 - **Last Updated**: 2025-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # rd-uitest-platform #### 体验地址 https://www.shangguangroup.top/ 账号:test 密码:123456 #### 项目介绍 本平台使用 Playwright 进行 Web 和 WAP 端的 UI 自动化测试,相较于 Selenium,Playwright 直接调用浏览器 API,不需要额外安装驱动,测试速度更快,占用内存更少,性能更优。对于 API 自动化测试,采用 requests 库,所有测试均通过 pytest 进行组织和执行。 #### 主要功能 1. UI 自动化测试:使用 Playwright 对 Web 和 WAP 端进行快速且高效的 UI 自动化测试。 2. API 自动化测试:使用 requests 对 API 接口进行稳定的自动化测试。 3. 测试报告:测试完成后,自动生成 Allure 测试报告,便于分析测试结果。 4. 定时任务:支持设置定时任务,自动执行测试用例,适应长期持续集成测试的需求。 5. 错误重试:使用 pytest-rerunfailures,定时任务执行失败时自动重试,确保临时问题不影响测试结果。 6. 并发执行:使用 pytest-xdist,对于大型项目,支持并发执行测试用例,极大提升测试效率。 7. 错误通知:测试完成后,如果发现错误,可以自动将测试报告发送到 钉钉 或 企业微信群,实现问题的实时跟踪。 8. Jenkins 等集成工具支持:系统可以集成 Jenkins 等 CI/CD 工具,提供 /api/trigger_execute_case 接口,上线完成后可通过该接口触发自动化测试,并将结果发送到企业微信或钉钉群组。 #### 技术栈 1. Playwright:Web 和 WAP UI 自动化测试。 2. requests:API 接口自动化测试。 3. pytest:测试框架。 4. pytest-rerunfailures:失败用例自动重试。 5. pytest-xdist:并发执行测试用例。 6. Allure:生成测试报告。 7. Fast API:提供异步接口服务。 8. 钉钉 / 企业微信:集成测试结果通知。 9. aiomysql:数据库,用于存储测试数据和结果。 10. AsyncIOScheduler:定时任务调度器。 #### 环境要求 - Python 3.8+ - MySQL 5.7+ #### 目录结构 ``` rd-uitest-platform-master/ ├── app.py # FastAPI应用入口 ├── websocket_app.py # Websocket服务 ├── config.py # 项目配置文件 ├── conftest.py # pytest配置文件 ├── sql.py # 数据库操作封装 ├── query_scheduled_tasks.py# 定时任务调度 ├── api_method.py # API业务逻辑 ├── wechat_dingding_bot_api.py # 通知集成 ├── tests/ # 测试用例目录 │ ├── test_01.py # UI测试用例 │ └── test_02.py # API测试用例 ├── log/ # 日志目录 └── README.md # 项目说明文件 ``` #### 安装教程 1. 服务器中安装谷歌浏览器 ```sh playwright install chromium ``` 2. alluer安装 https://blog.csdn.net/zl6605781/article/details/126021353 3. 服务器需要安装Redis (Ubuntu) ```sh sudo apt update sudo apt install redis-server # 安装 sudo systemctl status redis # 查看服务状态 sudo systemctl enable redis # 设置开机自启 ``` 4. 在项目的根目录下启动 ```sh # 启动后端接口 nohup uvicorn app:app --host 0.0.0.0 --port 5004 --workers 4 > ./log/app.log 2>&1 & nohup uvicorn websocket_app:app --host 0.0.0.0 --port 5005 --workers 1 > ./log/websocket_app.log 2>&1 & # 启动定时任务脚本 nohup python3 query_scheduled_tasks.py > ./log/scheduled_tasks.log 2>&1 & ``` #### 需要注意的地方 1. 修改配置文件config.py 2. 确保测试报告存放目录存在:/home/ui-testreports/uitest-platform/allure-results,如需修改,请修改涉及文件api.method.py、query_scheduled_tasks.py。 3. nginx服务配置示例: ```sh server { listen 80; server_name www.shangguangroup.top; # 将 HTTP 请求重定向到 HTTPS return 301 https://$host$request_uri; } server { # 监听 443 端口(HTTPS)并指定域名 listen 443 ssl; server_name www.shangguangroup.top; # SSL 证书路径 ssl_certificate /etc/letsencrypt/live/www.shangguangroup.top/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.shangguangroup.top/privkey.pem; # 启用 TLS 1.2 和 TLS 1.3,确保加密协议的安全性 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; # 优先使用服务器端的加密套件 # SSL 优化配置 ssl_session_cache shared:SSL:10m; # 共享 SSL 会话缓存,减少握手次数 ssl_session_timeout 10m; # SSL 会话缓存有效时间 ssl_ciphers HIGH:!aNULL:!MD5; # 禁用弱加密套件 ssl_stapling on; # 启用 OCSP Stapling 提高握手效率 ssl_stapling_verify on; # 验证 OCSP Stapling 的响应 resolver 8.8.8.8 8.8.4.4 valid=300s; # 指定 DNS 解析器 resolver_timeout 5s; # DNS 解析超时时间 # 慢速客户端保护,避免长时间占用连接 client_body_timeout 10s; # 客户端发送请求体的超时时间 client_header_timeout 10s; # 客户端发送头部的超时时间 keepalive_timeout 60s; # 长连接保持时间 # 配置前端静态资源目录 location / { root /home/gitee/fe/fe-uitest-platform/dist; # 前端项目的静态资源路径 try_files $uri $uri/ /index.html; # 前端路由支持 SPA 应用 } # 配置后端 API 的反向代理 location /api/ { proxy_pass http://127.0.0.1:5004; # 代理到后端服务(Uvicorn 或 Gunicorn) proxy_http_version 1.1; # 使用 HTTP 1.1,支持长连接 proxy_set_header Host $host; # 保留原始主机头 proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链 proxy_set_header X-Forwarded-Proto $scheme; # 传递请求协议(HTTP/HTTPS) # 设置超时时间,防止后端阻塞 proxy_connect_timeout 60s; # 连接后端超时 proxy_read_timeout 600s; # 读取后端响应超时,测试用例运行时间较长 proxy_send_timeout 60s; # 发送请求到后端超时 # 配置缓冲,优化大响应数据 proxy_buffer_size 4k; # 单块缓冲区大小 proxy_buffers 4 32k; # 缓冲区数量和大小 proxy_busy_buffers_size 64k; # 忙缓冲区大小 } # 配置 WebSocket 的反向代理 location /api/ws/ { proxy_pass http://127.0.0.1:5005; # 代理到后端服务 proxy_http_version 1.1; # 使用 HTTP 1.1,支持长连接 proxy_set_header Upgrade $http_upgrade; # 支持 WebSocket 升级 proxy_set_header Connection "upgrade"; # 连接升级 proxy_set_header Host $host; # 保留原始主机头 proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实 IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理链 proxy_set_header X-Forwarded-Proto $scheme; # 传递请求协议(HTTP/HTTPS) # 设置超时时间,防止后端阻塞 proxy_connect_timeout 60s; # 连接后端超时 proxy_read_timeout 600s; # 读取后端响应超时 proxy_send_timeout 60s; # 发送请求到后端超时 } # 配置测试报告的静态文件路径 location /ui-testreports/ { alias /home/ui-testreports/; # 测试报告存放路径 expires 30d; # 缓存时间设置为 30 天 access_log off; # 关闭日志记录,减少磁盘 I/O } } ``` #### 使用示例 1. 先在项目列表新增项目,如果运行环境选择WEB、WAP新增成功后在功能列表里查询,如果运行环境选择API新增成功后在接口列表里查询。 ![输入图片说明](Example%20images/%E6%96%B0%E5%A2%9E%E9%A1%B9%E7%9B%AEimage.png) 2. 新增/编辑case里面的账号,是在账号列表里维护。 ![输入图片说明](Example%20images/%E9%80%89%E6%8B%A9%E8%B4%A6%E5%8F%B7image.png) 3.新增/编辑账号,如果类型选择UI,是在功能列表新增case的账号里选择,这里写的是cookies信息,如果类型选择的是API,是在接口列表新增case的账号里选择,这里写的是默认headers,对整个case生效,后续接口中如果再写headers相同的键,此键会替换成最新的。 ![输入图片说明](Example%20images/%E6%96%B0%E5%A2%9E%E8%B4%A6%E5%8F%B7image.png) 4.定时任务,可以选择报错后发送到企业微信或钉钉群;如果使用上线触发/api/trigger_execute_case 接口,需在这里配置报警通知。 ![输入图片说明](Example%20images/%E8%AE%BE%E7%BD%AE%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1image.png) 4.功能列表里新增case,所有的定位方式均使用page.locator()