需求:启动测试的时候,不会直接执行pytest xxx, 而是有个单独的py文件其中调用pytest.main(), 这样可以在开始的时候执行一些需要的操作,当然这些操作放在pyest 各种setup中也可以, 但是有需求是需要读取某些环境变了但是但是外部因为各种原因最后决定不通过环境变量传递而是以参数的形式传递(至于为啥不能通过环境不在本文的讨论范围内,也不是本文的关注点)。
如果启动pytest的代码如下(简单示例,不用纠结代码风格以简略等,这里只是为了说明问题)
import pytest
import sys
if __name__ == '__main__':
print("env arg")
print(sys.argv)
print(sys.argv[1])
pytest.main()
输入参数
python pytest_main.py -envType=dev
env arg
['pytest_main.py', '-envType=dev']
-envType=dev
ERROR: usage: pytest_main.py [options] [file_or_dir] [file_or_dir] [...]
pytest_main.py: error: unrecognized arguments: -envType=dev
inifile: /Users/xxx/PycharmProjects/celldbtest/pytest.ini
rootdir: /Users/xxx/PycharmProjects/celldbtest
可以发现这里-envType=dev被当成了pytest的参数了,而执行python pytest_main.py -c pytest.ini 是可以。
解决办法:
因为我们实际测试相关配置参数都在pytest.ini 中,因此只需要pytest.main()指定读取的文件,他就忽略其余参数
import pytest
import sys
if __name__ == '__main__':
print("env arg")
print(sys.argv)
print(sys.argv[1])
pytest.main(['-c', 'pytest.ini'])
此时启动时输出额外的参数都在pytest.main([‘-c’, ‘pytest.ini’]) 前处理, 并且这些参数也不会传递到pytest.main
python pytest_main.py -envType=dev -arg=val2