[英]run python file with arguments in the unit test
我有一个测试用例,我想能够运行带有参数的python文件。
我有2个档案。 app.py
def process_data(arg1,arg2,arg3):
return {'msg':'ok'}
if __name__ == "__main__":
arg1 = sys.argv[1]
arg2 = sys.argv[2]
arg3 = sys.argv[3]
process_data(arg1,arg2,arg3)
test_cases.py
class TestCase(unittest.TestCase):
def test_case1(self):
expected_output = {'msg':'ok'}
with os.popen("echo python app.py arg1 arg2 arg3") as o:
output = o.read()
output = output.strip()
self.assertEqual(output, expected_output)
if __name__ == "__main__":
unittest.main()
预期结果为{'msg':'ok'},但是变量输出不返回任何内容。
您不需要使用os.popen()来调用该函数,您可以直接在test_cases.py中导入该函数并调用它(强烈推荐),请参见以下示例:
from app import process_data
class TestCase(unittest.TestCase):
def test_case1(self):
expected_output = {'msg':'ok'}
output = process_data('arg1', 'arg2', 'arg3')
self.assertEqual(output, expected_output)
if __name__ == "__main__":
unittest.main()
您忘记的一件事是进程输出将作为字符串返回,但是您正在与dict进行比较,所以Expect_output expected_output = "{'msg': 'ok'}"
变化很小
import os
import unittest
class TestCase(unittest.TestCase):
def test_case1(self):
expected_output = "{'msg': 'ok'}"
output = os.popen('python3 app.py arg1 arg2 arg3').read().strip()
print('=============>', output)
self.assertEqual(output, expected_output)
if __name__ == "__main__":
unittest.main()
app.py
import sys
def process_data(arg1, arg2, arg3):
print({'msg': 'ok'})
# return pass
if __name__ == "__main__":
arg1 = sys.argv[1]
arg2 = sys.argv[2]
arg3 = sys.argv[3]
process_data(arg1, arg2, arg3)
输出:
Ran 1 test in 0.025s
OK
=============> {'msg': 'ok'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.