在 Python 中,如何将参数从命令行传递给 unittest 函数?
这是目前的代码……我知道这是错误的。
class TestingClass(unittest.TestCase):
def testEmails(self):
assertEqual(email_from_argument, "my_email@example.com")
if __name__ == "__main__":
unittest.main(argv=[sys.argv[1]])
email_from_argument = sys.argv[1]
最佳答案
所以这里的医生说“你说那很痛?那就不要那样做!”可能是对的。但如果你真的想要,这里有一种将参数传递给单元测试测试的方法:
import sys
import unittest
class MyTest(unittest.TestCase):
USERNAME = "jemima"
PASSWORD = "password"
def test_logins_or_something(self):
print('username:', self.USERNAME)
print('password:', self.PASSWORD)
if __name__ == "__main__":
if len(sys.argv) > 1:
MyTest.USERNAME = sys.argv.pop()
MyTest.PASSWORD = sys.argv.pop()
unittest.main()
这会让你运行:
python mytests.py myusername mypassword
您需要 argv.pop
s,因此您的命令行参数不会与 unittest 自己的...
您可能想要研究的另一件事是使用环境变量:
import os
import unittest
class MyTest(unittest.TestCase):
USERNAME = "jemima"
PASSWORD = "password"
def test_logins_or_something(self):
print('username:', self.USERNAME)
print('password:', self.PASSWORD)
if __name__ == "__main__":
MyTest.USERNAME = os.environ.get('TEST_USERNAME', MyTest.USERNAME)
MyTest.PASSWORD = os.environ.get('TEST_PASSWORD', MyTest.PASSWORD)
unittest.main()
这会让你运行:
TEST_USERNAME=ausername TEST_PASSWORD=apassword python mytests.py
它的优点是你不会弄乱 unittest 自己的参数解析。缺点是它不会像在 Windows 上那样工作......
关于Python unittest 传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11380413/