pytest概述
Pytest是一个使创建简单及可扩展性测试用例变得非常方便的框架。测试用例清晰、易读而无需大量的繁琐代码。只要几分钟你就可以对你的应用程序或者库展开一个小型的单元测试或者复杂的功能测试。pytest支持第三方插件,灵活性较高。
pytest特点
非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
能够支持简单的单元测试和复杂的功能测试
支持参数化
执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
支持重复执行(rerun)失败的case
支持运行由nose, unittest编写的测试case
可生成html报告
方便的和持续集成工具jenkins集成
可支持执行部分用例
具有很多第三方插件,并且可以自定义扩展
环境安装
直接安装pip install pytest就行。
文件不是很大,很快就下载完毕。
版本查看命令
pip show pytest
注意点
测试文件以test_开头(以_test结尾也可以)
测试类以Test开头,并且不能带有 init 方法
测试函数以test_开头
断言使用基本的assert即可
控制台基础示例
# 基础函数用于输入值 def test(x): return x +1 # 测试函数是由test_开头的,这里assert断言是判断结果与目标返回是否相同 def test_answer(): assert test(3)==5
基础示例使用:
可以在提示中看到,执行100%,但是出现了ERROR。第八行的结果与预期结果不符,这就代表测试用例未通过。
如果无法使用,请更换命令【python -m pytest 类名.py】,这里不限制test_开头或_test结尾。
如果是通过则会告知passed
# 基础函数用于输入值 def test(x): return x +1 # 测试函数是由test_开头的,这里assert断言是判断结果与目标返回是否相同 def test_answer(): assert test(3)==4
执行示例
文件名称【test_demo.py】,文件名必须是test_开头
import pytest class TestClass: def test_one(self): x = "this" assert "h" in x def test_two(self): x = "hello" assert len(x)==5 if __name__ == '__main__': pytest.main()
示例中能看到
但是依然建议使用cmd控制台。
pytest.main()
pytest.main()会自动读取当前目录下的所有test开头的.py文件,运行test方法或者类。
pytest的参数,例如:pytest -sv test_demo.py
-x 用例一旦失败,就立刻停止执行
--maxfile=num 用例达到多少停止执行
-m 标记用例
-k 执行包含某个关键字的测试用例
-v 打印详细日志
-s 打印输出日志 和v连用
--lf 只重新运行失败的用例
--ff 先运行失败的用例再运行正常的用例
套件执行顺序
装饰器
skip : 跳过这个用例
reason:注释/备注
# 跳过这个用例skip装饰器 @pytest.mark.skip(reason = "暂时不执行") def test_case2(): print("3这里是case2\n")
判断语句
不需要二次计算
# -*-coding:utf-8 -*- import pytest def test_A(x=2): print("%d**%d=%d",x,x,x**x) return x**x @pytest.mark.skipif(test_A() == 4 ,reason="正确不需要二次计算") def test_B(x=2): print("二次计算结果:",(x**x)) return x**x
需要二次计算
# -*-coding:utf-8 -*- import pytest def test_A(x=3): print("%d**%d=%d",x,x,x**x) return x**x @pytest.mark.skipif(test_A() == 4 ,reason="正确不需要二次计算") def test_B(x=2): print("二次计算结果:",(x**x)) return x**x
可以自行多搞一些demo做示例。