繁体   English   中英

在单元测试中运行带有参数的python文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM