scope =“module”似乎没有在pytest中工作

时间:2017-05-11 18:41:02

标签: python-2.7 pytest

我正在使用pytest灯具。我的测试模块如下:

<!DOCTYPE html>
<html>
<body>
  <img src="http://java2s.com/style/demo/border.png" width="150" height="113">
  <img src="http://java2s.com/style/demo/border.png" width="150" height="113">       
  <img src="http://java2s.com/style/demo/border.png" width="150" height="113">
  <p><button onclick="myFunction()">test</button></p>
  <p id="demo"></p>

  <script>
    function myFunction() {
      image_report = ""
      for (let image of document.images) {
        image_report = image_report + image.src + "<br>";
      }
      document.getElementById("demo").innerHTML = image_report;
    }
  </script>
</body>
</html>

我按如下方式执行:

import pytest

@pytest.yield_fixture
@pytest.fixture(scope="module")
def jlt() :
    print("setup executed")
    yield None
    print("tearing up")

def test_one(jlt) :
    id = 123
    assert id == 123

def test_two(jlt) :
    id = 456
    assert id == 456

输出结果为:

py.test -v --capture=no test_jlt.py

platform linux2 -- Python 2.7.12, pytest-2.8.7, py-1.4.31, pluggy-0.3.1 -- /usr/bin/python cachedir: ../../.cache rootdir: /home/vandana/unix Home/pythonLearn, inifile: pytest.ini collected 2 items test_jlt.py::test_one setup executed PASSEDtearing up test_jlt.py::test_two setup executed PASSEDtearing up 似乎不起作用。每个功能都会执行夹具,而不是整个模块执行一次。 我不知道应该做什么

1 个答案:

答案 0 :(得分:2)

@pytest.yield_fixture 替换 @pytest.fixture,因此您应该使用@pytest.yield_fixture(scope="module")代替。

请注意,使用pytest 3.x,你可以简单地使用@pytest.fixture并在灯具内使用yield,这简化了一些事情。