相关文章
这里主要是了解pytest的使用。
Pytest是一个非常成熟的全功能的Python测试框架,主要由一下几点:
有三种方法
pytest.main(["-s", "-v", "test_03.py::test1"])
pytest.main(["-s", "-v", "-k", "add","test_03.py"])
或者直接命令行 pytest -k func1 test.py
pytest.main(["-s", "-v", "-m", "undo","test_03.py"])
或者直接命令行 pytest -m undo test_03.py
import pytest
@pytest.mark.undo
def test_add1():
print("test1")
@pytest.mark.do
def test_sub2():
print("test2")
if __name__ == '__main__':
# pytest.main(["-s", "-v", "test_03.py::test1"])
# pytest.main(["-s", "-v", "-k", "add","test_03.py"])
pytest.main(["-s", "-v", "-m", "undo","test_03.py"])
下面是pytest.ini的配置文件
[pytest]
markers=
do: do
undo: undo
在pytest中,也可以使用参数化测试,即每组参数都独立执行一次测试。使用的工具就是pytest.mark.parametrize(argnames, argvalues)。包括列表、元组和字典来进行传参。
import pytest
# 列表
data = ['123', '456']
@pytest.mark.parametrize("pwd", data)
def test1(pwd):
print("pwd")
# 元组
data2 = [(1,2,3), (4,5,6)]
@pytest.mark.parametrize("a, b, c", data2)
def test2(a, b, c):
print(a, b, c)
# 字典
dicts = [
{
"user": 123,
"pwd": 456
},{
"user": 789,
"pwd": 101112
}
]
data4 = [
pytest.param(1,2,3, id="(a+b):pass"), # id的值可以自定义,只要方便理解每个用例是干什么的即可
pytest.param(4,5,9, id="(a+b):pass")
]
@pytest.mark.parametrize("dic", dicts)
def test3(dic):
print(dic)
def add(a,b):
return a+b
class TestParametrize(object):
@pytest.mark.parametrize("a, b, expect", data4)
def test_patam(self, a, b, expect):
assert add(a, b) == expect
if __name__ == '__main__':
pytest.main(["-s", "-v", "test_04.py"])
**目的:**是前后置的方法,可以实现部分以及全部用例的前后置。
如果要实现后置,则需要加上yield-(yield是生成器,可以生成一个可以迭代的数组,然后循环,所以是可以返回的)yield和return都可以返回,return后面没有代码,而yield后面可以有代码。
@pytest.fixture(),包含五个参数
import pytest
@pytest.fixture()
def init():
print("init")
return 1
def test1(init):
print("test1")
def test2(init):
print("test2")
if __name__ == '__main__':
pytest.main(['-s','-v',"test_05.py"])