将来自多台机器的诱惑报告合并为一个报告而不重试



我请您咨询以下关于诱惑的问题:我使用jenkins+pytest来运行测试。相同的测试在几个虚拟机上运行,这些机器的操作系统(不同的linux发行版(和测试环境不同。运行测试后,我想将所有机器的结果合并到一个报告中。-问题来了——如果我把所有的报告放在一个目录中并生成一个报告,那么来自不同机器的结果将被视为同一测试的重新运行,并合并为一个。我该怎么绕过这个?以便不被组合,并且可以以某种方式从哪台机器中找出哪个结果。谢谢

我已经通过覆盖测试/套件的名称来解决这个问题。这意味着你必须进行一些代码实现,使用之前的监听器,在那里你可以获得当前的测试名称并覆盖它。通过OS+Browser或其他唯一的方法设置测试名称。

当您组合报告时,它们将是唯一的并正确显示。

我在behavior中遇到了类似的问题,Allure将每个并行构建视为第一个构建的重试。我意识到这与pytest不同,但也许它会有所帮助。

我受到了前面答案的启发,开始进行实验。通过更改特性中的场景名称,我能够使Allure将每个并行构建识别为单独的测试。我通过在environment.py文件中添加一个before_feature方法来实现这一点,该方法只需将主机名添加到该功能中的每个场景名称中:

def before_feature(context, feature):
for scenario in feature.scenarios:
scenario.name = f'[{socket.gethostname()}] {scenario.name}'

最初,我试图在before_scenario中直接更改scenario.name,但在诱惑中似乎没有效果。

我使用pytest_addoption来定义用于捕获设备名称的附加参数,并在conftest.py中添加pytest_collection_modifyitems来修改测试/套件的名称。

def pytest_addoption(parser):
parser.addoption("--udid", action="store", help="UDID of the device")

def pytest_collection_modifyitems(config, items):
for item in items:
udid = config.getoption("--udid")
item.name = udid
item._nodeid = udid

最新更新