📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
在自动化测试过程中,将测试结果发送到第三方系统以便追踪和分析是一个常见的需求。为了解决这个问题,我采用了pytest提供的钩子函数 pytest_runtest_makereport 来post测试结果。由于每个用例执行完都会调用这个钩子函数,因此每个用例执行完只需要在钩子函数中加入post测试结果的逻辑即可。
挑战与解决方案
在这个过程中,我面临了一个主要挑战:为了使结果更具观赏性,需要带上很多变量。在使用自动化测试时,我们常常需要在断言失败后获取相关变量值,以便生成详细的测试报告。然而,默认情况下,框架自带的 assert 断言在用例失败时才会捕捉并输出变量信息。这导致在用例执行过程中,如果不自定义处理机制,变量信息的获取和展示会受到限制。
为了更好地获取这些变量,并确保它们在测试结果中能完美展示,我决定使用自定义断言函数 custom_assert,并结合Python的 inspect 库来实现这一目标。
实现步骤
1. 使用 pytest_runtest_makereport 钩子函数
首先,我在 conftest.py 文件中定义了 pytest_runtest_makereport 钩子函数,以便在每个测试用例执行完后post结果到第三方系统。
pytest_runtest_makereport代码:
import pytest
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
global assert_data
if call.when == 'call':
.
.
.
# 获取实际扫描到的值
if rep.outcome in ["failed", "passed"]:
rep.assertion_data = get_assertion_data()
# 根据不同类型用例获取实际值
name = rep.assertion_data['name']
age = rep.assertion_data['age']
.
.
result = {}
# POST结果到第三方系统
post_to_third_party(result)
2. 定义 custom_assert 自定义断言函数
接着,我定义了 custom_assert 函数,该函数可以捕捉和输出更详细的断言信息。
custom_assert代码:
import inspect
# 用于存储断言条件数据,每个测试用例执行后记得要重置
assertion_data = {}
def custom_assert(condition, message):
frame = inspect.currentframe().f_back
code = frame.f_code
call = inspect.getframeinfo(frame)
context = call.code_context[0].strip()
# 获取本地变量的值
local_vars = frame.f_locals
for var, value in local_vars.items():
if var not in assertion_data:
assertion_data[var] = repr(value)
if not condition:
# 生成详细的断言信息
message = msg or f"Assertion failed in {code.co_filename} at line {call.lineno}: {context}"
raise AssertionError(message)
def get_assertion_data():
return assertion_data.copy()
def clear_assertion_data():
assertion_data.clear()
3. 在测试用例中使用 custom_assert
在实际的测试用例中,我使用 custom_assert 函数进行断言,以捕获更详细的变量信息。
def test_case001():
""" 测试逻辑 这里以比较a b为例"""
a = 5
b = 10
custom_assert(a + b == 15, "Sum calculation failed")
通过这种方式,无论测试用例是通过还是失败,我都能捕获并输出详细的变量信息,并将这些信息通过 pytest_runtest_makereport 钩子函数发送到第三方系统,保证结果更加直观和详细。
结语
在自动化测试过程中,详细和准确的测试结果能够极大地提升分析和调试的效率。通过自定义断言函数 custom_assert 和使用 inspect 库,我们不仅能获取更多有用的信息,还能确保这些信息在测试结果中得到充分展示。这一方案在实际应用中取得了很好的效果,希望对其他同行有所启发和帮助。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】