pytest学习

一、pytest 安装

安装:pip install pytest

查看版本:pytest --version

二、简单测试

1、创建testcase.py,编写一个测试用例

def test(a):
    assert a == 1 #使用assert 判断测试用例是否成功

 2、运行

仅运行一个文件:pytest test.py

运行目录下所有测试用例:pytest testcase/

运行单个测试用例:pytest test_login.py::test_1(函数形式测试用例)

                                 pytest tets_login.py::TestClass::test_1

运行并生成allure result:pytest -s --alluredir=./allure-results

allure报告转化可是html:allure generate -c -o allure-report /allure-results

三、pytest参数

1、pytest -k

执行某个关键字的用例
用例要匹配给出的表达式;使用python的语法,匹配的范围是文件名、类名、函数名为变量,用and来区分

pytest -k "test and TestClass and not test_a" # 表示测试TestClass 不包含test_a

2、--maxfail=num

当失败测试用例到达指定数字时,退出测试

3、-m MARKEXPR

 只能运行有相应标识的测试用例,使用这个参数,测试用例要使用@pytest.mark.makername修饰

运行多个maker标记时

pytest -m "maker1 or maker2" 运行maker1 或maker2 标识的用例

pytest -m "maker1 and maker2" 运行maker1 和 maker2 标识的用例

pytest -m "maker1 and not maker2"运行maker1 和不包含 maker2 标识的用例

4、-v --verbose 

详细结果

5、-q --quiet

简化结果显示,简化控制台输出,使用 .. 表示pass结果

6、-s

输出调试信息,比如print

7、-v

输出更加详细的测试执行信息

8、--junit-xml=path

输出xml文件格式

9、--result-log=path

测试结果输出到本地

四、pytest 使用规则

pytest可以在不同的函数、包中发现用例,发现的规则如下

  • 文件名以test_开头的py文件
  • 以test_开头的函数
  • 以Test开头的类
  • 以test_开头的方法(与2类似)
  • 要注意的是所有的包必须要有init.py文件(在使用各种编辑器时会自动生成

五、setup和teardown 

主要分为:模块级、类级、功能级、函数级

  • 函数级别setup()/teardown():运行于测试方法的始末,即:运行一次测试函数会运行一次setup和teardown
  • 类级别:运行于测试类的始末,即:在一个测试内只运行一次setup_class和teardown_class,不关心测试类内有多少个测试函数。

六、fixture 

1、fixture主要功能及使用

  1. 传入测试中的数据集
  2. 配置测试前系统的初始状态,
  3. 为批量测试提供数据源

使用@pytest.fixture()装饰器声明fixture,pytest首先会检车到fixture函数,并在测试函数之前执行fixture,fixture完成一些测试之前的工作,也可以返回数据给其他测试函数

2、通过conftest.py 共享fixture

         如果fixture只针对test_one.py这个文件,仅需把fixture放到该文件即可

        如果testcase文件夹中多个文件都需要共享fixture,就需要在该文件夹下建立conftest.py,conftest.py的作用域是同级文件或文件夹,及同级文件夹里面的文件

3、fixture 作用范围

fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function,使用方式pytest.fixture(scope='function')

-function:每一个函数或方法都会调用

-class:每一个类调用一次,一个类中可以有多个方法

-module:每一个.py文件调用一次,该文件内又有多个function和class

-session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module

4、yield 方法

使用yield关键字可以实现setup/teardown的功能,在yield关键字之前的代码在case之前执行,yield之后的代码在case运行结束后执行

@pytest.fixture()
def login():
    print("登录")
    yield
    print("退出登录"

5、addfinalizer 方法

addfinalizer也可以实现环境的清理,实现与yield方法相同的效果,跟yield不同的是需要注册作为终结器使用的函数。

import pytest

@pytest.fixture()
def login(request):
    print("登录")
    def demo_finalizer():
        print("退出登录")
    # 注册demo_finalizer为终结函数
    request.addfinalizer(demo_finalizer)

6、fixtur 自动应用

@pytest.fixture(autouse=True)

autouse设置为True时,自动调用fixture功能。由于默认作用域为function,不指定scope则每个方法都会调用fixture方法。

@pytest.mark.usefixtures()

7、fixture 参数化

如果多条用例都需要调用相同参数,可以将fixture函数参数化。fixture 函数将执行每个参数值,fixture通过固定参数request传递

import pytest

@pytest.fixture(scope="module", params=[
    [1, 1, 2],
    [2, 8, 10],
    [99, 1, 100]
])
def data(request):
    yield request.param

class Test_Demo():
    def test_case1(self):
        print("\n开始执行测试用例1")
        assert 2 + 8 == 10

    def test_case2(self, data):
        print("\n开始执行测试用例2")
        assert data[0] + data[1] == data[2]

    def test_case3(self):
        print("\n开始执行测试用例3")
        assert 99 + 1 == 100


if __name__ == '__main__':
    pytest.main()

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值