当前位置:   article > 正文

pytest多任务并发执行测试用例_多任务下发测试

多任务下发测试

pytest实现多任务并发执行测试用例

需要再conftest.py中重写pytest的相关的钩子函数

def pytest_addoption(parser):
    """执行测试用例时添加命令行参数"""
    group = parser.getgroup("pytest-thread")
    group.addoption("--current",default=None,help="运行的线程数量")
    group.addoption("--runTask", default=None, help="运行的任务函数")
  • 1
  • 2
  • 3
  • 4
  • 5

通过协程gevent实现并发执行测试用例函数代码

def run_test(items):
    # 执行测试用例的函数
    for item in items:# items 是一个包含用例的列表
        # 执行单条用例
        item.ihook.pytest_runtest_protocol(item=item,nextitem=None)
def pytest_runtestloop(session):
    """pytest用例执行的钩子函数
    """
    # 获取命令行传入的参数
    count = session.config.getoption("--current")

    run_task = session.config.getoption("--runTask")

    # 根据参数拆分并发执行任务函数
    if run_task=='mod':
        # 对用例以模块为单位进行拆分
        # [{"模块1":[用例1,用例2,用例3]},{"模块2":[用例1,用例2,用例3]}]
        cases={}
        for item in session.items:
            # 获取用例所属的模块
            module = item.module
            # 判断模块在列表中是否存在
            if cases.get(module):
                # 如果存在,直接将用例加进去
                cases['module'].append(item)
            else:
                # 如果没有,以模块作为key,用例作为value保存进去
                cases['module']=[item]
        # 以模块为单位并发执行测试用例,一个模块一个并发
        gs=[]
        for case_ in cases.values():
            g = gevent.spawn(run_test,case_)
            gs.append(g)
        gevent.joinall(gs)
    return True

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

执行用例

import pytest

pytest.main(['--current=3','--runTask=mod'])
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/649471
推荐阅读
  

闽ICP备14008679号