一安装:
pip安装,使用以下命令安装pytest:
pip install pytest
创建一个文件这里我起名叫Testpytest.py,新建以后默认有上面那段注释,方法为在File - Settings - Editor - File and Code Templates路径
#-*- codeing = utf-8 -*-
#@Time: ${DATE} ${TIME}
#@Author: 你的名字
#@File: ${NAME}.py
#@Software: ${PRODUCT_NAME}
二:基础运行命令
新建一个函数返回入参相加,创建一个测试类,测试类要以Test开头,没有__init__函数(会报错cannot collect test class 'TestClass' because it has a __init__ constructor ):
def add(x, y):
return x + y
class TestClass(object):
# 测试是否符合预期
def test_add(self):
assert add(1,2) == 3
在控制台运行pytest Testpytest.py命令,下图中的.表示有一个用例通过。
pytest Testpytest.py #pytest框架执行Testpytest.py文件中找到以 test 开头函数并执行
如果只运行pytest则会查找当前目录及其子目录下以 test_*.py 或 *_test.py 文件,找到文件后,在文件中找到以 test 开头函数并执行。我们的名字为Testpytest所以不会被找到。
修改我们的文件名为test_pytest.py(test_*.py或者*_test.py),再次运行pytest发现找到了文件并执行其中的test函数。
加参数:
-v用于显示每个测试函数的执行结果,从输入中可以看到执行了test_pytest.py文件TestClass类的test_add方法,由此引出直接运行方法的命令,新加一个函数test_true。
def add(x, y):
return x + y
class TestClass(object):
# 测试是否符合预期
def test_add(self):
assert add(1,2) == 3
def test_true(self):
assert 1==1
运行命令pytest -v test_pytest.py::TestClass::test_true,可以看到只运行了test_true函数,运行pytest -v test_pytest.py::TestClass,则会执行TestClass下面两个函数。
pytest -v test_pytest.py::TestClass
def add(x, y):
return x + y
class TestClass(object):
# 测试是否符合预期
def test_add(self):
print("测试test_add")
assert add(1,2) == 3
def test_true(self):
print("测试test_true")
assert 1==1
执行
pytest -v test_pytest.py::TestClass
,可以看到是没有输出的,
执行 pytest -s test_pytest.py::TestClass
pytest -s -v test_pytest.py::TestClass
可以看到我们测试方法里面的输出语句也输出了。
-k 模糊匹配
新增一个函数为TestClass2,执行命令pytest -v -s -k "Two",-k “类名”表示任意位置模糊匹配类名的所有类,并执行匹配到的这些类的所有方法。
def add(x, y):
return x + y
class TestClassOne(object):
# 测试是否符合预期
def test_add(self):
print("测试test_add")
assert add(1,2) == 3
def test_true(self):
print("测试test_true")
assert 1==1
class TestClassTwo(object):
# 测试是否符合预期
def test_addTwo(self):
print("测试test_add2")
assert add(1,2) == 3
def test_trueTwo(self):
print("测试test_true2")
assert 1==1
-k “方法名”表示任意位置模糊匹配方法名的所有方法,并执行匹配到的这些方法,执行pytest -v -s -k "test_trueTwo",执行了匹配的函数。
上面是网上看到的,经过我自己测试发现-k "关键字"里面实际是同时匹配方法和类,修改代码如下。执行命令pytest -v -s -k "Two",同时匹配了类和方法。
def add(x, y):
return x + y
class TestClass(object):
# 测试是否符合预期
def test_addTwo(self):
print("测试test_add")
assert add(1,2) == 3
def test_true(self):
print("测试test_true")
assert 1==1
class TestClassTwo(object):
# 测试是否符合预期
def test_addTwo(self):
print("测试test_add2")
assert add(1,2) == 3
def test_trueTwo(self):
print("测试test_true2")
assert 1==1
-k “类名 and not 方法名表示任意位置模糊匹配类名的所有类,并执行匹配到的这些类的所有方法,但不会执行任意位置模糊匹配的方法。执行命令pytest -v -s -k "Class and not add"。可以看到执行了两个类里面函数名没有add的方法。
pytest -s -k "关键字 or 关键字"同时匹配不同的用例名称,
pytest -v -s -k "TestClass1 or test_addTwo"
pycharm运行pytest,设置路径如下:File->settings->python integrated tools->Testing。
右键运行。可以看到我们运行默认使用了py test测试框架调用了当前文件。
如果不想修改默认测试单元,可以添加以下命 令,注意看参数传法。 #-*- codeing = utf-8 -*- #@Time: 2021/8/19 0:05 #@Author: 怪盗LYL #@File: test_pytest.py #@Software: PyCharm import pytest def add(x, y): return x + y class TestClass1(object): # 测试是否符合预期 def test_add(self): print("测试test_add") assert add(1,2) == 3 def test_true(self): print("测试test_true") assert 1==1 class TestClassTwo(object): # 测试是否符合预期 def test_addTwo(self): print("测试test_add2") assert add(1,2) == 3 def test_trueTwo(self): print("测试test_true2") assert 1==1 if __name__ =="__main__": pytest.main(["-s","-v"])
以上就是pytest基础用法啦, 参考了 https://www.cnblogs.com/longronglang/p/13843840.html 这个博客。