执行管理器 - manage.py
YouQu
的执行管理器 manage.py
提供了丰富的配置和命令行参数,可用于本地用例驱动执行、远程用例驱动执行、CSV
文件管理、PMS
与本地 CSV
文件标签关联管理、脚手架等功能;
如何使用
【命令行使用】
所有功能的驱动执行都是通过 manage.py
进行的,它是全局的入口文件,后面提到的一些命令行参数也都默认是在 manage.py
之后添加使用;
你可以使用 -h
或 --help
查看它的帮助:
$ youqu manage.py -h
这样可以查看它支持的子命令;
然后再通过子命令 -h
或 --help
查看子命令的帮助,以子命令 run
举例:
$ youqu manage.py run -h
这样可以查看到子命令支持的各项参数及参数使用说明。
【配置文件】
配置文件在 setting
目录下,绝大部分的配置项均在 globalconfig.ini
文件中,为了方便描述后面经常提到的“配置文件”、“配置项”几乎都是指的 setting/globalconfig.ini 。
你可以在配置文件中每一个配置项上面看到该配置项的使用说明;
在后面的一些功能描述中有些为了方面描述只提到了配置项的使用说明,并没有再补充其对应的命令行参数,但是几乎所有的命令行参数都对应提供了配置文件配置项;
注意
命令行参数的优先级高于配置文件配置,也就是说通过命令行参数指定了对应的参数,配置文件中不管是否配置均不生效。
下面介绍两个常用的用例执行的功能:
本地执行
本地执行子命令为:run
$ youqu manage.py run
1. 命令行参数
通过命令行参数配置参数
以下为 youqu manage.py run
提供的一些常用的参数选项:
-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
环境下使用命令行参数会更加方便:
$ youqu manage.py run --app autotest_deepin_music --keywords "xxx" --tags "xxx"
--app
入参还支持 apps/autotest_xxx
写法,方便在输入命令的过程中使用补全,下面的远程执行功能同样支持。
2. 配置文件
通过配置文件配置参数
在配置文件 setting/globalconfig.ini 里面支持配置对执行的一些参数进行配置;
配置完成之后,直接在命令行执行 manage.py
就好了。
$ youqu manage.py run
远程执行
远程执行就是用本地作为服务端控制远程机器执行,远程机器执行的用例相同;
使用 remote
命令:
$ youqu manage.py remote
1. 多机器分布式异步执行
多机器分布式异步执行就是由本地 YouQu
作为服务端,控制远程 N 台机器执行相同的用例,执行完之后所有测试机的测试结果会返回给服务端 report 目录下;
远程执行同样通过配置文件 setting/globalconfig.ini
进行用例相关配置;
然后在命令行:
$ youqu manage.py remote
这样运行是从配置文件去读取相关配置。
如果你不想通过配置文件,你仍然通过命令行参数进行传参,
以下为 python3 manage.py remote
提供的一些参数选项:
-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:表示测试机分布式执行,服务端会根据收集到的测试用例自
动分配给各个测试机执行。
除了这些特有参数以外,它同样支持本地执行的所有参数;
在命令行这样运行:
$ 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
:
$ 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 服务,否则会提示无法连接,如果没有开启,请手动开启:
$ sudo systemctl restart ssh
$ sudo systemctl enable ssh
配置文件其他相关配置项详细说明,请查看配置文件中的注释内容。
2. 多机器分布式异步负载均衡执行
多机器分布式异步负载均衡执行也是用本地作为服务端控制远程机器执行,但远程机器执行的用例不同,而是所有远程机器执行的用例之和,为你想要执行的用例集;
似乎有点难以理解,我用大白话举例描述下:
服务端想要执行 10 条用例,现在远程机器有 5 台,然后服务端就先拿着第 1 条用例给远程 1 号机执行,拿第 2 条用例给远程 2 号机执行...,如此循环直到所有用例执行完,这就是负载均衡执行。
使用方法和前面一样,只是需要增加一个参数 --parallel
:
$ 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
用例驱动方式
指定执行某一个用例
# test_xxx_001.py
class TestCase:
def test_xxx_001_1(self):
...
def test_xxx_001_2(self):
...
仅驱动执行这一条用例:
youqu manage.py run -k test_xxx_001_1
如果你想执行这个 py 文件中所有的用例:
youqu manage.py run -k test_xxx_001
指定某个目录执行
autotest_my_app
├── case
│ ├── base_case.py
│ ├── __init__.py
│ ├── smoke
│ │ ├── test_mycase_001.py
│ │ └── test_mycase_002.py
驱动执行 smoke
目录下所有用例:
youqu manage.py run -k smoke
执行某个APP工程的所有用例
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
表达式。
youqu manage.py run -k "music and deepin"
根据标签执行
基于 YouQu 特有的 CSV 文件管理的标签,也可以是传统的 Pytest 标签:@pytest.mark.L1
标签驱动支持 and/or/not
表达式。
youqu manage.py run -t "L1 or smoke"
批量用例ID驱动执行
youqu manage.py run -t "id1 or id2 or id3 or id4"
测试单驱动执行
youqu manage.py run -a apps/autotest_xxx -u ut001234 -p my_password --task_id xxxx --send_pms async
测试套件驱动执行
youqu manage.py run -a apps/autotest_xxx -u ut001234 -p my_password --suit_id xxxx --send_pms async
本地用例文件驱动执行
youqu manage.py run -f test_suite.txt
test_suite.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