2017-04-24 28 views
2

有没有办法从文件中读取参数并将它们分配给setUpClass(cls)?如何从json文件读取参数并将它们放置在setUpClass(cls)

例子:

我有JSON文件,包含:

{ 
    "browserType" : "Chrome", 
    "ip" : "11.111.111.111", 
    "port" : 4444 
} 

装饰:

def params_from_file(file): 
    """Decorator to load params from json file.""" 
    def decorator(func_to_decorate): 
     @wraps(func_to_decorate) 
     def wrapper(self, *args, **kwargs): 
      with open(file, 'r') as fh: 
       kwargs = json.loads(fh.read()) 
       return func_to_decorate(self, **kwargs) 
     return wrapper 
    return decorator 

测试类:

class H5Tests(unittest.TestCase): 
    @classmethod 
    @params_from_file("file.json") 
    def setUpClass(cls): 
     cls.ip = ip 
     cls.browser_type = browserType 
     cls.port = port 
     # some more code 

    @classmethod 
    def tearDownClass(cls): 
     # some code 

    def test_open_welcome_page(self): 
     # some code for the test 

回答

1

就像你提到的,你可以使用装饰,JSON文件从文件传递给它,加载数据和装饰功能的PARAMS使用,改变你的单元测试.py文件是这样的:

import unittest 
import json 
from functools import wraps 

def params_from_file(file): 
    """Decorator to load params from json file.""" 
    def decorator(func_to_decorate): 
     @wraps(func_to_decorate) 
     def wrapper(self, *args, **kwargs): 
      with open(file, 'r') as fh: 
       kwargs = json.loads(fh.read()) 
       return func_to_decorate(self, **kwargs) 
     return wrapper 
    return decorator 

class H5Tests(unittest.TestCase): 
    @classmethod 
    @params_from_file("file.json") #{"browserType": "Chrome", "ip": "11.111.111.111", "port":4444 } 
    def setUpClass(cls, browserType, ip, port):#here you can put them in 
     cls.browser_type = browserType 
     cls.ip = ip 
     cls.port = port 
     # some more code 

    @classmethod 
    def tearDownClass(cls): 
     # some code 

    def test_open_welcome_page(self): 
     # some code for the test 
     # here you can use them in test cases   
     print(self.ip) #11.111.111.111 
     print(self.browser_type) #Chrome 
     print(self.port) #4444 
+0

非常感谢您的回答,作品完美。我可以问你:如果我的json文件比我需要更多的属性,如何忽略它们。例如,如果还有“操作系统”:“Windows”,但我的setUpClass(CLS,IP,浏览器类型,端口)不使用此操作系统,我怎么能轻松摆脱它。 –

+0

@ stefan.stt你的下一个问题是什么? –

+1

其实我已经做到了,只需要添加** kwargs到setUpClass(cls,ip,browserType,port,** kwargs)。非常感谢你的支持,欢呼! –

相关问题