Pytest自动化测试框架如何使用


这篇文章主要讲解了“Pytest自动化测试框架如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pytest自动化测试框架如何使用”吧!如何区分这两者,很简单unittest作为官方的测试框架,在测试方面更加基础,并且可以再次基础上进行二次开发,同时在用法上格式会更加复杂;而pytest框架作为第三方框架,方便的地方就在于使用更加灵活,并且能够对原有unittest风格的测试用例有很好的兼容性,同时在扩展上更加丰富,可通过扩展的插件增加使用的场景,比如一些并发测试等;pip安装:测试安装成功:检查安装版本:Pytest编写规则:测试文件以test_开头(以_test为结尾)测试的类以Test开头;测试的方法以test_开头断言使用基本的asserttest_example.py执行测试:执行结果:C:UserslibuliduobuqiuqiuDesktopGitProjectsPythonDemopytest>pytest test_example.py -v
================================================================= test session starts =================================================================
platform win32 — Python 3.6.8, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 — d:codingpython3.6python.exe
cachedir: .pytest_cache
rootdir: C:UserslibuliduobuqiuqiuDesktopGitProjectsPythonDemopytest
plugins: Faker-8.11.0
collected 1 item

test_example.py::test_count FAILED [100%]

====================================================================== FAILURES =======================================================================
_____________________________________________________________________ test_count ______________________________________________________________________

def test_count():
> assert count_num([1, 2, 3]) != 3
E assert 3 != 3
E + where 3 = count_num([1, 2, 3])

test_example.py:11: AssertionError
=============================================================== short test summary info ===============================================================
FAILED test_example.py::test_count – assert 3 != 3
================================================================== 1 failed in 0.16s ====================免费云主机域名==============================================备注:.代表测试通过,F代表测试失败;-v显示详细的测试信息, -h显示pytest命令详细的帮助信息;默认情况下,pytest会在当前目录下寻找以test_为开头(以_test结尾)的测试文件,并且执行文件内所有以test_为开头(以_test为结尾)的所有函数和方法;指定运行测试用例,可以通过::显示标记(文件名::类名::方法名)(文件名::函数名)指定一些测试用例测试运行,可以使用-k模糊匹配通过pytest.mark.skip()或者pytest.makr.skipif()条件表达式,跳过指定的测试用例通过pytest.raises()捕获测试用例可能抛出的异常预先知道测试用例会失败,但是不想跳过,需要显示提示信息,使用pytest.mark.xfail()对测试用例进行多组数据测试,每组参数都能够独立执行一次(可以避免测试用例内部执行单组数据测试不通过后停止测试)固件就是一些预处理的函数,pytest会在执行测试函数前(或者执行后)加载运行这些固件,常见的应用场景就有数据库的连接和关闭(设备连接和关闭)简单使用按照官方的解释就是当运行测试函数,会首先检测运行函数的参数,搜索与参数同名的fixture,一旦pytest找到,就会运行这些固件,获取这些固件的返回值(如果有),并将这些返回值作为参数传递给测试函数;接下来进一步验证关于官方的说法:执行测试函数结果:============================= test session starts =============================
platform win32 — Python 3.6.8, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 — D:CodingPython3.6python.exe
cachedir: .pytest_cache
rootdir: C:UserslibuliduobuqiuqiuDesktopGitProjectsPythonDemopytest
plugins: Faker-8.11.0
collecting … collected 1 item

test_example.py::test_count Connect Database in …….
PASSED [100%]Close Database out …….

============================== 1 passed in 0.07s ==============================备注:首先从结果上看验证了官方的解释,pytest执行测试函数前会寻找同名的固件加载运行;connect_db固件中有yield,这里pytest默认会判断yield关键词之前的代码属于预处理,会在测试前执行,yield之后的代码则是属于后处理,将在测试后执行;从前面大致了解了固件的作用,抽离出一些重复的工作方便复用,同时pytest框架中为了更加精细化控制固件,会使用作用域来进行指定固件的使用范围,(比如在这一模块中的测试函数执行一次即可,不需要模块中的函数重复执行)更加具体的例子就是数据库的连接,这一连接的操作可能是耗时的,我只需要在这一模块的测试函数运行一次即可,不需要每次都运行。而定义固件是,一般通过scop参数来声明作用,常用的有:function: 函数级,每个测试函数都会执行一次固件;class: 类级别,每个测试类执行一次,所有方法都可以使用;module: 模块级,每个模块执行一次,模块内函数和方法都可使用;session: 会话级,一次测试只执行一次,所有被找到的函数和方法都可用。执行结果:============================= test session starts =============================
platform win32 — Python 3.6.8, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 — D:CodingPython3.6python.exe
cachedir: .pytest_cache
rootdir: C:UserslibuliduobuqiuqiuDesktopGitProjectsPythonDemopytest
plugins: Faker-8.11.0
collecting … collected 2 items

test_example2.py::test_scope session_scope
mod_scope
func_scope
PASSED [ 50%]
test_example2.py::test_scope2 func_scope
PASSED [100%]

============================== 2 passed in 0.07s ==============================从这里可以看出module,session作用域的固件只执行了一次,可以验证官方的使用介绍有人可能会说,这样子怎么那么麻烦,unittest框架中直接定义setUp就能自动执行预处理,同样的pytest框架也有类似的自动执行; pytest框架中固件一般通过参数autouse控制自动运行。执行结果:============================= test session starts =============================
platform win32 — Python 3.6.8, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 — D:CodingPython3.6python.exe
cachedir: .pytest_cache
rootdir: C:UserslibuliduobuqiuqiuDesktopGitProjectsPythonDemopytest
plugins: Faker-8.11.0
collecting … collected 2 items

test_example.py::test1 Connect Database in …….
PASSED [ 50%]test1

test_example.py::test2 PASSED [100%]test
Close Database out …….

============================== 2 passed in 0.07s ==============================从结果看到,测试函数运行前后自动执行了connect_db固件;前面简单的提到过了@pytest.mark.parametrize通过参数化测试,而关于固件传入参数时则需要通过pytest框架中内置的固件request,并且通过request.param获取参数执行结果:============================= test session starts =============================
platform win32 — Python 3.6.8, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 — D:CodingPython3.6python.exe
cachedir: .pytest_cache
rootdir: C:UserslibuliduobuqiuqiuDesktopGitProjectsPythonDemopytest
plugins: Faker-8.11.0
collecting … collected 2 items

test_example.py::test_api[param0]
Succeed to connect redis:6379
PASSED [ 50%]
Succeed to close redis:6379

test_example.py::test_api[param1]
Succeed to connect elasticsearch:9200
PASSED [100%]
Succeed to close elasticsearch:9200

============================== 2 passed in 0.07s ==============================这里模拟连接redis和elasticsearch,加载固件自动执行连接然后执行测试函数再断开连接。感谢各位的阅读,以上就是“Pytest自动化测试框架如何使用”的内容了,经过本文的学习后,相信大家对Pytest自动化测试框架如何使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: springboot配置date字段返回时间戳的问题怎么解决

这篇文章主要介绍“springboot配置date字段返回时间戳的问题怎么解决”,在日常操作中,相信很多人在springboot配置date字段返回时间戳的问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”springb…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/23 12:43
Next 05/23 12:43

相关推荐