Pytest框架使用方法总结
前言
Pytest是Python的另一个第三方单元测试库。它的目的是让单元测试变得更容易,并且也能扩展到支持应用层面复杂的功能测试。
pytest的特性有:
支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数
自动识别测试模块和测试函数
模块化夹具用以管理各类测试资源
对 unittest 完全兼容,对 nose基本兼容
支持Python3和PyPy3
丰富的插件生态,已有856多个各式各样的插件,社区繁荣
官方文档:https://docs.pytest.org/en/latest/contents.html
一 pytest单元测试框架
1 什么是单元测试:软件开发中,针对软件的最小单位(函数、方法)进行正确性的检查测试。
2 单元测试框架:
java:junit和testng
python:unittest和pytest
3 单元测试框架主要做什么:
3.1 测试发现:从多个文件里面找到我们的测试用例;
3.2 测试执行:按照一定的规则和顺序去执行,并生成结果;
3.3 测试判断:通过断言判断预期结果和实际结果的差异;
3.4 测试报告:统计测试进度、耗时、通过率,生成测试报告;
二 单元测试框架和自动化测试框架有什么区别
1 什么是自动化测试框架
2 作用:
2.1 提高测试效率;
2.2 减少人工的干预,提高测试的准确性,增加代码的重用性;
2.3 核心思想是让不懂代码的人也能够通过这个框架去实现自动化测试。
3 pytest单元测试框架和自动化测试框架的关系:
3.1 单元测试框架:只是自动化测试框架中的组成部分;
3.2 POM设计模式:只是自动化测试框架中的组成部分之一;
数据驱动
关键字驱动
全局配置文件的封装
日志监控
selenium requests二次封装
断言
报告邮件等
三 pytest简介
1 # 安装命令 2 pip install -U pytest 3 4 # 验证命令 5 pytest --version
1 pytest是一个非常成熟的Python的单元测试框架,比unittest更灵活、易上手;
2 pytest可以和selenium、requests、appium结合实现web、APP、接口自动化;
3 pytest可以实现用例的跳过以及returns失败用例重试;
4 pytest可以和allure生成非常美观的测试报告;
5 pytest可以和jenkins持续继承;
6 pytest有很多非常强大的插件,并且这些插件能够实现很多实用的操作:
pytest-html 生成html格式的自动化测试报告;
pytest-xdist 分布式执行测试用例,多CPU分发;
pytest-ordering 用于改变测试用例的执行顺序
pytest-retunfailures 用例失败后重跑;
allure-pytest 用于生成美观的测试报告;
以上插件 可以放到 requirements.txt中,通过pip install -r requirements.txt 快速安装;
四 使用pytest,默认的测试用例的规则以及基础使用
1 模块名必须以test_开头或者_test结尾;
2 测试类必须Test开头,且不能init方法;
3 测试方法必须以test开头;
1 # -*- coding:utf -8 -*- 2 3 """ 4 @author:ss 5 @file:test_login.py 6 @time:2021-04-1118:57 7 @desc: 8 """ 9 10 11 class TestLogin: 12 13 def test_01_login(self): 14 print('测试')
五 pytest测试用例运行方式
1 主函数模式:
1.1 运行所有:pytest.main()
1.2 运行指定模块:pytest.main(['-vs','test_login.py'])
1.3 运行指定目录:pytest.main('-vs','./interface_testcase')
1.4 通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名,组成
pytest.main(['-vs','./interface_testcase/test_interface.py::test_04_func'])
pytest.main(['-vs','./interface_testcase/test_interface.py::TestInterface::test_03_zhiliao'])
1.5 运行指定分组:pytest.main(['-vs','test_login.py','-m','smoke'])
1.6 自定义测试发现规则:例,忽略一些目录:pytest.main(['-s','-v','--ignore=interface_testcase'])
2 命令行模式:
2.1 运行所有,命令行直接输入:pytest
2.2 运行指定模块,命令行直接输入:pytest -vs test_login.py
2.3 运行指定目录,命令行直接输入:pytest -vs ./interface_testcase
2.4 运行指定目录,命令行直接输入:pytest -vs ./interface_testcase/test_interface.py::test_04_func
2.5 运行指定分组,命令行直接输入:pytest -m smoke
参数详解:
-s pytest默认不输出任何信息,如果要查看打印信息,需要在运行的时候添加-s指令;
-v 显示更详细的信息;
-vs 两个参数可以一起使用
-n 支持多线程或者分布式运行测试用例,如:pytest -vs ./testcase/test_login.py -n 2
-x 表示只要一个用例报错,那么测试停止
--reruns NUM 失败用例重跑
-k 根据测试用例的部分字符串指定测试用例,如:pytest -vs ./testcase -k 'ao'
--html ./report/report.html --self-contained-html 生成html测试报告,注:不加这个指令--self-contained-html,需要多生成一个布局文件,不利于移动展示,如果加上该指令,只生产一个报告文件,移动、发送邮件特别方便;
3 通过读取pytest.ini配置文件运行:这个文件是pytest单元测试框架的核心配置文件
1 位置:一般放在项目的根目录下;
2 编码:必须是ANSI,可以使用notpad++修改编码格式;
3 作用:改变pytest的默认行为;
4 运行规则:不管是主函数的模式运行、命令行运行模式、都会去读取这个配置文件。
[pytest]
addopts = -vs # 命令行参数用空格分隔
testpaths = ./testcase # 测试用例的路径
python_files = test_*.py # 模块名的规则
python_classes = Test* # 类名的规则
python_functions = test # 方法名的规则
六 pytest执行测试用例的顺序
unittest 按照ASCII的大小来绝对的执行
pytest 默认从上到下
改变默认的执行顺序:使用mark标记,,如:@pytest.mark.run(order=3)
本文来自博客园,作者:术科术,转载请注明原文链接:https://www.cnblogs.com/shukeshu/p/14624501.html