我有一个非常简单的问题,一个简单的解决方案就在我无法触及的范围内。
我的设置:
A)驱动程序文件(运行测试脚本) B)连接文件(使用请求) C)参数文件
参数文件有6个变量,包括服务器IP,登录,传递等。
驱动程序文件有一个praser,它读取属性文件并填充空白。
driver.py paramtersfile.csv
这很好用。但是,我在参数文件中添加了一个PORT变量,需要看到B)连接文件。永远不会显式调用此连接文件,而只是将其导入到驱动程序文件中以获取其连接和cookie方法。
如何将解析后的变量(来自sys.argv)从paramtersfile.csv转移到Connections文件(或用于运行我的脚本的任何其他文件?
谢谢stackoverflow社区
编辑:
我使用显而易见的方法将参数传递给我需要的任何模块/文件的类(self.foo)。
我之前的问题是这个想法:
您可以执行类似
的操作loadproperties(propertiesfile)
然后从你可以做的任何其他python脚本
导入属性加载器
会将不可变属性列表加载到当前空间
看起来非常方便
url = propertyloader.url
而不是
类连接(主机,端口,传递,网址):
自我。网址 = 网址
loader = requests(安全,网址)
等等等等等等。似乎是一种在头衔的不同部分之间共享通用参数的无头痛方式。
也许还有办法(额外的信用问题)
答案 0 :(得分:0)
从driver.py文件中,将连接文件作为模块导入,并将已解析的参数传递给模块内的方法。像这样:
#===inside driver.py===
import connections
params = parseFile(sys.argv) #get parameters from the csv file that is passed to the command line
connections.connect(params) #pass them to whatever method you need to call from connections
编辑:听起来您并非以模块化方式编写代码。您应该停止在文件方面考虑您的代码,而是根据模块来考虑它们:您可以在许多不同的地方使用的可互换代码的各个部分。我看到你的设计的主要缺陷(如果我不正确理解,请原谅我)是你在用于创建连接对象的连接文件中硬编码一个值。我猜这是你的代码看起来像(或至少充分捕捉你的代码的精神):
#connections.py
MY_SERVER = ??? #WHAT DO I SET THIS TO?
class Connection:
def __init__(self):
self.server = MY_SERVER
def connect():
connection = Connection() #create a new connection object
上面的代码设计得不好,因为你定义了一个不应该在那里定义的变量MY_SERVER
!连接类不知道或不关心它应该使用什么服务器,它应该适用于任何服务器。那么你从哪里获得服务器变量?您通过构造函数或方法传递它。你可以这样做:
#connections.py
class Connection:
def __init__(self, server):
self.server = server
def connect(server):
connection = Connection(server) #create a new connection object with the server passed to the method
通过这种设计,Connection对象变得更加灵活。它基本上是说“我是一个可以处理任何服务器的连接对象。如果你想使用我,只需告诉我你想要使用什么服务器!”。
这样,在您的驱动程序文件中,您可以先从csv解析服务器,然后只需将方法connections.connect
传递给您想要的服务器即可!