Skip to content
📔 阅读量:

执行管理器 - manage.py

YouQu 的执行管理器 manage.py 提供了丰富的配置和命令行参数,可用于本地用例驱动执行、远程用例驱动执行、CSV 文件管理、PMS 与本地 CSV 文件标签关联管理、脚手架等功能;

如何使用

【命令行使用】

所有功能的驱动执行都是通过 manage.py 进行的,它是全局的入口文件,后面提到的一些命令行参数也都默认是在 manage.py 之后添加使用;

你可以使用 -h--help 查看它的帮助:

shell
$ youqu manage.py -h

这样可以查看它支持的子命令;

然后再通过子命令 -h--help 查看子命令的帮助,以子命令 run 举例:

shell
$ youqu manage.py run -h

这样可以查看到子命令支持的各项参数及参数使用说明。

【配置文件】

配置文件在 setting 目录下,绝大部分的配置项均在 globalconfig.ini 文件中,为了方便描述后面经常提到的“配置文件”、“配置项”几乎都是指的 setting/globalconfig.ini

你可以在配置文件中每一个配置项上面看到该配置项的使用说明;

在后面的一些功能描述中有些为了方面描述只提到了配置项的使用说明,并没有再补充其对应的命令行参数,但是几乎所有的命令行参数都对应提供了配置文件配置项;

注意

命令行参数的优先级高于配置文件配置,也就是说通过命令行参数指定了对应的参数,配置文件中不管是否配置均不生效。

下面介绍两个常用的用例执行的功能:

本地执行

本地执行子命令为:run

shell
$ youqu manage.py run

1. 命令行参数

通过命令行参数配置参数

以下为 youqu manage.py run 提供的一些常用的参数选项:

coffeescript
  -h, --help            show this help message and exit
  -a APP, --app APP     应用名称:apps/autotest_deepin_music
                        autotest_deepin_music
  -k KEYWORDS, --keywords KEYWORDS
                        用例的关键词,支持and/or/not逻辑组合
  -t TAGS, --tags TAGS  用例的标签,支持and/or/not逻辑组合
  --rerun RERUN         失败重跑次数
  --record_failed_case RECORD_FAILED_CASE
                        失败录屏从第几次失败开始录制视频
  --clean {yes,}        清理环境
  --report_formats REPORT_FORMATS
                        测试报告格式
  --max_fail MAX_FAIL   最大失败率
  --log_level LOG_LEVEL
                        日志输出级别
  --timeout TIMEOUT     单条用例超时时间
  --resolution RESOLUTION
                        检查分辨率
  --debug DEBUG         调试模式
  --noskip {yes,}       csv文件里面标记了skip跳过的用例不生效
  --ifixed {yes,}       fixed不生效,仅通过skip跳过用例
  --send_pms {,async,finish}
                        数据回填
  --task_id TASK_ID     测试单ID
  --trigger {,auto,hand}
                        触发者
  -f CASE_FILE, --case_file CASE_FILE
                        根据文件执行用例
  --deb_path DEB_PATH   需要安装deb包的本地路径
  -u PMS_USER, --pms_user PMS_USER
                        pms 用户名
  -p PMS_PASSWORD, --pms_password PMS_PASSWORD
                        pms 密码
  --suite_id SUITE_ID   pms 测试套ID
  --pms_info_file PMS_INFO_FILE
                        pms 信息文件
  --top TOP             过程中记录top命令中的值
  --lastfailed          仅执行上次失败用例
  --duringfail          测试过程中立即显示报错
  --repeat REPEAT       指定用例执行次数
  --project_name PROJECT_NAME
                        工程名称(写入json文件)
  --build_location BUILD_LOCATION
                        构建地区(写入json文件)
  --line LINE           执行的业务线(写入json文件)
  --autostart AUTOSTART
                        重启类场景开启letmego执行方案

在一些 CI 环境下使用命令行参数会更加方便:

shell
$ youqu manage.py run --app autotest_deepin_music --keywords "xxx" --tags "xxx"

--app 入参还支持 apps/autotest_xxx 写法,方便在输入命令的过程中使用补全,下面的远程执行功能同样支持。

2. 配置文件

通过配置文件配置参数

在配置文件 setting/globalconfig.ini 里面支持配置对执行的一些参数进行配置;

配置完成之后,直接在命令行执行 manage.py 就好了。

shell
$ youqu manage.py run

远程执行

远程执行就是用本地作为服务端控制远程机器执行,远程机器执行的用例相同;

使用 remote 命令:

shell
$ youqu manage.py remote

1. 多机器分布式异步执行

多机器分布式异步执行就是由本地 YouQu 作为服务端,控制远程 N 台机器执行相同的用例,执行完之后所有测试机的测试结果会返回给服务端 report 目录下;

远程执行同样通过配置文件 setting/globalconfig.ini 进行用例相关配置;

然后在命令行:

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 autotest_deepin_music -c uos@10.8.13.xx/uos@10.8.13.xx -k "xxx" -t "xxx"

所有用例执行完之后会在 report 目录下回收各个测试机执行的测试报告。

注意,如果远程机器没有搭建自动化测试环境,记得加上参数 -e

shell
$ youqu manage.py remote -a autotest_deepin_music -c uos@10.8.13.xx/uos@10.8.13.xx -k "xxx" -t "xxx" -e

执行前确保远程机器已经开启了 ssh 服务,否则会提示无法连接,如果没有开启,请手动开启:

shell
$ sudo systemctl restart ssh
$ sudo systemctl enable ssh

配置文件其他相关配置项详细说明,请查看配置文件中的注释内容。

2. 多机器分布式异步负载均衡执行

多机器分布式异步负载均衡执行也是用本地作为服务端控制远程机器执行,但远程机器执行的用例不同,而是所有远程机器执行的用例之和,为你想要执行的用例集;

似乎有点难以理解,我用大白话举例描述下:

服务端想要执行 10 条用例,现在远程机器有 5 台,然后服务端就先拿着第 1 条用例给远程 1 号机执行,拿第 2 条用例给远程 2 号机执行...,如此循环直到所有用例执行完,这就是负载均衡执行。

使用方法和前面一样,只是需要增加一个参数 --parallel

shell
$ youqu manage.py remote -a autotest_deepin_music -c uos@10.8.13.xx/uos@10.8.13.xx -k "xxx" -t "xxx" --parallel no

用例驱动方式

指定执行某一个用例

python
# test_xxx_001.py

class TestCase:
    
    def test_xxx_001_1(self):
        ...
        
    def test_xxx_001_2(self):
        ...

仅驱动执行这一条用例:

shell
youqu manage.py run -k test_xxx_001_1

如果你想执行这个 py 文件中所有的用例:

shell
youqu manage.py run -k test_xxx_001

指定某个目录执行

shell
autotest_my_app
├── case
│   ├── base_case.py
│   ├── __init__.py
│   ├── smoke
│  	├── test_mycase_001.py
│  	└── test_mycase_002.py

驱动执行 smoke 目录下所有用例:

shell
youqu manage.py run -k smoke

执行某个APP工程的所有用例

shell
youqu manage.py run -a apps/autotest_my_app

根据关键词执行

执行包含关键词的用例,关键词可以是用例对象中的任意字符,且大小写不敏感

模块名称、py 文件名称、类名、函数名等等都可以做为关键词

比如:apps/autotest_deepin_music/case/test_music_001.py::TestMusic::test_music_001

整个字符串中可以任意截取字符作为关键词。

关键词驱动支持 and/or/not 表达式。

shell
youqu manage.py run -k "music and deepin"

根据标签执行

基于 YouQu 特有的 CSV 文件管理的标签,也可以是传统的 Pytest 标签:@pytest.mark.L1

标签驱动支持 and/or/not 表达式。

shell
youqu manage.py run -t "L1 or smoke"

批量用例ID驱动执行

shell
youqu manage.py run -t "id1 or id2 or id3 or id4"

测试单驱动执行

shell
youqu manage.py run -a apps/autotest_xxx -u ut001234 -p my_password --task_id xxxx --send_pms async

测试套件驱动执行

shell
youqu manage.py run -a apps/autotest_xxx -u ut001234 -p my_password --suit_id xxxx --send_pms async

本地用例文件驱动执行

shell
youqu manage.py run -f test_suite.txt

test_suite.txt 中编写用例所在路径:

txt
apps/autotest_deepin_music/case/test_music_001.py::TestMusic::test_music_001
apps/autotest_deepin_music/case/test_music_002.py::TestMusic
apps/autotest_deepin_music/case/test_music_003.py
apps/autotest_deepin_music/case/test_music_004.py