python - 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 *
最终我放弃了这种为每次测试制作新电话号码的方法,但也许它对任何人都有帮助
解决方案
对此的经典模式称为测试设置。在 pytest 中setup_method
,您可以实现它来重新加载您的配置,并且它将在每个测试执行之前完成。
同样,您可以使用teardown_method
在每次测试后运行代码。您的测试还可以设置一个类变量,以便每次调用setup_method
或teardown_method
知道要使用哪个值。
但
你不应该做你在这里解释的事情。这使得测试相互依赖,这是一个非常有问题的反模式。相反,让每个测试设置在一开始就明确地满足它的需要。因此,如果第二个测试需要1111111112
作为其输入数据,请在测试开始时指定它 - 通过调用将适当准备配置的实用程序函数。
这不仅使测试独立 - 它还使它们更具可读性,因为在测试开始时很清楚场景是什么。
推荐阅读
- java - SonarQube 无法启动 Windows 10
- python - VS 代码无法导入已安装的模块
- sysinternals - Sysinternals Process Monitor (ProcMon):使用时间过滤器
- python-3.x - Python FileInput 奇怪的行为
- json - Wikipedia 的 API 在使用请求模块的 Alexa 技能中不起作用
- css - 工具提示:位置和全宽(同时)
- hadoop - 在 ubuntu 16.04 中安装单个 hadoop 1.x 时出错
- reactjs - 如果我的构建在 qa 中,我如何在 Jenkins 上查看?
- scala - 找不到 ScalaSig
- javascript - Bootstrap React 表格高度到屏幕底部