python - 如何在 pytest 中处理 sys.argv?

标签 python python-3.x pytest

平台 linux -- Python 3.6.7、pytest-4.4.0、py-1.8.0、pluggy-0.9.0

#example.py
try:
    import configparser
except ImportError:
    import ConfigParser as configparser

CONFIG = configparser.ConfigParser()
CONFIG.read(sys.argv[1])
ININFO = {i:dict(CONFIG.items(i)) for i in CONFIG.sections()}
DATANAME = ININFO['data']['name']

def somefunction(DATANAME):
    """
        This function will take lot of variables from ini file
    """
    print(DATANAME)
    s1 = "Pass"
    s2 = "Fail"
    s3 = "Pass"
    print(s1, s2, s3)
    return [s1, s2, s3]

def test_somefunction():
    """
        Test function
           - Will check whether all steps are passed or not.
    """
    status = somefunction()
    for sts in status:
        assert sts == 'Pass', "Test has Failed!"

if __name__ == "__main__":

    somefunction()

和上面的代码一样,我有很多文件,而且都有内置测试

我的执行方式是

#sudo python3 example.py inifile.ini

请告诉我如何在不更改代码的情况下使用 pytest 执行此操作。

如果我将 sys.argv[1] 替换为文件名,则工作正常,如下所示

sudo python3 -m pytest -s 

指导我如何处理这个问题。

我添加并检查了下面的截图 error image

示例 ini 文件 测试.ini

[data]
name = some.name
age = 22

[data1]
name = someother.name
age = 32

最佳答案

正如我之前评论过的,您只需创建一个 python 文件来调用 pytest 和参数,pytest 就会从那里被触发。

$ python run.py example.py test.ini

这里,run.py如下

$ cat run.py
# run.py
import pytest
import sys

def main():
    # extract your arg here
    print('Extracted arg is ==> %s' % sys.argv[2])
    pytest.main([sys.argv[1]])

if __name__ == '__main__':
    main()

example.py 是您的 python 脚本。

test.ini 是您的 ini 文件。

希望这能澄清您的疑问。

所有学分转到this answer

关于python - 如何在 pytest 中处理 sys.argv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56110064/

相关文章:

python - GradientTape : LookupError: No gradient defined for operation 'IteratorGetNext' (op type: IteratorGetNext) 中的简单 Keras 网络

python - pytest 想要我们不正确的 python 3 版本

Python 测试模拟一些方法而不是其他方法

Python Tkinter GUI 始终最小化加载

python - bar3d 图中的错误重叠

python - 重命名 Pandas 数据框中的选定列

python - 在python中创建一个跨特定范围集的for循环函数

python - 如果不返回错误,则无法使用 ProcessPoolExecutor 进行并行处理

python - Python 2 和 Python 3 之间的什么区别导致了这个错误?

python - 在PyTest中如何配置CaptureManager插件错误 'CaptureManager'对象没有属性 'suspendcapture'