美文网首页pytest
Pytest和Allure测试框架-超详细版+实战2

Pytest和Allure测试框架-超详细版+实战2

作者: C1R2 | 来源:发表于2021-01-29 23:51 被阅读0次

    二:Pytest -断言、跳过及运行

    1,Pytest -断言、跳过及运行

    在这里插入图片描述 在这里插入图片描述

    2,mark中的skip(跳过)

    在这里插入图片描述

    3,mark中的xfail(失败)

    在这里插入图片描述

    pytest.xfail()
    我们已经掌握了如果跳过执行测试用例,其中有一种方法是在测试函数中用pytest.skip()方法。我们现在要学的pytest.xfail()和pytest.skip()有些相似,只不过他的含义是:将该用例标记成xfail失败,并且该用例中的后续代码不会执行。
    代码参考:

    #test_Pytest.py文件
    #coding=utf-8
    
    import pytest
    
    class Test_Pytest():
    
            def test_one(self,):
                    print("----start------")
                    pytest.xfail(reason='该功能尚未完成')
                    print("test_one方法执行" )
                    assert 1==1
    
            def test_two(self):
                    print("test_two方法执行" )
                    assert "o" in "love"
    
            def test_three(self):
                    print("test_three方法执行" )
                    assert 3-2==1
    
    if __name__=="__main__":
        pytest.main(['-s','-r','test_Pytest.py','test_Pytest.py'])
    
    

    运行结果如下图:我们可以看到该用例中pytest.xfail()方法之前的代码运行了,之后的不再运行;结果中有一天用例被标记为xfail。


    在这里插入图片描述

    这个方法是我们直接将用例标记为失败,那什么情况我们会这么做呢?功能未完成、已知有问题。除此之外,就是用例的执行需要前置条件或操作,如果前置条件或操作失败,那么我们就可以直接将该用例设为失败,也就是xfail。

    @pytest.mark.xfail
    除了上面学习的pytest.xfail(),xfai还有一种使用方法。就是@pytest.mark.xfail标签,他的含义是期望测试用例是失败的,但是不会影响测试用例的的执行。如果测试用例执行失败的则结果是xfail(不会额外显示出错误信息);如果测试用例执行成功的则结果是xpass。
    吃个荔枝:我们直接在测试用例上加上@pytest.mark.xfail标签。

    #test_Pytest.py文件
    #coding=utf-8
    
    import pytest
    
    class Test_Pytest():
    
            @pytest.mark.xfail
            def test_one(self):
                    print("test_one方法执行" )
                    assert 1==2
    
            def test_two(self):
                    print("test_two方法执行" )
                    assert "o" in "love"
    
            def test_three(self):
                    print("test_three方法执行" )
                    assert 3-2==1
    
    if __name__=="__main__":
        pytest.main(['-s','test_Pytest.py']) 
    

    运行结果如下图:可以看到我们标记的用例确实运行了;因为断言失败所以结果是xfailed,也没有像正常一样显示出错误用例及具体信息。


    在这里插入图片描述

    我们把断言改成正确的,再运行一次,结果如下图:尽管我们的用例正常运行通过,但是仍被标记为xpassed,而不是passed。


    在这里插入图片描述

    4,使用自定义标记mark只执行部分用例

    在这里插入图片描述

    1.mark标记
    以下用例,标记test_send_http()为webtest

    # content of test_server.py
    
    import pytest
    
    @pytest.mark.webtest
    def test_send_http():
        pass # perform some webtest test for your app
    
    def test_something_quick():
        pass
    
    def test_another():
        pass
    
    class TestClass:
        def test_method(self):
            pass
    
    if __name__ == "__main__":
        pytest.main(["-s", "test_server.py", "-m=webtest"])
    只运行用webtest标记的测试,cmd运行的时候,加个-m 参数,指定参数值webtest
    
    ```py
    pytest -v -m webtest
    

    如果不想执行标记webtest的用例,那就用”not webtest”
    pytest -v -m “not webtest”

    import pytest
    
    @pytest.mark.webtest
    def test_send_http():
        pass # perform some webtest test for your app
    def test_something_quick():
        pass
    def test_another():
        pass
    class TestClass:
        def test_method(self):
            pass
    
    if __name__ == "__main__":
        pytest.main(["-s", "test_server.py", "-m='not webtest'"])
    

    5,文件名类名方法执行部分用例

    在这里插入图片描述

    2.-v 指定的函数节点id
    如果想指定运行某个.py模块下,类里面的一个用例,如:TestClass里面testmethod用例
    每个test开头(或_test结尾)的用例,函数(或方法)的名称就是用例的节点id,指定节点id运行用-v 参数
    pytest -v test_server.py::TestClass::test_method

    当然也能选择运行整个class
    pytest -v test_server.py::TestClass

    也能选择多个节点运行,多个节点中间空格隔开
    pytest -v test_server.py::TestClass test_server.py::test_send_http


    参考链接
    https://blog.csdn.net/qq_42610167/article/details/101204066

    相关文章

      网友评论

        本文标题:Pytest和Allure测试框架-超详细版+实战2

        本文链接:https://www.haomeiwen.com/subject/cttzaktx.html