python - Python 的 unittest 库如何匹配通过 -p 参数传递的模式?
问题描述
我正在运行以下命令以仅运行位于名为的文件中的测试test_CO2.py
python3.7 -m unittest discover -s some_path/tests/ -p "*CO2*"
我的文件夹结构如下所示:
some_path/tests/
CO2
test_CO2.py
battery
test_battery.py
tank
test_tank.py
我想指定运行的测试。例如,如果我只想测试水箱和 CO2 代码,我该怎么做?我想通过以下正则表达式:
\w*(CO2|tank)\w*.py
找不到任何测试。
我认为传递给-p
选项的模式不接受正则表达式。那么如何指定我希望运行的测试呢?
解决方案
通常,您通过-p
参数传递的所有内容都unittest
通过TestLoader::_match_path()
方法处理,然后调用函数链fnmatch()
→ fnmatchcase()
→ _compile_pattern()
→ translate()
from fnmatch
library。
该translate()
函数将您的原始-p
参数转换为正则表达式,然后用于名称匹配。
函数的文档fnmatch()
说明了这一点:
Patterns are Unix shell style:
* matches everything
? matches any single character
[seq] matches any character in seq
[!seq] matches any char not in seq
据我所知,这就是它可以做的程度。所有其他字符都被转义以进行字面匹配。
示例:a|b
我将正则表达式作为模式传递。该translate()
函数以 形式返回最终的正则表达式(?s:p\|m)\Z
。在那里,管道字符被转义了。
如果您特别好奇,请在此处fnmatch
查看lib 的translate()
功能- 如果您想知道将“glob-like”模式转换为最终正则表达式的确切过程。
推荐阅读
- selenium - 即使 system.set 属性文件中的键和值正确,我也无法启动 Chrome 浏览器
- arrays - 如何在每行中显示两列是Scrollview而不是Flatlist?反应原生
- node.js - 无效响应和空 API 响应 - Alexa 对话问题
- python - 如何在openCV中获取带有视频输入的屏幕大小?
- python - TypeError:“dict”和“int”的实例之间不支持“>”
- python - 您可以将列表存储到while循环内的列表中吗?
- javascript - 通过javascript更改输入文本后事件侦听器不会触发
- java - 图像数组列表(从图库中选择的所有图像)转换信息单个 pdf
- python - pop方法赋值变量
- c++ - 在 QQuickPaintedItem 上用鼠标绘制