12:pytest的简单例子

04-12pytest的简单例子

引言:

接触过单元测试的朋友肯定知道unittest的,那个不需要安装的单元测试框架,可以秒秒钟新建简单例子。

# 用pycharm IDE写这样的代码是不需手工写的,直接生成。
import unittest

class MyTestCase(unittest.TestCase):
    def test_something(self):
        self.assertEqual(True, False)

if __name__ == '__main__':
    unittest.main()

运行结果如下:

(testops) D:\Coding\testops\Chapter04>python -m unittest reunittest.py
F
======================================================================
FAIL: test_something (reunittest.MyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Coding\testops\Chapter04\reunittest.py", line 6, in test_something
    self.assertEqual(True, False)
AssertionError: True != False

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures=1)

那么pytest比unittest更简单吗?更快吗?

pytest官方网站: http://docs.pytest.org/en/latest/

看完这个文章你就知道了。

也许有人也没听过unittest,那么笔者也写过unittest的介绍,也在这一章节,你可以翻一翻。

正文:

# 当前目录下的文件列表
pytestday01.py
reunittest.py
test_main.py
test_sample.py

我们看一个简单pytest 例子

./test_sample.py

# content of test_sample.py
def inc(x):
    return x + 1

def test_answer():
    assert inc(3) == 5

​ 这是官方给出的例子。inc()函数接收了一个参数x,返回 x+1。test_answer()是一个测试用例,调用inc()方法并传参数为3,使用assert断言返回结果是否为5 .

​ 接下来我们运行测试,看一下运行结果。

(testops) D:\Coding\testops\Chapter04>pytest test_sample.py
======================================================== test session starts ========================================================
platform win32 -- Python 3.7.1, pytest-5.2.2, py-1.8.0, pluggy-0.13.0
rootdir: D:\Coding\testops\Chapter04
collected 1 item                                                                                                                     

test_sample.py F                                                                                                               [100%]

============================================================= FAILURES ==============================================================
____________________________________________________________ test_answer ____________________________________________________________

    def test_answer():
>       assert inc(3) == 5
E       assert 4 == 5
E        +  where 4 = inc(3)

test_sample.py:7: AssertionError
========================================================= 1 failed in 0.02s =========================================================

运行结果中有 用例的执行结果描述 【 test_sample.py F 】,

错误的追踪记录 【test_sample.py:7: AssertionError】,

还有结果总述 【 1 failed in 0.02s 】 这是我们最直观的展现方式了。

它也可以使用main()方法来执行测试用例。

./test_main.py

import pytest
# content of test_main.py
def inc(x):
    return x + 1

def test_answer():
    assert inc(3) == 5

if __name__ == '__main__':
    pytest.main()

运行命令: pytest test_main.py

(testops) D:\Coding\testops\Chapter04>pytest test_main.py
======================================================== test session starts ========================================================
platform win32 -- Python 3.7.1, pytest-5.2.2, py-1.8.0, pluggy-0.13.0
rootdir: D:\Coding\testops\Chapter04
collected 1 item                                                                                                                     
test_main.py F                                                                                                                 [100%]

============================================================= FAILURES ==============================================================
____________________________________________________________ test_answer ____________________________________________________________

    def test_answer():
>       assert inc(3) == 5
E       assert 4 == 5
E        +  where 4 = inc(3)

test_main.py:8: AssertionError
========================================================= 1 failed in 0.03s =========================================================

有了main()那就可以用IDE来直接执行了。

总结:

1 在学习了unittest单元测试框架之后,还有必要学习pytest吗?

在学习了unittest单元测试框架之后,还有必要学习pytest吗?答案是肯定的。

pytest是一个第三方单元测试框架,更加简单、灵活,而且提供了更加丰富的扩展,弥补了unittest在做web自动化测试的一些不足。

2 pytest不是默认有的,需要安装

pip install pytest

​ 验证一下

>pip list
...
pytest             5.2.2

3 pytest 命令安装位置

pytest 命令在安装pytest测试框架时默认生成于 …\Python37\Scripts

4 通过上面的例子,你因该有的感受

通过上面的例子,你已经感受到了pytest的优点,它更加简单。

首先不必像unittest一样必须创建测试类。其次断言assert的使用也比unittest提供的断言方法更加简单。

思考与延伸:

1 什么时候选择pytest?什么时候选择unittest?

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 帮助IT小伙伴学到真正的技术