Java教程

【金秋打卡】第13天+PyTest框架学习

本文主要是介绍【金秋打卡】第13天+PyTest框架学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

课程名称

全能软件测试工程师

课程章节

PyTest测试框架

课程讲师

大周

课程内容

PyTest断言

assert ...

PyTest参数化

import pytest

def add(a, b):
    return a + b

# 第一种实现参数化的写法
@pytest.mark.parametrize(['x','y'],[(1,2),(0,3),(1,4)])
def test_add1(x, y):
    ...
# 第二种参数化的写法
xy = [(-1,3),(-1,4),(1,-4)]
@pytest.mark.parametrize(['x','y'],xy)
def test_add2(x,y):
    ...

PyTest测试用例组织

pytest用例默认执行顺序是从上到下

执行顺序通过装饰器设置:

@pytest.mark.run(order=1)
@pytest.mark.first # 优先级最高,但不推荐同时使用,容易产生冲突

在优先级方面

  • 正数 :pytest.mark.first是最高优先级
  • 倒数: pytest.mark.last优先级要低于order=-1

如果我们在进行标记顺序时,假设我们采用了数字的形式,那么就都用数字

PyTest指定运行测试用例

if __name__ == "__main__":
    #根据路径指定运行模块或文件夹
    # pytest.main(['test_pytest1.py'])
    # pytest.main(['test_my_case/test_pytest1.py'])
    # pytest.main(['test_my_case'])
    #指定运行模块下的测试函数或者测试类
    # pytest.main(['test_pytest4.py::test_01'])
    # pytest.main(['test_pytest4.py::TestLogin::test_05'])
    #指定多个测试模块运行
    # pytest.main(['test_pytest4.py::TestLogin::test_05',
    #              'test_pytest4.py::test_01'])

PyTest前置和后置操作

setup_class和teardown_class
该方法表示在类中执行测试用例前,只执行1次测试前置和测试后置

setup_method和teardown_method
该方法表示在类中每次执行测试用例前,测试前置和测试后置都会执行一次

 setup_module和teardown_module
该方法表示只能类外面执行用例过程中,只执行1次。

setup_function和teardown_function
该方法表示在类外面执行用例过程中,每次都会执行前置和后置

1、setup_class和setup_module执行用例时,只执行一次前置和后置
2、setup_class、setup_method、setup是在类中执行的
3、setup_module、setup_function、setup是在类外执行的
4、其中setup类中、类外都可以执行

Fixture

fixture是pytest特有的功能,它用pytest.fixture标识,定义在函数前面。在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。
fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余。

Fixture多应用

  • 同一个fixture返回多个值:可以使用元组解包
@pytest.fixture
def first_fixture():
    return 1,2,3
def test_case1(first_fixture):
    a,b,c = first_fixture
    print(a,b,c)
  • 一个函数传入多个fixture
@pytest.fixture
def second_fixture():
    print("这是第二个fixture")

def test_case2(first_fixture,second_fixture):
    print(first_fixture)
    print(second_fixture)

Fixture作用域与自动化

  • fixture里面有个scope参数可以控制fixture的作用范围:session > module > class > function
  • 当我们使用fixture时,把scope的值设置成class时,每一个测试类之前都会被运行,pytest在每个测试函数的外层会自动的把函数包装成一个测试类
  • 在使用fixture时,scope=function时,无论时在函数中,还是在方法中,都是作用域为funtion在生效
  • 在我们使用的最新的Python版本中,去掉了scope=method这个作用域

Fixture实现参数化

import pytest

# fixture实现参数化

test_case = [
    {
        'username':'admin',
        'password':'12345678',
        'case_desperation':'正确登录'
    },
    {
        'username': 'imooc',
        'password': '12345678',
        'case_desperation': '错误的登录'
    },
]
@pytest.fixture(params=test_case)
def param_data(request):
    # request是pytest内置的fixture,必须这样写才能传进来
    # 它的作用主要就是用来帮助我们传递参数
    return request.param

def test_param(param_data):
    usernmae = param_data.get('username')
    password = param_data.get('password')
    case_desperation = param_data.get('case_desperation')
    print("username:"+usernmae+", password:"+password+", case_desperation:"+case_desperation)

Fixture实现测试控制

  1. 无理由跳过
@pytest.mark.skip
def function():
    ...
  1. 有理由跳过
@pytest.mark.skipif(...)
def function():
    ...

Fixture集成Allure

# 生成测试数据
if __name__ == "__main__":
    pytest.main([
          'test_pytest13.py',
          '--alluredir',
          './result'
    ])
  # 生成allure报告
  os.system("allure generate ./result -o ./report_allure --clean")

  # 直接在默认浏览器中打开测试报告
  allure open ./report

课程收获

学习了PyTest测试框架。

图片描述

这篇关于【金秋打卡】第13天+PyTest框架学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!