YouQu

有趣(YouQu),一个使用简单且功能强大的自动化测试基础框架。

[![GitHub issues](https://img.shields.io/github/issues/linuxdeepin/youqu?color=%23F79431)](https://github.com/linuxdeepin/youqu/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/linuxdeepin/youqu?color=%23F79431)](https://github.com/linuxdeepin/youqu/pulls) [![GitHub Discussions](https://img.shields.io/github/discussions/linuxdeepin/youqu?color=%23F79431)](https://github.com/linuxdeepin/youqu/discussions) [![PyPI](https://img.shields.io/pypi/v/youqu?style=flat&logo=github&link=https%3A%2F%2Fpypi.org%2Fproject%2Fyouqu%2F&color=%23F79431)](https://pypi.org/project/youqu/) ![PyPI - License](https://img.shields.io/pypi/l/youqu?color=%23F79431) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/youqu?color=%23F79431) ![Static Badge](https://img.shields.io/badge/UOS%2FDeepin/Ubuntu/Debian-Platform?style=flat&label=OS&color=%23F79431) ![Static Badge](https://img.shields.io/badge/Linux-Platform?style=flat&label=Platform&color=%23F79431) [![Downloads](https://static.pepy.tech/badge/youqu/week)](https://pepy.tech/project/youqu) [![Downloads](https://static.pepy.tech/badge/youqu/month)](https://pepy.tech/project/youqu) [![Downloads](https://static.pepy.tech/badge/youqu)](https://pepy.tech/project/youqu) [![Hits](https://hits.sh/github.com/linuxdeepin/youqu.svg?style=flat&label=Github_Hits&color=blue)](https://github.com/linuxdeepin/youqu) [![Hits](https://hits.sh/linuxdeepin.github.io/youqu.svg?style=flat&label=GitHub_Pages_Hits&color=blue)](https://linuxdeepin.github.io/youqu) [![Hits](https://hits.sh/pypi.org/project/youqu.svg?style=flat&label=PyPI_Hits&color=blue)](https://pypi.org/project/youqu/) --- GitHub / Gitee 在线文档 --- 有趣(YouQu)是深度公司开源的一个用于 Linux 操作系统的自动化测试框架,支持多元化元素定位和断言、用例标签化管理和执行、强大的日志和报告输出等特色功能,同时完美兼容 X11、Wayland 显示协议,环境部署简单,操作易上手。 ## 有趣(YouQu)能做什么 - [x] Linux 桌面应用 UI 自动化测试 - [x] Linux 桌面应用 DBus/Gsettings 接口自动化测试 - [x] 命令行自动化测试 - [x] HTTP 接口自动化测试 - [x] Web UI 自动化测试 - [ ] Linux 桌面应用性能自动化测试
点击查看爱上 “有趣(YouQu)” 的 N 个理由
## 安装使用 从 PyPI 安装: ```shell $ sudo pip3 install youqu ``` 创建项目: ```shell $ youqu-startproject my_project ``` 如果 `youqu-startproject` 后面不加参数,默认的项目名称为:`youqu` ; 安装依赖: ```shell $ cd my_project # 使用的默认密码是 1 ,您可以修改配置文件 setting/globalconfig.ini 里面的 PASSWORD 配置项 $ bash env.sh # 也可以使用 -p 选项传入密码 $ bash env.sh -p ${my_password} ``` ------------------------------- **【APP工程】** 如果您已经有一个可用的 `APP` 工程,将应用库放到基础框架下 `apps` 目录下,像这样: ```shell my_project ├── apps │ ├── autotest_deepin_music # 应用库 ... ``` 如果您还没有 `APP` 工程,建议使用框架提供的脚手架功能创建一个全新的 `APP` 工程。 ## 创建工程 创建一个 APP 工程: ```shell $ youqu manage.py startapp autotest_deepin_some ``` 这样在 `apps` 目录下会创建一个子项目工程 `autotest_deepin_some`,同时新建好工程模板目录和模板文件: ```shell apps └── autotest_deepin_some    ├── case    │   ├── assert_res    │   │   └── readme    │   ├── base_case.py    │   └── __init__.py    ├── config.ini    ├── config.py    ├── conftest.py    ├── control    ├── deepin_some_assert.py    ├── deepin_some.csv    ├── __init__.py    └── widget    ├── base_widget.py    ├── case_res    │   └── readme    ├── deepin_some_widget.py    ├── __init__.py    ├── other.ini    ├── other_widget.py    ├── pic_res    │   └── readme    └── ui.ini ``` `autotest_deepin_some` 是你的工程名称,比如:`autotest_deepin_music` ; 在此基础上,你可以快速的开始你的 AT 项目,更重要的是确保创建工程的规范性。 运行 ------- ### 1. 工作空间 在项目根目录下有一个 `manage.py` ,它是一个执行器入口,提供了本地执行、远程执行等的功能。 ### 2. 本地执行 ```shell $ youqu manage.py run ``` #### 2.1. 命令行参数 通过命令行参数配置参数,使用 `-h` 或 `--help` 可以查看所有支持的命令行参数: ```shell $ youqu manage.py run -h ``` 在一些 CI 环境下使用命令行参数会更加方便: ```shell $ youqu manage.py run --app apps/autotest_deepin_music --keywords "xxx" --tags "xxx" ``` 更多参数请查看【[命令行参数](https://linuxdeepin.github.io/youqu/%E6%A1%86%E6%9E%B6%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D/%E6%89%A7%E8%A1%8C%E7%AE%A1%E7%90%86%E5%99%A8/#21)】 #### 2.2. 配置文件 通过配置文件配置参数 在配置文件 `setting/globalconfig.ini` 里面支持配置对执行的一些参数进行配置,配置完成之后,直接在命令行执行 `manage.py` 就好了。 详细配置项请查看【[配置项](https://linuxdeepin.github.io/youqu/%E6%A1%86%E6%9E%B6%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D/%E6%89%A7%E8%A1%8C%E7%AE%A1%E7%90%86%E5%99%A8/#22)】 ### 3. 远程执行 远程执行就是用本地作为服务端控制远程机器执行,远程机器执行的用例相同; 使用 `remote` 命令: ```shell $ youqu manage.py remote ``` #### 3.1. 远程多机器分布式异步执行 ![](https://pic.imgdb.cn/item/64f6d3c0661c6c8e549f8ca5.png) 多机器分布式异步执行就是由本地 YouQu 作为服务端,控制远程 N 台机器执行相同的用例,执行完之后所有测试机的测试结果会返回给服务端 report 目录下; 远程执行同样通过配置文件 `setting/globalconfig.ini` 进行用例相关配置; 需要重点说一下远程执行时的测试机信息配置,在配置文件 `setting/remote.ini` 里面配置测试机的用户名、IP、密码。 ```ini ;=============================== CLIENT LIST ===================================== ; 测试机配置列表 ;[client{number}] ;测试机别名,有多少台测试机就写多少个 client,别名必须包含 client 字符,且不能重复。 ;user = ;测试机 user ;ip = ;测试机 ip ;password = 1 ;测试机的密码, 可以不配置此项,默认取 CLIENT_PASSWORD 的值; ;如果你所有测试机密码都相同,那么只需要配置 CLIENT_PASSWORD 就可以了 ;================================================================================= [client1] user = uos ip = 10.8.15.xx [client2] user = uos ip = 10.8.15.xx [client3] user = uos ip = 10.8.11.xx ``` 有多少台机器就像这样参考上面的格式写就行了。 然后在命令行: ```shell $ youqu manage.py remote ``` 这样运行是从配置文件去读取相关配置。 如果你不想通过配置文件,你仍然通过命令行参数进行传参, 以下为 `python3 manage.py remote` 提供的一些参数选项: ```coffeescript -h, --help show this help message and exit -c CLIENTS, --clients CLIENTS 远程机器的user@ip:password,多个机器用'/'连接,如果password不传入,默认取sett ing/remote.ini中CLIENT_PASSWORD的值,比如: uos@10.8.13.xx:1 或 uos@10.8.13.xx -s, --send_code 发送代码到测试机(不含report目录) -e, --build_env 搭建测试环境,如果为yes,不管send_code是否为yes都会发送代码到测试机. -p CLIENT_PASSWORD, --client_password CLIENT_PASSWORD 测试机密码(全局) -y PARALLEL, --parallel PARALLEL yes:表示所有测试机并行跑,执行相同的测试用例;no:表示测试机分布式执行,服务端会根据收集到的测试用例自 动分配给各个测试机执行。 ``` ==除了这些特有参数以外,它同样支持本地执行的所有参数;== 在命令行这样运行: ```shell $ youqu manage.py remote -a apps/autotest_deepin_music -c uos@10.8.13.x3/uos@10.8.13.x4 -k "xxx" -t "xxx" ``` 所有用例执行完之后会在 `report` 目录下回收各个测试机执行的测试报告。 注意:如果远程机器没有搭建自动化测试环境,记得加上参数 `-e` : ```shell $ youqu manage.py remote -a ... -e ``` 执行前确保远程机器已经开启了 ssh 服务,否则会提示无法连接,如果没有开启,请手动开启: ```shell $ sudo systemctl restart ssh $ sudo systemctl enable ssh ``` 配置文件其他相关配置项详细说明,请查看配置文件中的注释内容。 #### 3.2. 远程多机器分布式异步负载均衡执行 多机器分布式异步负载均衡执行也是用本地作为服务端控制远程机器执行,但远程机器执行的用例不同,而是所有远程机器执行的用例之和,为你想要执行的用例集; 似乎有点难以理解,我用大白话举例描述下: 服务端想要执行 10 条用例,现在远程机器有 5 台,然后服务端就先拿着第 1 条用例给远程 1 号机执行,拿第 2 条用例给远程 2 号机执行...,如此循环直到所有用例执行完,这就是负载均衡执行。 ![](https://pic.imgdb.cn/item/64f6d694661c6c8e54a1025b.png) 使用方法和前面一样,只是需要增加一个参数 `--parallel`: ```shell $ youqu manage.py remote -a ... --parallel no ``` ## 贡献者 [贡献文档](https://github.com/linuxdeepin/youqu/blob/master/CONTRIBUTING.md) --8<-- "docs/contributors.html" ## 开源许可证 有趣 在 [GPL-2.0-only](https://github.com/linuxdeepin/youqu/blob/master/LICENSE) 下发布。 ------------ [__Github Star History__]() [![Stargazers over time](https://starchart.cc/linuxdeepin/youqu.svg)](https://starchart.cc/linuxdeepin/youqu) [__Gitee Info__]() [![deepin-community/youqu](https://gitee.com/deepin-community/youqu/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b)](https://gitee.com/deepin-community/youqu)