问题
使用pytest钩子函数获取用例总数sum时,当不使用分布式执行时sum不为0,使用分布式时为0
def pytest_terminal_summary(terminalreporter, exitstatus, config):
total_case = terminalreporter._numcollected
原因
- xdist分布式类似于一主多从的结构,master机负责下发命令,控制slave机,slave机根据master机的命令执行特定测试任务
- 在xdist中,主是master,从是workers
- xdist会产生一个或多个workers,workers都通过master来控制
- 每个worker负责执行完整的测试用例集,然后按照master的要求运行测试,而master机不执行测试任务
作为主机的master是不会收集任何用例,都是交由worker进行收集,然后master只获取用例id列表。所以主进程中使用钩子函数中的属性_numcollected收集到的用例为0
def pytest_terminal_summary(terminalreporter, exitstatus, config):
total_case = terminalreporter._numcollected
解决
如果通过线程函数将多个子进程获取的用例数量返回,则有些麻烦,可以使用terminalreporter.stats
里的各项数据进行人工统计,便能更方便获取用例总数