pytest简单使用,编写用例以及参数化(笔记)

一、pytest执行方式:

1. pytest的main函数执行

 pytest.main(["-s","-v",...])

2. 命令行直接执行

pytest -s -v 

二、pytest的常用命令行参数

-s :执行时显示用例中print打印结果

-v :更详细的显示用例执行情况

-x :出现失败的用例后就停止运行;配合-maxfail=5 参数可以配置失败5次才停止

-m:只运行mark标记的用例(标记方法为@pytest.mark.xxx)

-q :简化输出,正与-v参数相反

pytest.ini常用配置(注:执行命令时pytest.ini必须在目录的根目录下才会识别)

[pytest]
addopts = -vs --alluredir ./py_report
testpaths = ./case
python_files =  *case*.py
python_classes = Test*
python_functions = test_*

addopts:命令执行默认追加的参数

testpaths:指定从哪个路径下扫描case

python_files:指定扫描的py文件格式

python_classes:指定扫描的class的名称

python_functions:指定扫描方法(用例)的名称

三、编写测试用例实用方法

1. 基本用法

class StreamCase:
    def setup_class(self):
        print("类前置:setup_class")

    def teardown_class(self):
        print("类后置:teardown_class")

    def setup(self):
        print("方法前置:setup_method")

    def teardown(self):
        print("方法后置:teardown_method")

    def test_01(self):
        print("test01测试用例执行~")

    def test_02(self):
        print("test02测试用例执行~")

 由执行结果可以看出执行顺序是:setup_class > setup > 用例方法 > teardown > teardown_class

2. 高阶用法

1)pytest之fixture

@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)

以上为默认的参数,常用的参数如下:

scope参数:
   scope="function":作用于每个测试方法,每个test都运行一次
   scope="class":作用于整个类,每个class的所有test只运行一次
   scope="module":作用于整个模块,每个module的所有test只运行一次
   scope="session":作用于整个session(慎用),每个session只运行一次
params参数:为以后的方法提供参数
autouse参数(一般与scope搭配使用):是否自动运行,默认为False不运行,设置为True自动运行

应用:给调用它的方法提供数据

import pytest

@pytest.fixture(params=[1,2,3])
def get_param(request): # 传入参数request 系统封装参数 必须用request
    return request.param  # 取列表中单个值,默认的取值方式

def test_f(get_param):
    print("test_f运行")
    assert get_param == 2 

 结果是test_f方法获取到了params中的每个值并进行断言

1)pytest之参数化:

@parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

以上为默认的参数,常用的参数是前两个:

argnames:参数名
argvalues:参数对应值,类型必须为list
     @pytest.mark.parametrize("参数1,参数2",[(值11,值12),(值21,值22)])

应用:参数化常用到

import pytest

@pytest.mark.parametrize("p1,p2", [(1, 9), (2, 8), (3, 7)])
def test_param(p1, p2):
    print("p1=", p1, ",p2=", p2, "和=", p1 + p2)
    assert p1 + p2 == 10

 结果是test_param方法获取到p1、p2,值对应list中的元组的每个值

实用技巧,argvalues是list格式,也可以用方法返回一个list然后调用这个方法获取list,做关联的时候可能会用到

import pytest

def get_param():
    return [(1, 9), (2, 8), (3, 7)]

@pytest.mark.parametrize("p1,p2", get_param())
def test_param1(p1, p2):
    print("p1=", p1, ",p2=", p2, "和=", p1 + p2)
    assert p1 + p2 == 10

效果和上面是一样的。

3)pytest之conftest.py

pytest有一个自动识别机制不需要导包就可以使用写在conftest.py文件下面的方法

前提条件:

1. conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件

2.  conftest.py配置脚本名称是固定的,不能改名称

3. conftest.py文件不能被其他文件导入

4. 所有同目录测试文件运行前都会执行conftest.py文件

利用这个机制可以将上面说的fixture写到conftest.py文件中,还可以将返回参数list的方法写到conftest.py文件中,在用例想用的时候可以直接调用,无需导包。

因为allure支持pytset,之后使用过程中往往会结合allure生成测试报告,后续需要学习allure中的一些常用技巧也会做成笔记,相互学习!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以根据以下场景编写pytest自动化测试用例: 1. 测试两个正整数相加的结果是否正确; 2. 测试两个负整数相加的结果是否正确; 3. 测试一个正整数和一个负整数相加的结果是否正确; 4. 测试两个小数相加的结果是否正确; 5. 测试一个整数和一个小数相加的结果是否正确; 6. 测试两个大数相加的结果是否正确; 7. 测试输入非数字字符时是否会抛出异常; 8. 测试输入为空时是否会抛出异常; 9. 测试输入超过两个数字时是否会抛出异常; 10. 测试输入为科学计数法时是否会正确计算。 以下是一个示例的pytest自动化测试用例: ```python import pytest from calculator import add def test_add_positive_numbers(): assert add(2, 3) == 5 def test_add_negative_numbers(): assert add(-2, -3) == -5 def test_add_positive_and_negative_numbers(): assert add(2, -3) == -1 def test_add_decimal_numbers(): assert add(2.5, 3.7) == 6.2 def test_add_integer_and_decimal_numbers(): assert add(2, 3.7) == 5.7 def test_add_large_numbers(): assert add(99999999999999999999999999999999999999999999999999999999999, 1) == 100000000000000000000000000000000000000000000000000000000000 def test_add_non_numeric_input(): with pytest.raises(TypeError): add("2", "3") def test_add_empty_input(): with pytest.raises(ValueError): add("", "") def test_add_more_than_two_numbers(): with pytest.raises(ValueError): add(1, 2, 3) def test_add_scientific_notation_numbers(): assert add(1e5, 2e-3) == 100.002 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值