【问题标题】:Pytest/Python - Assert text in a position of a line in a filePytest/Python - 在文件中的一行位置断言文本
【发布时间】:2021-12-22 21:46:50
【问题描述】:

我是 Python/Pytest/Pywinauto 等美妙世界的新手,我绝不是开发人员,所以请放轻松 :)

我正在尝试运行测试以断言文件中的文本,如下所示:

    import pytest
    
    
    def test_fileContains123456():
        line = open("my_file.html", "r").readlines()[20]
        assert r"THIS1              123456 YES" in line

这正确地断言该文本存在于该特定行的文件中。有没有办法提高它的准确性,以便它从那条特定线上的位置拾取它?在这种情况下,要断言的文本的位置是根据 Notepad++ Column 101 on line 或位置 1,683 在文件中。

另外,上面的代码有什么可以改进的地方吗?

在此先感谢 :)

【问题讨论】:

    标签: file text position pytest assert


    【解决方案1】:

    您似乎正在尝试测试一个 HTML 文件,该文件的内容可以更改,但其句法结构可能保持不变。换句话说,文件中特定行的内容可以更改,但解析或呈现的结果将保持不变。这意味着您想要改进两件事:

    1. 准确度 - 断言给定的字符串在特定的 HTML 元素内。
    2. leeway - 当文件的内容发生变化但关键的 HTML 元素仍然具有正确的字符串时,您不希望测试中断。

    为此,您需要解析 HTML 文件。 Python 的内置 parser 不是您想要的最佳选择,但您可以尝试一些第三方包,例如lxml

    my_file.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <div>
            <span id="needle">THIS1 123456 YES</span>
        </div>
    </body>
    </html>
    

    test.py

    import pytest
    from lxml import html
    
    def test_fileContains123456():
        parsed = html.parse('my_file.html').getroot()
        assert parsed.get_element_by_id('needle').text_content() == 'THIS1 123456 YES'
    

    如何准确地构建测试断言取决于 HTML 文件的确切内容。我的示例假定 HTML 元素将 id 设置为 needle,并且其内容应该与搜索字符串完全匹配。然而,还有其他匹配元素的方法,例如使用 CSS 语法(参见cssselect())。

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 2016-03-13
      • 2015-04-07
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      相关资源
      最近更新 更多