Pytest固定装置:每次测试之间的设置,拆卸和代码运行

时间:2018-08-11 19:44:54

标签: python pytest fixture

我正在尝试使用pytest来测试正在编写的模块。该模块是启动时间很长的进程的包装。因此,我想确保我具有正确的设置/拆卸逻辑,以确保初始化不会发生多次。

我当前的代码如下:

<!doctype html>

<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Pig Latin Translator</title>



</head>

<body>
    <script src="JS/Translator.js"></script>
    <h1>Pig Latin Translator</h1>
    <br>
    <form>
        <input type="text" id="wordIn">
        <button type="button" name="Translate" onclick="translateWord()">Translate</button>
        <p id="wordOut">-</p>

    </form>


    <br>

</body>
</html>

我注意到我所有的测试都将从调用重置模块开始!有什么方法可以将其添加到灯具中,或者您将如何解决?

我想要的伪代码:

import pytest
import leelaZeroWrapper

@pytest.fixture(scope='module')
def leela(request):
    leela = leelaZeroWrapper.LeelaWrapper()
    def quit():
        leela.quit()
    request.addfinalizer(quit)
    return leela

def test_single_play(leela):
    leela.reset()
    result = leela.play('b', 'a11')
    assert result == [{'color': 'black', 'loc': 'a11'}]

def test_single_play_uppercase(leela):
    leela.reset()
    result = leela.play('WHITE', 'A11')
    assert result == [{'color': 'white', 'loc': 'a11'}]

def test_reset(leela):
    leela.reset()
    leela.play('b', 'a11')
    leela.play('w', 'a13')
    leela.reset()
    assert leela.current_board == []
    assert leela.current_move == 0

如果初始设置不是那么繁重,我将跳过此步骤,让类初始化每个测试。我试图浏览文档中的请求对象,但是找不到合适的方法。我认为这必须以其他方式解决。有想法吗?

1 个答案:

答案 0 :(得分:2)

只需介绍另一个执行重置的装置即可。将其设为自动使用的固定装置,以便在每次测试之前自动执行操作:

    <!-- notification message -->
    <?php if (isset($_SESSION['success'])) : ?>
        <div class="error success" >
            <h3>
                <?php 
                    echo $_SESSION['success']; 
                    unset($_SESSION['success']);
                ?>
            </h3>
        </div>
    <?php endif ?>

    <!-- logged in user information -->
    <?php  if (isset($_SESSION['username'])) : ?>
        <p>Welcome <strong><?php echo $_SESSION['username']; ?></strong></p>

        <br>
        <p> <a href="index.php?logout='1'" style="color: red;">Are you Ready to go HOME? Click Here!!</a> </p>
    <?php endif ?>


</div>

默认的夹具范围是@pytest.fixture(scope='module') def leela(): leela = leelaZeroWrapper.LeelaWrapper() yield leela leela.quit() @pytest.fixture(autouse=True) def reset(leela): leela.reset() def test_single_play(leela): result = leela.play('b', 'a11') assert result == [{'color': 'black', 'loc': 'a11'}] ,因此function夹具将在模块中的每个测试之前重新运行。