欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【pytest学习笔记】01-Hello, pytest

程序员文章站 2024-02-27 14:45:57
...

What is Pytest

pytest是一个测试框架,即可以用于简单的测试,也可以用于复杂的功能测试。可以用于单元测试、接口测试

优点(官方)
  • 断言失败处有详细的报告,断言仅需使用一个assert,不需要记住一堆self.assert*(这里吐槽的是unitest吧)
  • 自动发现测试模块和方法
  • 支持Modular fixtures,支持参数化
  • 兼容unitestnose的老代码
  • 可以运行在 python2.7 , python3.4+ , Pypy, Jython2.5
  • 丰富的插件(这个很强)

安装

推荐pip安装

pip install -U pytest

查看安装是否成功

 λ pytest --version
This is pytest version 4.4.0, imported from d:\programfile\anaconda3\envs\pytest\lib\site-packages\pytest.py

Simple Test

test前缀的方法作为测试方法

# content of simple_test.py
def add (x):
    return x + 1

def test_add():
    assert add(2) == 5

运行

pytest -q  # -q为 quite模式

结果

F                                                                                                                                                             [100%] 
============================================================================= FAILURES ============================================================================== 
_____________________________________________________________________________ test_add ______________________________________________________________________________

    def test_add():
>       assert add(2) == 5
E       assert 3 == 5
E        +  where 3 = add(2)

simple_test.py:8: AssertionError
1 failed in 0.04 seconds

测试类

如果需要将多个测试方法按照类的方式组合起来,pytest 也是支持的。

pytest没有要求测试类一定需要继承哪个类,实际上只要是Object的子类都可以,但是前缀必须是Test,且内部测试方法的前缀是test

class TestClass:                  
    def test_two(self):           
        x = 'this'                
        assert 'a' in x           
                                  
    def test_one(self):           
        x = 'hello'               
        assert hasattr(x, 'check')
                                  
    def other_func(self):         
        x = 'hello world'         
        print(x)                  
        assert type(x) is str     

运行结果

FF                                                                                                                                                             [100%] 
============================================================================= FAILURES ============================================================================== 
________________________________________________________________________ TestClass.test_two _________________________________________________________________________ 
                                                                                                                                                                      
self = <test_class.TestClass object at 0x00000248BE7EB940>                                                                                                            
                                                                                                                                                                      
    def test_two(self):                                                                                                                                               
        x = 'this'                                                                                                                                                    
>       assert 'a' in x                                                                                                                                               
E       AssertionError: assert 'a' in 'this'                                                                                                                          
                                                                                                                                                                      
test_class.py:4: AssertionError                                                                                                                                       
________________________________________________________________________ TestClass.test_one _________________________________________________________________________ 
                                                                                                                                                                      
self = <test_class.TestClass object at 0x00000248BE7ECC88>                                                                                                            
                                                                                                                                                                      
    def test_one(self):                                                                                                                                               
        x = 'hello'                                                                                                                                                   
>       assert hasattr(x, 'check')                                                                                                                                    
E       AssertionError: assert False                                                                                                                                  
E        +  where False = hasattr('hello', 'check')                                                                                                                   
                                                                                                                                                                      
test_class.py:8: AssertionError                                                                                                                                       
2 failed in 0.07 seconds                                                                                                                                              

可以看出,

  • 测试类中没有以test为前缀的不会被执行
  • 执行顺序与方法的顺序有关