1、编写规则:
测试方法以test_.py的文件;test_开头或者 _test的函数结尾
# 1、普通写法
def test_register(self):
assert 1==2
#2、类常规写法
class TestRegister():
def test_register(self):
assert 1==2
#3、可以兼容unittest.TestCase
class TestRegisterWithUnittest(unittest.TestCase):
def test_register(self):
assert 1==2
2、运行规则
#2.1、在项目测试case目录下执行,自动收集该目录下的所有pytest的用例:
pytest
#2.2、执行后,需要生成测试报告,生成html的格式的测试报告,并命名为output.html【pip install pytest-html】
pytest --html=output.html
#2.3、通过文件统一执行
import pytest
import time
# 获取时间戳
time = time.strftime("%Y_%m_%d_%H-%M-%S")
pytest.main([f"--html={time}report.html"])
#2.4、统一文件执行的优化
卸载pytest-html [pip uninstall pytest-html]
下载 [pip install pytest-testreport]
import pytest
pytest.main(['--report=testcase_reportname.html',
'--title=testcase_reporttitle',
'--tester=testcase_reportpreson',
'--desc=desc',
'--template=1 or 2'])
3、用例筛选
# 可以在类上使用
@pytest.mark.smoke
class TestRegister():
def test_register(self):
assert 1==2
# 也可以在函数上使用
class TestRegister():
@pytest.mark.smoke
def test_register(self):
assert 1==2
@pytest.mark.smoke
@pytest.mark.openapi
def test_register2(self):
assert 1==2
创建pytest.ini文件,将 【smoke】注册,使pytest可识别
; 该文件用于给pytestcase 作为分类
[pytest]
markers =
smoke: 冒烟测试case时使用的
openapi
suite8
oxi
运行:(仅运行smoke的所有case)
pytest -m "smoke"
pytest -m "smoke and openapi " [test_register2]
pytest -m "smoke or openapi " [test_register,test_register2]
文件运行:
pytest.main([f"--html={time}report.html"],"-m","smoke")
4、参数依赖
class TestCase():
@pytest.mark.parametrize("data", list_value)
def test_01(self, data):
assert 1==2
5、用例编写的前,后置,仿造unittest的一种方式
# 1、函数的setup,和teardown
def setup_function():
pass
def teardown_function():
pass
# 2、类的setup,和teardown
@classmethod
def setup_class(cls):
pass
@classmethod
def teardown_class(cls):
pass
#3、module级别的setup,和teardown
def setup_module():
pass
def teardown_module():
pass
6、用例编写的前后置,是pytest的夹具形式
1、新建一个conftest.py的文件
import pytest
@pytest.fixture()
def testin():
print("前置~~~")
yield "testin 返回值"
print("后置")
@pytest.fixture(scope="class")// 引用时,一个类就只会运行一次,这个函数
def testin():
print("前置~~~")
yield "testin 返回值"
print("后置")
@pytest.fixture(scope="module")// module级别的
def testin():
print("前置~~~")
yield "testin 返回值"
print("后置")
@pytest.fixture(scope="package")// 包,目录级别的
def testin():
print("前置~~~")
yield "testin 返回值"
print("后置")
@pytest.fixture(scope="session")//整个流程只会有一次
def testin():
print("前置~~~")
yield "testin 返回值"
print("后置")
@pytest.fixture(scope="session",,autouse=True)//整个流程只会有一次,且不需要饮用该夹具名称,该方法自动执行,且无返回值
def testin():
print("前置~~~")
2、使用
【******使用没有返回值的fixture在函数上使用】
@pytest.mark.usefixture("testin","testin2") //就是使用夹具了
def test_002():
assert 1 != 0
@pytest.mark.usefixture("testin") //每个函数都执行一遍
class test_case:
def test_001():
assert 1 != 0
def test_002():
assert 1 != 0
【******使用有返回值的fixture在函数上使用】
1、将fixture的函数名称,直接作为参数传递,并直接使用,不需要调用,可以直接使用
2、如果返回多个值,则接受的为一组元祖数据
3、如果没有参数,也可以通过这种方式进行获取
def test_002(testin2):
assert 1 != 0
if __name__ == '__main__':
pytest.main()
7、使用精美的allure测试报告
-
下载allure-commandline
-
运行:pip install allure-pytest
-
收集并运行测试报告:pytest --alluredir=output
会把所有的测试结果保存至output里面,以json的形式 -
生成html的测试报告:allure serve output