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

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

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

Pytest和Allure测试框架-超详细版+实战2_第1张图片
在这里插入图片描述
Pytest和Allure测试框架-超详细版+实战2_第2张图片
在这里插入图片描述

2,mark中的skip(跳过)

Pytest和Allure测试框架-超详细版+实战2_第3张图片
在这里插入图片描述

3,mark中的xfail(失败)

Pytest和Allure测试框架-超详细版+实战2_第4张图片
在这里插入图片描述

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。


Pytest和Allure测试框架-超详细版+实战2_第5张图片
在这里插入图片描述

这个方法是我们直接将用例标记为失败,那什么情况我们会这么做呢?功能未完成、已知有问题。除此之外,就是用例的执行需要前置条件或操作,如果前置条件或操作失败,那么我们就可以直接将该用例设为失败,也就是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,也没有像正常一样显示出错误用例及具体信息。


Pytest和Allure测试框架-超详细版+实战2_第6张图片
在这里插入图片描述

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


Pytest和Allure测试框架-超详细版+实战2_第7张图片
在这里插入图片描述

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

Pytest和Allure测试框架-超详细版+实战2_第8张图片
在这里插入图片描述

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,文件名类名方法执行部分用例

Pytest和Allure测试框架-超详细版+实战2_第9张图片
在这里插入图片描述

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)