Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从json文件中读取参数并将其放入setUpClass(cls)_Python_Python Unittest - Fatal编程技术网

Python 如何从json文件中读取参数并将其放入setUpClass(cls)

Python 如何从json文件中读取参数并将其放入setUpClass(cls),python,python-unittest,Python,Python Unittest,有没有一种方法可以让python unittest从文件中读取参数并将其分配给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

有没有一种方法可以让python unittest从文件中读取参数并将其分配给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

正如您所提到的,您可以使用decorator,将json文件传递给它,从文件加载数据并用作修饰函数的参数,将unittest
.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

非常感谢您的回答,非常好用。我想问你:如果我的json文件的属性比我需要的多,如何忽略它们。例如,如果还有“操作系统”:“Windows”,但我的setUpClass(cls、ip、browserType、port)不使用此操作系统,我如何轻松摆脱它。@stefan.stt你的下一个问题是什么?实际上我已经知道了如何做,只需将**kwargs添加到setUpClass(cls、ip、browserType、port、**kwargs)。再次感谢你们的支持,干杯@stefan.stt更新很好,希望它也能帮助其他人,干杯!为什么我得到的setUpClass方法的签名与基类TestCase的签名不匹配?