平台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文件示例 test.ini
[data]
name = some.name
age = 22
[data1]
name = someother.name
age = 32
答案 0 :(得分:0)
如果要在运行sys.argv[1]
时使example.py
等于pytest
,则可以将文件名作为参数传递:
sudo pytest example.py
要在运行sys.argv[1]
(在每个文件上)时以sudo pytest
的形式传递文件名,可以创建具有以下内容的conftest.py
:
import pytest
import sys
@pytest.fixture(autouse=True)
def set_sys_argv_1(request, monkeypatch):
monkeypatch.setattr(sys, 'argv', ['pytest', str(request.fspath)])
请注意,它将传递文件的绝对路径。
答案 1 :(得分:0)
正如我评论的那样,在您只需要创建一个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文件。
希望这可以澄清您的查询。
所有功劳归于stackoverflow.com/a/42778436/4490226
答案 2 :(得分:0)
import pytest
import sys
import os
def readfile_list(prots):
"""
fetching all py files
"""
testcases = []
for folder in prots:
for filename in os.listdir(folder):
if filename.endswith('.py') and filename != "__init__.py" and filename != "run.py":
testcases.append(folder + "/" + filename)
return testcases
def main(testcases):
"""
main function to run testcases
"""
# extract your arg here
for tests in testcases:
print('Extracted arg is ==> %s' % sys.argv[1])
pytest.main([tests, '--tb=no', '-s'])
if __name__ == '__main__':
prots = ['folder1', 'folder2']
testcases = readfile_list(prots)
main(testcases)