首先,我们编写的测试用例代码文件, 必须以 test_ 开头,或者以 _test 结尾。比如,我们创建一个 文件名为 test_错误登录.py ,放在目录 autotest\cases\登录下面。其中autotest是我们创建的自动化项目根目录。
class Test_错误密码:
def test_C001001(self):
print('\n用例C001001')
assert 1 == 1
def test_C001002(self):
print('\n用例C001002')
assert 2 == 2
def test_C001003(self):
print('\n用例C001003')
assert 3 == 2
如果我们把测试用例存放在类中, 则类名必须以 Test 为前缀,类中的测试用例对应的方法必须以 test为前缀。
pytest 中用例的检查点直接用Python的 assert 断言。
assert后面的表达式结果为True ,则表示检查点通过;结果为False ,则表示检查点不通过。
显示找到3个测试项,2个执行通过,1个不通过。
通过的用例 是用一个绿色小点表示, 不通过的用例用一个红色的F表示
并且会在后面显示具体不通过的用例 和不通过的检查点 代码细节。
对自动化测试框架来说,初始化清除功能至关重要。
我们在需要初始化的目录下面创建一个名为conftest.py的文件,里面内容如下所示:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pytest
@pytest.fixture(scope="session")
def login():
print("====登录功能,返回账号,token===")
name = "testyy"
token = "npoi213bn4"
yield name, token
print("====退出登录!!!====")
@pytest.fixture(autouse=True)
def get_info(login):
name, token = login
print(f"== 每个用例都调用的外层fixture:打印用户token: {token} ==")
pytest在执行 test_i2c.py 文件之前,会先执行 conftest.py 文件中的方法,然后再执行 test_i2c.py 文件。
举例说明:上述代码块中共两个方法:login()、get_info()。并且方法使用pytest.fixture()装饰器来标记,这样在其他函数、模块、类或整个工程调用它时会被激活并优先执行,通常会被用于完成预置处理和重复操作。
conftest.py的作用
首先, conftest.py 的文件名称是固定的, pytest 会自动识别该文件,我们可以理解成一个专门存放 fixture 的配置文件。
一个工程下可以建多个conftest.py文件,一般我们都是在工程根目录下设置conftest文件,这样会起到一个全局的作用。 我们也可以在不同的子目录下放 conftest.py ,这样作用范围只能在该层级的子目录下生效。
1. scope:
2. name:
fixture的重命名。通常来说使用 fixture 的测试函数会将 fixture 的函数名作为参数传递,但是 pytest 也允许将fixture重命名。如果使用了name,那只能将name传入,函数名不再生效。
3. autouse:
默认False。若为True,刚每个测试函数都会自动调用该fixture,无需传入fixture函数名。
1. 函数或类里面方法直接传fixture的函数参数名称@pytest.fixture()
2. 使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例,该方式获取不到fixture标识函数的返回值
3. 叠加usefixtures
4. autouse设置为True,自动调用fixture功能
下面具体介绍pytest.ini文件:
[pytest]
markers=
smoke:冒烟测试
huigui:回归测试
addopts= -m=dailybuild
#指定文件名称
python_files=test_*.py
#指定类名称
python_classes=Test*
#指定方法名称
python_functions=test_*
import pytest
class TestClass():
@pytest.mark.smoke
@pytest.mark.huigui
def test_one(self):
assert 1 == 1
@pytest.mark.smoke
def test_two(self):
assert 2 == 2
def test_three(self):
assert 3 == 3
import pytest
pytestmark = [pytest.mark.huigui]
class TestClass():
@pytest.mark.smoke
def test_one(self):
assert 1 == 1
@pytest.mark.smoke
def test_two(self):
assert 2 == 2
def test_three(self):
assert 3 == 3