如何计算用pytest编写的测试用例?

时间:2016-07-29 13:35:24

标签: command-line pytest file-search

我的目标是获取包/文件夹中的测试方法数量。我可以通过执行

来做到这一点

py.test <folder> --collect-only|grep collected

这显示测试计数为

collected 104 items

然而,这会多次计算参数化测试,例如。如果一个方法有两组参数,单个测试将被计数2次。 有没有办法告诉pytest将它们算作单身?

4 个答案:

答案 0 :(得分:5)

怎么样

find . -type f -name 'test*.py' -exec grep -e 'def test_' '{}' \; | wc -l

ag 'def test_' | wc -l

答案 1 :(得分:5)

如果pytest中的测试使用自定义测试收集方法或使用参数化,则常规grepping将无济于事。常规grepping只能为您提供测试功能和测试类。如果您对该数字感兴趣,那么这里的其他答案应该对您有用。如果您想知道收集的测试总数,请继续。

您应该为目标测试目录运行pytest --collect-only并在输出中运行grep。

一个可能的解决方案是:

pytest --collect-only | grep "<Function\|<Class" -c

它将返回在<Function的输出中具有<Classpytest --collect-only的行数。由于所有收集的测试都有这两个词之一,因此它将给出正确数量的测试。

查找测试数量的另一种方法是使用-k开关。它搜索表达式并运行与表达式匹配的测试。

pytest -k "not test and not Test"

这将为您提供所有测试的数量。它所做的是收集所有测试,并尝试查找测试名称中没有test的测试。由于所有测试的名称中都带有test,因此将取消选择所有测试,您将获得测试总数。此方法适用于参数化。

答案 2 :(得分:0)

另一个解决方案:

let data = [
  { 
  "x": "123",
  "values": [
    { 
      "a": "1"
    }, 
   { 
     "b": "2" 
    }
  ] 
},   { 
  "y": "123",
  "values": [
    { 
      "a": "1"
    }, 
   { 
     "b": "2" 
    }
  ] 
}
];

let totalLength = data.map(x => x.values.length).reduce((a,b) => a+b,0);
console.log(temparr);

希望它可以提供帮助。

答案 3 :(得分:0)

基于my other answer

计算所有测试

单线:

$ pytest --collect-only -q | head -n -2 | wc -l

说明

--collect-only-q结合使用,每行输出一个测试,尾随信息行。示例:

$ pytest --collect-only -q
test_eggs.py::test_bacon[1]
test_eggs.py::test_bacon[2]
test_eggs.py::test_bacon[3]
test_spam.py::test_foo
test_spam.py::test_bar

no tests ran in 0.00 seconds

其余只是例行操作:head -n -2剥离信息行,wc -l计数行。

应用进一步的过滤功能照常进行,例如

$ pytest --collect-only -q -k "fizz" | head -n -2 | wc -l

仅计算名称中包含fizz的测试

$ pytest --collect-only -q buzz/ fuzz/ | head -n -2 | wc -l

仅计算buzzfuzz目录等中的测试。

每个测试模块的测试次数

如果要获取每个模块中有多少个测试的信息,请结合使用--collect-only-qq

$ pytest --collect-only -qq
test_eggs.py: 3
test_spam.py: 2

计算唯一测试(测试参数作为单个测试计数)

OP最初要求的内容。这是对上述命令的修改,该命令从测试名称中删除参数化并在计数之前删除重复的行:

$ pytest --collect-only -q | head -n -2 | sed 's/\[.*\]$//' | sort | uniq | wc -l