美文网首页Python接口测试Python
pytest-贼基础的基础记录

pytest-贼基础的基础记录

作者: Rainbow想喝奶茶 | 来源:发表于2021-08-06 17:43 被阅读0次

    经过了对unittest应用HtmlTestRunner长达半个小时的“大眼瞪小眼”,开始在无所不知的Internet上搜索,有没有对于python基础超超超超级薄弱的人更友好的测试框架,然后发现了pytest。浏览了几篇分析python测试框架的文章,相信了它的简单、易用、插件丰富,于是,开始决定学习pytest了。
    我坚信自己不是猴子下山,pytest就是我可以抱回家的大西瓜。
    下面圆规正传。

    下载及配置更改

    pytest作为python的第三方测试框架,同样需要下载

    pip3 install pytest
    

    如果是用pycharm编写代码的,为了可以直接在测试文件中执行run操作,需要改一下pycharm配置,具体路径是:
    Pycharm>Preferrences>Tools>Python Integrated Tools,将Testing下方的Default test runner由unittest改为pytest,之后就可以利用run执行。

    应用规则

    1. pytest调用的测试文件需要以test_开头或者_test结尾;
    2. pytest执行的类名需要以Test开头,类下不能有__init__方法,执行的函数需要以test开头;
    3. 断言应用assert
    4. 包pakege需要有init.py文件,否则引用会不成功。
    5. 运行时可以直接在命令行中:pytest test_*.py或是在pycharm中,测试文件内写入下方代码,用run执行。
    import pytest
    if __name__=='__main__':
        pytest.main()#在这里可以填写运行参数,执行或输出不同内容
    

    应用示例

    import pytest
    class TestClass():
        def test_one(self):
            x = "this"
            assert "h" in x
    
        def test_two(self):
            x = "hello"
            assert x == "hi"
    
        def test_three(self):
            x = "world"
            assert x != "worl"
    
    if __name__=='__main__':
        pytest.main()
    

    执行的时候要注意,如果pytest.main()中的运行参数不起作用,可能是直接右键选择Run'pytest in test_*.py导致。这种情况是不会执行main下方的语句的。需要点击上方的Run>Run...,直接选择文件名,可正常执行。

    标记过滤

    如果想执行特定的用例,可以通过pytest.mark在函数前打标记,执行的时候用-m传入标记即可。

    @pytest.mark.abc
        def test_one(self):
            x = "this"
            assert "h" in x
    @pytest.mark.def
        def test_two(self):
            x = "hello"
            assert x == "hi"
    if __name__=='__main__':
        pytest.main('-m abc')#运行后只执行第一个,不会执行第二个
    

    标记跳过

    如果想跳过某一个用例,即在此用例前方标记@pytest.mark.skip
    跳过也可以设置条件,例如@pytest.mark.skipif(a>4,reason='guess why'),设置条件时,必须传入reason参数

    参数化

    如果需要以变量进行参数传递来执行测试,可在此测试函数前方标记@pytest.mark.parametrize(),注意class下的函数第一个参数需要时self,同时对应函数记得传parametrize标记的参数。
    举例:

    import pytest
    class Testclass:
        @pytest.mark.parametrize('choice',["A","b"])
        def test001(self,choice):
            assert len(choice)==1
    

    自我记录,有错误欢迎指正~

    相关文章

      网友评论

        本文标题:pytest-贼基础的基础记录

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