Python unittest传环境变量报错及仅运行指定测试问题咨询
问题解决方法
根因说明
python -m unittest后的所有位置参数都会被框架识别为待加载的测试模块/用例路径,你将用户名密码作为位置参数传入后,框架会尝试导入名为username、password的模块,因此抛出模块不存在的报错,同时还会自动扫描加载其他符合规则的测试用例,导致实际运行测试数与预期不符。- 你代码中给环境变量赋值的逻辑放在
if __name__ == "__main__"分支下,使用-m unittest运行测试时,测试模块不会作为入口脚本执行,该分支逻辑不会触发,环境变量赋值不生效。 - 另外你原代码中的测试方法名
fetch不符合unittest的命名规则,unittest只会自动识别以test开头的方法为测试用例,这也是你实际运行用例数量不符的原因之一。
修复步骤
1. 调整测试代码
删除冗余的argv处理逻辑,修正测试方法命名,修改后代码如下:
import unittest from os import environ # 注意补充connect_to_database方法的导入,原代码拼写存在错误(connet→connect) from your_module import connect_to_database class database_helper_tests(unittest.TestCase): def test_fetch(self): x = connect_to_database(environ["username"], environ["password"]) data = x.fetch_from_database() expected_output = ... self.assertEqual(expected_output, data) if __name__ == "__main__": unittest.main()
2. 调整运行命令
在命令前临时设置环境变量,不要作为位置参数传入,这样不会将凭证写入任何配置文件,命令如下:
username=你的实际用户名 password=你的实际密码 python -m unittest tests.unit_test_1
运行后就只会执行指定测试文件里的测试用例,不会出现模块找不到的报错。
内容的提问来源于stack exchange,提问作者Tanveer
相关产品推荐
相关产品推荐

