Python接口测试Python

pytest-贼基础的基础记录

2021-08-06  本文已影响0人  Rainbow想喝奶茶

经过了对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

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

上一篇下一篇

猜你喜欢

热点阅读