最近又快到了年后找工作的时间,近期写点工作积累,供大家参考。
欢迎关注公主号【测试开发备忘录】,交流职场技巧和经验
首先从工作中一个报错来展开:
Start directory is not importable:
错误信息 "Start directory is not importable" 通常出现在使用 unittest
测试发现器时,当你指定的起始目录(-s
参数)不是一个有效的 Python 包,或者该目录中缺少 __init__.py
文件时。
在 Python 中,一个目录要被视为一个包,必须在该目录中包含一个 __init__.py
文件。这个文件可以是空的,但它的存在告诉 Python 解释器该目录应该被视为一个包。
解决方法
添加 __init__.py
文件: 确保你指定的起始目录包含一个 __init__.py
文件。例如,如果你的测试目录是 ./tests
,那么你应该在 tests
目录中创建一个空的 __init__.py
文件。
常用的报告生成命令:
coverage run -m unittest discover -v -s ./tests:
该命令使用 Python 的 coverage
工具来测量代码覆盖率,并运行 unittest
测试用例:
coverage run
:启动coverage
工具来跟踪代码的执行情况,以便计算代码覆盖率。-m unittest discover
:运行unittest
测试发现器,自动查找并运行测试用例。unittest
是 Python 的标准测试框架。-v
:表示“verbose”,让unittest
输出更详细的测试信息。-s ./tests
:指定测试发现器的起始目录。这里./tests
表示从当前目录下的tests
目录开始查找测试用例。
当你运行这个命令时,coverage
会记录哪些代码行被执行了,然后你可以使用 coverage
工具的其他命令来生成报告,例如:
coverage report
:在终端输出代码覆盖率报告。coverage html
:生成一个 HTML 格式的覆盖率报告,你可以在浏览器中查看。
示例
假设你的项目结构如下:
project/
│
├── main.py
└── tests/
├── __init__.py
├── test_main.py
└── test_another_module.py
你可以在项目根目录下运行以下命令:
coverage run -m unittest discover -v -s ./tests
这将运行 tests
目录下的所有测试用例,并输出详细的测试信息。
生成覆盖率报告
coverage report
或者生成一个更易读的 HTML 报告:
coverage html
然后可以在 project/htmlcov/index.html
文件中查看覆盖率报告。
注意事项
- 确保你的测试用例文件名以
test_
开头,这样unittest discover
才能正确识别它们。 - 如果你的测试用例依赖于特定的环境或配置,确保在运行测试前正确设置这些环境变量或配置。
- 如果你的项目中有多个测试目录,你可以使用多个
-s
参数指定它们,例如:-s ./tests -s ./another_tests
。
通过使用 coverage
和 unittest
,可以有效地测量和提高你的代码覆盖率,确保测试用例覆盖了更多的代码路径。