pytest是python的一种单元测试框架,同自带unittest框架类似,功能,效率更强大
特点:
- 非常容易上手,入门简单,丰富的文档
- 支持参数化
- 执行测试用例的过程中,跳过某些用例,标记失败的用例
- 支持重复执行失败的用例
- 便于管理用例,方便和持续集成工具一起集成,便于生成测试报告
- 有很多的第三方插件,并且可以随意自动以扩展
pytest-html(生成html报告)
pytest-xdist(多线程运行)
pytest-ordering(控制用例的执行顺序)
pytest-rerunfailures(失败用例重跑)
allure-pytest(生成allure报告)
pytest-base-url(管理基础路径)
pytest(框架本身)
首先会在项目线面新建一个:requirements.txt 文件
把以上插件配置放在文件当中
输入安装命令:
pip install – r requirements.txt
1,模块名(文件名py)必须要以test开头或者test结尾
2,测试类必须要以Test开头,并且不能有init方法
3,测试用例必须也要以test开头
1,命令行执行:pytest
2,使用主函数执行:新建一个run文件
import pytest
if __name__ == '__main__':
pytest.main()
3,通过pytest.ini全局配置文件执行
[pytest]
输出格式内容
addopts = -vs
指定测试用例的文件夹
testpaths = ./testcases
指定的模块规则
python_files = test_*.py demo_*.py
修改默认的类规则
python_classes = Test* Demo*
修改默认的测试用例规则
python_functions = test_* demo_*
注意事项:如果全局配置文件写入了中文,那么记得右下角修改编码格式(utf-8改成gbk)
无条件跳过
@pytest.mark.skip(reason="版本原因")
def test_02(self):
print("这是第2条登录测试用例")
有条件跳过
@pytest.mark.skipif(2>10,reason="反例跳过")
def test_03(self):
print("这是第3条登录测试用例")
注意:条件成立跳过,条件不成立就执行
默认情况是按照文件名,测试时用力的从上到下的顺序执行
如果需要改变执行顺序:pytest-ordering插件可以改变默认的用例执行顺序
@pytest.mark.run(order=2)
def test_02(self):
print("这是第2条登录测试用例")
标记预期会出现的异常,只有出现异常才对,不出现异常反而不对
@pytest.mark.xfail(reason="0不能当做被除数")
def test_03(self):
print(1/0)
print("这是第3条登录测试用例")
对于相似的过程,但数据不一样的时候,可以使用参数化
@pytest.mark.parametrize(["a", "b"], [(1, 2), (3, 4), (5, 6), (9, 8), (7, 66)])
def test_04(self, a, b):
assert a * b > 100
类夹具,方法夹具,函数夹具,模块夹具
def setup_class(self):
print("类执行之前")
def teardown_class(self):
print("类执行之后")
def setup(self):
print("方法(用例)夹具执行之前")
def teardown(self):
print("方法(用例)夹具执行之后")
方法夹具更新之后的用法
def setup_method(self):
print("方法(用例)夹具执行之前")
def teardown_method(self):
print("方法(用例)夹具执行之后")
fixture的语法:
1,方法夹具
@pytest.fixture(scope="function",autouse=True)
def exe_sql():
print("执行sql语句")
yield
print("关闭数据库")
2,类夹具需要手痛调用自定义夹具
核心:自定义夹具
@pytest.fixture(scope="class", autouse=True)
def exe_sql():
print("执行sql语句")
yield
print("关闭数据库")
@pytest.mark.usefixtures("exe_sql")
class Testlogin:
3,模块级别
@pytest.fixture(scope="module", autouse=True)
def exe_sql():
print("执行sql语句")
yield
print("关闭数据库")
@pytest.mark.usefixtures("exe_sql")
class Testlogin:
4,session会话级别
@pytest.fixture(scope="session", autouse=True)
整个文件是专门用来存放fixture夹具的代码内容,名字是固定的
不需要做任何导包,不管是在根目录,还是在用例目录,还在模块目录,都会被自动调用
执行顺序:从最里面内层执行,从上道下,如果是同一个conftest那么按照,夹具的ASCII编码先后执行
做为一名自动化软件测试,接下来我想分享一下这些年来,我对于技术一些归纳和总结,和自己对作为一名高级测试者需要掌握那些技能的笔记分享,希望能帮助到有心在技术这条道路上一路走到黑的朋友!
Original: https://blog.csdn.net/ZangKang1/article/details/128239287
Author: 一个处女座的测试
Title: pytest自动化测试框架详解+mark标记+fixture夹具
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/772071/
转载文章受原作者版权保护。转载请注明原作者出处!