文章目录
- 1.Pytest是什么
- 2.Pytest的安装
- 3.Pytest快速入门
- 4.Pytest文件规范
- 5.常用的断言类型
1.Pytest是什么
pytest
是一个功能强大且灵活的 Python 测试框架,主要优点包括简洁易用、自动测试发现、丰富的插件生态系统、参数化测试、详细的断言错误信息、以及强大的 fixtures 机制。
2.Pytest的安装
对于所有的第三方库都可以使用pip install xxx
进行安装.
对于pytest的安装,可以直接在pycharm中打开终端,输入
pip install pytest
即可开始安装.如果下载比较慢可以使用国内镜像源进行下载
3.Pytest快速入门
创建一个pytest_learn的包,在包下面创建test_demo1.py
:
输入以下内容:
def test_one():
assert 1 == 1
然后在命令行中输入pytest
运行结果:
可以看到找到了一条测试用例以及文件路径,一条测试用例通过加上执行的时间
将文件内容改成:
def test_one():
assert 1 == 2
再次执行:
可以看到这里就报错了,有很明显的红色,红线中的内容就是错误的原因
除了上述运行pytest用例的方式,还可以旁边的小三角执行用例
不过这种方式只适合单个测试用例的执行
如果没有小三角,可以在设置中进行配置
4.Pytest文件规范
⭐文件命名规范:
.py
测试文件必须以“test_
”开头或者以“_test
”结尾- 测试方法必须以“
test_
”开头 - 测试类必须以
Test
开头,并且不能有init方法
如果命名不规范就会造成找不到测试用例的情况
我这个包下面有两个文件,一个符合规范,一个不符合规范.
两个文件中都写好了对应的用例
在命令行中输入pytest 加上路径
可以看到只执行了一条测试用例.
但是如果直接执行具体的文件下面,即使文件命名不规范但是方法命名规范也是可以执行的,如图所示:
如果文件是以test_开头,默认就是以pytest去运行的
如果不想用pytest去运行,有两种解决方案:
-
修改文件名称
-
在设置中修改测试框架为Unittests
测试类必须以Test
开头,并且不能有init方法
例如:
class TestCase:
def __init__(self):
pass
def test_1(self):
assert 1==1
def test_2(self):
assert "a" == "abc"
运行结果:
执行测试类中的测试用例的方法除了在命令行中输入pytest "想要运行文件的测试路径"和点击测试类的小三角之外,还可以创建main方法
if __name__ == '__main__':
pytest.main()
运行main方法即可
5.常用的断言类型
- 基本等价性检查:
assert x == y
: 检查变量x是否等于y。assert x != y
: 检查变量x是否不等于y。assert x is y
: 检查变量x和y是否引用相同的对象。assert x is y
: 检查变量x和y是否引用不相同的对象。
- 集合操作:
assert x in y
: 检查x是否是y的成员。assert x not in y
: 检查x是否不是y的成员。
- 比较操作:
assert x < y
: 检查x是否小于y。assert x > y
: 检查x是否大于y。assert x <= y
: 检查x是否小于或等于y。assert x >= y
: 检查x是否大于或等于y。
示例:
def test_3(self):
assert 1 == 1
assert 1 != 2
assert 1 < 2
assert 2 > 1
assert 3 >= 3
assert 3 <= 3
assert "a" in "abc"
assert "a" not in "xxx"
e = [1, 2, 3]
f = e
g = [2, 3, 4]
assert e is f
assert g is not f