首页 > 解决方案 > python 每次测试后如何“重新加载”我的配置文件?

问题描述

我有两个测试,我试图从同一个 myconfig.py 文件中导入东西。但是我需要在每次测试后更改 myconfig.py 中的一些变量,以便下一次可以使用新的。有什么可能的方法吗?

我已经有了重写信息的功能并且它可以正常工作,但是两个测试都导入了 myconfig.py 的第一个版本。

我尝试使用固定装置,但它不起作用。我还尝试在每次启动之前运行/执行 myconfig.py,也没有帮助。

我使用两个相同的小测试,将它们作为一个名为test_package.

from myconfig import url, file_name, line_index
from test_package.functions_filee import upgrade_number
from test_package.pages.my_page import MyPageObject
from file_where_info_should be_rewritten import phone_number

def test_rewrite_number(self, browser):
    my_page = MyPageObject(browser, url)
    my_page.go_to_site()
    my_page.input_phone_number(phone_number)
    upgrade_number(file_name, line_index, phone_number)

upgrade_number功能代码:

def upgrade_number(file_name, line_index, phone_number):
    with open(file_name, 'r+') as f:
        lines = f.readlines()
        new_number = str(int(phone_number) + 1)
        new_str = f"phone_number = '{new_number}'\n"
        lines[line_index] = new_str 
        f.seek(0)
        f.writelines(lines)

应该重写信息的文件仅包含一行:phone_number = "1111111111"

所以基本上我希望第一个测试作为电话号码导入1111111111,然后将其增加到1111111112第二个测试可以1111111112用作其测试数据。

编辑:我是这样做的

import sys
import importlib

importlib.reload(sys.modules['dynamic_vars'])

from dynamic_vars import *

最终我放弃了这种为每次测试制作新电话号码的方法,但也许它对任何人都有帮助

标签: pythonpytest

解决方案


对此的经典模式称为测试设置。在 pytest 中setup_method,您可以实现它来重新加载您的配置,并且它将在每个测试执行之前完成。

同样,您可以使用teardown_method在每次测试后运行代码。您的测试还可以设置一个类变量,以便每次调用setup_methodteardown_method知道要使用哪个值。

你不应该做你在这里解释的事情。这使得测试相互依赖,这是一个非常有问题的反模式。相反,让每个测试设置在一开始就明确地满足它的需要。因此,如果第二个测试需要1111111112作为其输入数据,请在测试开始时指定它 - 通过调用将适当准备配置的实用程序函数。

这不仅使测试独立 - 它还使它们更具可读性,因为在测试开始时很清楚场景是什么。


推荐阅读