首页 新闻 会员 周边

统计测试结果session使用

0
悬赏园豆:200 [待解决问题]

@pytest.fixture(scope='function', autouse=True)
def author(request):
yield request.node.get_closest_marker('author').args[0]

@pytest.fixture(scope='session',autouse=False)

def pytest_sessionfinish(session, exitstatus):
session.count_cases = []
authors = {}
for item in session.items:
author = item.get_closest_marker('author')
print("author", author)
if author:
author_name = author.args[0]
if author_name not in authors:
authors[author_name] = [item]
else:
authors[author_name].append(item)
#作者的测试用例信息保存到count_casesr fixture
session.count_cases.append(authors)
print("count_cases", session.count_cases)

@pytest.fixture(scope='session',autouse=True)
def count_cases(request):
cases = request.session.count_cases
yield cases
allure.dynamic.title(f'测试用例作者统计信息')
for case in cases:
for author_name, items in case.items():
allure.dynamic.description(f'作者: {author_name}')
allure.dynamic.description(f'用例数: {len(items)}')
allure.dynamic.description(f'用例列表:')
for item in items:
allure.dynamic.description(f'- {item.nodeid}')

该部分代码是写在conftest.py文件上,在执行测试用例时报以下错误

求求各位大佬帮忙看一下是什么问题?

啊基米财的主页 啊基米财 | 初学一级 | 园豆:2
提问于:2023-03-21 11:27
< >
分享
所有回答(3)
0

错误提示是告诉你,session对象没有count_cases属性;要么就是真没有,要么就是你定义count_cases属性的方式有问题,导致没成功

三人乐乐 | 园豆:4819 (老鸟四级) | 2023-03-21 14:30
0

session.count_cases 这个没有找到
看看在哪定义的

ycyzharry | 园豆:25651 (高人七级) | 2023-03-28 19:27
0

根据您提供的错误信息,可以看到是因为 session 对象没有 count_cases 属性导致的,具体是因为 count_cases 这个 fixture 定义在了 pytest_sessionfinish 函数中,而 pytest_sessionfinish 函数是在整个测试会话结束后才会执行的。也就是说,当执行到 count_cases fixture 的时候,session 对象并没有执行完 pytest_sessionfinish 函数,所以 session 对象上没有 count_cases 属性,就会报错。

为了解决这个问题,可以将 count_cases fixture 定义在 pytest_sessionfinish 函数的外部,或者使用 pytest_sessionfinish 函数的返回值来传递统计信息,然后在 count_cases fixture 中获取这个返回值。具体的代码修改可以参考下面的示例:

@pytest.fixture(scope='function', autouse=True)
def author(request):
yield request.node.get_closest_marker('author').args[0]

@pytest.fixture(scope='session', autouse=True)
def pytest_sessionfinish(session, exitstatus):
authors = {}
for item in session.items:
author = item.get_closest_marker('author')
if author:
author_name = author.args[0]
if author_name not in authors:
authors[author_name] = [item]
else:
authors[author_name].append(item)
# 返回统计信息
return authors

@pytest.fixture(scope='session', autouse=True)
def count_cases(request):
# 获取统计信息
cases = request.getfixturevalue('pytest_sessionfinish')
allure.dynamic.title(f'测试用例作者统计信息')
for author_name, items in cases.items():
allure.dynamic.description(f'作者: {author_name}')
allure.dynamic.description(f'用例数: {len(items)}')
allure.dynamic.description(f'用例列表:')
for item in items:
allure.dynamic.description(f'- {item.nodeid}')
# 直接返回统计信息
return cases
在上述代码中,pytest_sessionfinish 函数返回的是作者的测试用例信息,这个信息会在 count_cases fixture 中被获取并打印出来。同时,这个信息也可以在其他地方被使用。

Technologyforgood | 园豆:5575 (大侠五级) | 2023-03-30 19:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册