pytest是一个python的一个自动化测试框架,主要用于单元测试和功能测试。
java: junit 或者 testng
python: unittest 或者 pytest
pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:
1.免费
2.简单灵活,容易上手,文档丰富
3.插件丰富,目前已有600+
4. 支持参数化,可以有效的控制测试用例。
5. 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests。
6、可以很好的和CI工具结合,例如jenkins
7.Pytest可用于在API,数据库等上测试各种应用程序
8.Pytest能够在测试执行期间从所有测试方法中跳过一些测试方法
9.Pytest可以根据条件选择运行特定的测试方法或特定测试文件的所有测试方法
首先用命令行查看是否已经安装:
pip list
如果没有安装用命令行进行安装:
pip install pytest
检查是否安装了正确的版本:
pytest --version
查看有哪些命令参数:
pytest --help
创建一个.py 文件,写入如下代码:
def add(x,y):
return x+y
def test1():
assert 2==add(1,1)
def test2():
assert 1!=add(1,1)
打开终端用pytest执行文件代码:
pytest -vv D:\pythonProject1\test_func.py
def add(x,y):
return x+y
def test1():
assert 3==add(1,1)
def test2():
assert 1!=add(1,1)
用pytest再次执行:
pytest -vv D:\pythonProject1\test_func.py
import pytest
def add(x,y):
return x+y
def test1():
assert 2==add(1,1)
def test2():
assert 1!=add(1,1)
def func(x):
if x==0:
raise ValueError("value error")
else:
pass
def test_mytest1():
with pytest.raises(ValueError):
func(0)
def test_mytest2():
assert func(1)==None
用pytest执行代码:
import pytest
def add(x,y):
return x+y
def test1():
assert 2==add(1,1)
def test2():
assert 1!=add(1,1)
def func(x):
if x==0:
raise ValueError("value error")
else:
pass
def test_mytest1():
with pytest.raises(ValueError):
func(0)
def test_mytest2():
assert func(1)==None
@pytest.mark.parametrize(
"x,y,expected",
[
(1,1,2),
(2,2,4),
(10,10,20),
]
)
def test_add(x,y,expected):
assert add(x,y) == expected
用pytest执行代码:
如果测试文件中有100个函数,但是我仅仅想测试其中几个函数,如何去做?这就需要对这些函数进行分组,用到的命令如下:
pytest --markers
import pytest
def add(x,y):
return x+y
@pytest.mark.a
def test1():
assert 2==add(1,1)
@pytest.mark.a
def test2():
assert 1!=add(1,1)
def func(x):
if x==0:
raise ValueError("value error")
else:
pass
def test_mytest1():
with pytest.raises(ValueError):
func(0)
def test_mytest2():
assert func(1)==None
@pytest.mark.parametrize(
"x,y,expected",
[
(1,1,2),
(2,2,4),
(10,10,20),
]
)
def test_add(x,y,expected):
assert add(x,y) == expected
执行代码:
pytest -vv -m "a"