🚀多任务

aomaker 提供了多线程和多进程两种方式来加速用例运行速度,提供了三种粒度来合理控制线程/进程worker,此外,多线程模式下,对allure 报告也做了优化,不会像pytest-parallel可能会出现无法正常生成测试报告的问题。

aomaker的运行流程如下:

启动后,

  1. 读取config.yaml 配置文件
  2. 加载配置文件
  3. 运行hooks.py中的自定义cli和hook(如果有)
  4. 开始根据cli指定的多任务方式和分配模式开启多线程/进程(如果在aomaker.yaml中指定了worker分配策略,将会以该策略进行分配)
  5. 在子进程/线程内启动pytest进行用例运行
  6. 所有子任务执行完成后,进行报告收集、聚合和环境清理,结束

多线程(推荐)

启动方式

aomaker提供了两种启动多线程:CLIrun.py

  1. cli
multi-run:
--mp, --multi-process
specifies a multi-process running mode.
--mt, --multi-thread  specifies a multi-thread running mode.
--dist-suite DIST_SUITE
specifies a dist mode for per worker.
--dist-file DIST_FILE
specifies a dist mode for per worker.
--dist-mark DIST_MARK [DIST_MARK ...]
specifies a dist mode for per worker.

命令行输入:arun --mt --dist-xxx xxx或者aomaker run --mt --dist-xxx

  1. run.py

run.py

from login import Login

from aomaker.runner import threads_run

if __name__ == '__main__':
    threads_run(['-m ehpc','-m hpc'], login=Login())
分配模式

为了更加精细和合理的去分配任务给子线程,aomaker提供了三种分配模式,颗粒度由细到粗分别是:

  1. 按标记分配

即按照pytest提供的mark功能来分配任务给子线程,比如说你希望将标记为demo1demo2demo3的三组case分配给三个不同子线程去跑,那么你需要做的就是:提前给用例打上对应mark,然后:

  • cli:arun --mt --dist-mark demo1 demo2 demo3
  • run.py:

run.py

from login import Login

from aomaker.runner import threads_run

if __name__ == '__main__':
    # 注意第一个参数传入的是列表
    threads_run(['-m demo1','-m demo2','-m demo3'], login=Login())

这样启动后,会开启三个子线程,去分别执行三组case。

注意:

1.每组mark下的case,一定要保证是独立的!

2.提供多少个mark,就开启多少个线程

  1. 按测试模块分配

即按照测试文件来分配任务给子线程,比如在testcases\test_api目录下有test_demo1.pytest_demo2.pytest_demo3.py三个测试模块,你希望这三个模块下的测试case分别由三个子线程接管执行,那么只需要:

  • cli:arun --mt --dist-file testcases\test_api,即告诉aomaker测试文件所在目录既可
  • run.py:

run.py

from login import Login

from aomaker.runner import threads_run

if __name__ == '__main__':
    # 注意第一个参数传入的是key名为path的字典
    threads_run({"path":"testcases/test_api"}, login=Login())

注意:

1.每个测试模块下的case,一定要保证是独立的!

2.指定目录下有多少个测试模块,就开启多少个线程

  1. 按测试套件分配

即按照测试目录来分配任务给子线程,比如在testcases\test_scenario目录下,有test_scenario1test_scenario2test_scenario3等三个测试目录,每个目录下还有若干测试模块,你希望这三个目录下的所有测试case分别由三个子线程接管执行,那么只需要:

  • cli:arun --mt --dist-suite testcases\test_scenario,即告诉aomaker测试套件所在目录既可
  • run.py:

run.py

from login import Login

from aomaker.runner import threads_run

if __name__ == '__main__':
    # 注意第一个参数传入的是字符串
    threads_run("testcases/test_scenario", login=Login())

注意:

1.每个测试模块下的case,一定要保证是独立的!

2.指定目录下有多少个测试套件,就开启多少个线程

多进程

aomaker目前暂时不支持在windows上创建多进程,linux、mac是完美支持的。

启动方式

aomaker同样提供了两种启动多进程:CLIrun.py

  1. cli
multi-run:
--mp, --multi-process
specifies a multi-process running mode.
--mt, --multi-thread  specifies a multi-thread running mode.
--dist-suite DIST_SUITE
specifies a dist mode for per worker.
--dist-file DIST_FILE
specifies a dist mode for per worker.
--dist-mark DIST_MARK [DIST_MARK ...]
specifies a dist mode for per worker.

命令行输入:arun --mp --dist-xxx xxx或者aomaker run --mp --dist-xxx **注意📢:使用mark分配模式时,需要加引号,如arun –mp –dist-mark “m1 m2 m3” **

  1. run.py

run.py

from login import Login

from aomaker.runner import processes_run

if __name__ == '__main__':
    processes_run(['-m ehpc','-m hpc'], login=Login())
分配模式

分配模式和多线程是一样的,区别是任务是分配给子进程,而不是子线程,具体分配模式请参考多线程。

worker策略分配配置

当我们的用例工程比较庞大时,需要同时并行很多不同的mark用例,如arun --mp --dist-mark "m1 m2 m3 ...m30",在cli里指定会导致命令很长。

因此,aomaker在v2.3.0推出了多任务worker策略配置,目的是支持更多标签并行执行,可以更灵活、更方便的去配置多任务分配策略,从而提升执行效率。

conf目录下有一个策略配置文件:aomaker.yaml

conf/aomaker.yaml

target: ['iaas','hpc']
marks:
  iaas:
      - iaas_image
      - iaas_volume
  hpc:
    - hpc_sw
    - hpc_fs
    

参数说明:

  • target:list,代表下方具体策略目标
  • marks:dict[dict],代表标签分类,每个分类下是一个列表,其中每个元素代表一个测试标签。

上述策略配置,最终会生产4个标签:iaas_image,iaas_volume,hpc_sw,hpc_fs,分配给4个worker同时执行。

注意📢:这里配置的每一个标签,一定是独立、不互为依赖的!

有时候,我们可能有不同的测试场景,需要跑不同的用例,即不同的标签,又不想每次重新配置。所以在此基础上,还支持多策略配置,具体用法如下:

conf/aomaker.yaml

target: ['iaas.smoke','hpc']
marks:
  iaas:
    smoke:
      - iaas_image
      - iaas_volume
    p2:
      - iaas_image_p2
      - iaas_volume_p2
      - iaas_network_p2
 
  hpc:
    - hpc_sw
    - hpc_fs
    

比如iaas分类下,想增加两组多任务策略:一组用来跑冒烟-smoke,一组用来跑p2级用例-p2。

当要跑iaas冒烟时,修改配置文件中的target为iaas.smoke;

当要跑iaas p2时,修改配置文件中的target为iaas.p2;

假如target为[‘iaas.p2’,’hpc’],最终会生产5个标签:iaas_image_p2,iaas_volume_p2,iaas_network_p2,hpc_sw,hpc_fs,分配给5个worker同时执行。

原有的三种分配模式依然支持,即--dist-mark,--dist-file,--dist-suite。

现在,当你想使用策略配置时,只需在命令行输入:

  • 多进程: aurn --mp
  • 多线程:arun --mt

即,当不输入分配模式参数时,会根据策略配置文件去获取任务分配给worker;

当输入分配模式参数时,会按照输入的参数去分配给woker。

results matching ""

    No results matching ""