pyest自动化框架之测试用例

1. 测试用例编写规范

  • 测试用例包pakege必须要有__init__.py文件

  • 测试文件名必须以“test_”开头或者以”_test”结尾

  • 测试类命名以Test开头

  • 测试方法必须以“test_开头

  • 使用assert断言

注意:
类中不能定义__init__方法

import pytest

class TestDemo:
# 测试类的命名Test
    def add(self,a,b):
        return a + b
    def test_demo_01(self):
 	#测试用例命名test_
        assert self.add(1, 2) == 3
    def test_demo_02(self):
        assert self.add(9, 2) == 12

if __name__ == '__main__':
        pytest.main()
        #执行测试用例
        

2. 测试用例夹具–fixture

fixture是pytest提供的一种机制,用于在测试之前和之后执行一些代码,并且可以共享设置和清理代码。

例如 :定义一个fixture来提供一个数据库连接

import pytest
import pymsql
 
@pytest.fixture()
def db_connection():
    conn = pymysql.connect(host="localhost", dbname="dbname", user="user", password="password")
    yield conn
    conn.close()
# 这里使用了yield语句来表示“teardown”阶段需要关闭连接。然后可以在测试函数中使用该fixture

def test_db(db_connection):
    cursor = db_connection.cursor() #创建游标
    cursor.execute("SELECT*")# 执行SQL语句查询
    result = cursor.fetchone() #接收查询结果
    assert result == (1,)

1. 测试夹具的级别和定义

\qquad 测试夹具需要使用pytest.fixture这个装饰器来定义,pytest中的测试夹具有如下几个级别:用例级别、测试类级别、模块级别,包级别,会话级别。接下来我们一起来看看夹具定义语法。

夹具定义可以通过参数scope指定夹具的级别,如果不指定夹具级别,scope 默认值为function(用例级别)
用例级别:scope = function
测试类级:scope = class
模块级别:scope = module
包级别: scope = package
会话级别:scope = session

@pytest.fixture(scope='指定夹具的级别')
def work():
    # 前置执行脚本
    yield 
    # 后置执行脚本

2. 在用例中使用夹具

\qquad 不管是函数形式定义的测试用例,还是测试类中方法的形式定义的用例,在使用的时候都是一样的,直接定义一个和要使用的夹具同名的形参即可

1. 测试用例中个使用夹具

import pytest
 
# 定义一个用例级别的夹具
@pytest.fixture
def my_fixture():
    print('------my_fixture---用例前置执行脚本--------')
    yield
    print('------my_fixture---用例后置执行脚本--------') 
# 函数用例 指定测试夹具
def test_func__01(my_fixture):
    print("测试用例----test_func__01----")
    
class TestDome:
    # 函数用例 指定测试夹具
    def test_02(self, my_fixture):
        print('----测试用例:test_02------')
        
     # 函数用例 指定测试夹具
    def test_03(self):
        print('----测试用例:test_03------')

2. 测试类中使用夹具

# TestDome这个测试类的所有测试用例均执行my_fixture这个夹具
@pytest.mark.usefixtures('my_fixture这个夹具')
class TestDome:
    # 函数用例 指定测试夹具
    def test_02(self):
        print('----测试用例:test_01------')
 
    # 函数用例 指定测试夹具
    def test_03(self):
        print('----测试用例:test_02------')

3. 测试模块级别 指定模块所有用例执行的夹具

# test_demo.py
 
# 当前模块中所有的用例,均执行my_fixture这个测试夹具
pytestmark = pytest.mark.usefixtures('my_fixture')
 
# 函数用例 指定测试夹具
def test_func__01(my_fixture):
    print("测试用例————test_func__01——————")
 
    
class TestDome:
    # 函数用例 指定测试夹具
    def test_02(self):
        print('----测试用例:test_01------')
 
    # 函数用例 指定测试夹具
    def test_03(self):
        print('----测试用例:test_02------')

4. 夹具中引用夹具

吃水不忘挖井人
@软件测试凡哥
可以用来鉴权
import pytest
# 用户注册的夹具
@pytest.fixture
def register_user():
    print('---用户注册的夹具前置执行----')
    # ...注册代码省略,注册的用户信息如下
    user_info = {'user': 'lemonban', 'pwd': '123456'}
    yield user_info
    print('---用户注册的夹具后置执行----')
 
 
# 用户登录的夹具,通过定义形参来使用register_user这个夹具
@pytest.fixture
def user_login(register_user):
    print('---用户登录的夹具前置执行----')
    # 获取register_user结局前置脚本执行完,yeild传递出来的数据
    user_info = register_user
    # ...登录代码省略,下面为登录得到的token
    token = 'sdjasjdask'
    yield token
    print('---用户登录的夹具后置执行----')
 
# 函数用例 指定使用测试夹具user_login
def test_func__01(user_login):
    token = user_login
    print("测试用例夹具user_login传递过来的token:",token)
    print("测试用例---test_func__01---")

4. 自动运行的夹具

import pytest
 
 
@pytest.fixture(autouse=True)
def my_fixture():
    print('------my_fixture---前置执行脚本--------')
    yield
    print('------my_fixture---后置执行脚本--------')
 
 
class TestDome:
    # 函数用例 指定测试夹具
    def test_02(self):
        print('----测试用例:test_01------')
 
    # 函数用例 指定测试夹具
    def test_03(self):
        print('----测试用例:test_02------')
 
 
class TestDome2:
    # 函数用例 指定测试夹具
    def test_03(self):
        print('----测试用例:test_03------')

5. 在模块(*.py文件)中定义夹具

# conftest.py
 
import pytest
 
@pytest.fixture
def my_fixture():
    print('------my_fixture---前置执行脚本--------')
    yield
    print('------my_fixture---后置执行脚本--------')
#在test_demo1.py的用例用使用conftest.py中定义的夹具
# test_demo1.py
class TestDome:
    # 函数用例 指定测试夹具
    def test_02(self,my_fixture):
        print('----测试用例:test_01------')
 
    # 函数用例 指定测试夹具
    def test_03(self,my_fixture):
        print('----测试用例:test_02------')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值