pytest框架要执行用例,必须以模块test开头,函数test开头,类Test开头,否则不被执行;
pytest的执行 :
执行package:python -m pytest -v test/
执行模块下的测试用例:python -m pytest -v tests/test_login.py::test_login_001
执行模块下的类:python -m pytest -v test/test_login.py::TestBaidu
执行类下的方法:python -m pytest -v test/test_login.py::TestBaidu::test_login_001s
按照方法名来筛选要执行的方法用k,后面加--collect-only查看筛选情况:python -m pytest -v -k "profile or register" --collect-only,取消--collect-only后进行执行,如果将前面的or换成and,那么执行的就是名字中既有profile又有register的函数;
-m是以增加装饰器的形式进行分组,python -m pyetst -v -m "login or logout“
import pytest @pytest.mark.login def test_login_001(): pass @pytest.mark.login def test_login_002(): pass @pytest.mark.login def test_login_003(): pass @pytest.mark.logout def test_logout_001(): pass @pytest.mark.logout def test_logout_002(): pass @pytest.mark.profile def test_profile_001(): pass @pytest.mark.profile def test_profile_002(): pass
-x失败后立即停止:
python3 -m pytest -v -x test_login.py
pytest.mark.skip(reason="写跳过的原因")
pytest参数化,如果类列表中的数据类型是字典,那么参数化时字典中的key值不能被一一写出,所有都要用data代替@pytest.mark.parametrize('data',被调用函数)
def dataDict(): datas=[ {'a':1,'b':1,'result':2}, {'a':'a','b':'b','result':'ab'}, {'a':0,'b':0,'result':0}, {'a':2,'b':2,'result':4}, {'a':'x','b':'y','result':'xy'}, ] return datas @pytest.mark.parametrize('data',dataDict()) def test_add_dict(data): assert add(a=data['a'],b=data['b'])==data['result']