pytest学习笔记

目录

1、虚拟环境准备

2、安装pytest

3、pytest使用约束

4、执行方式

5、pytest常用运行参数介绍

6、解决大批量执行测试case问题多进程

7、失败重跑机制(以下两种均可)

8、前置动作、后置动作功能(预处理功能)

9、pytest配置文件之pytest.ini

10、测试报告

11、pytest之精髓fixture(个人观点)

12、skipif跳过执行

13、xfail标记为预期失败

14、parametrize

15、统计代码覆盖率 pytest-cov


前言:

        对于做自动化测试的同学,基本都知道python的单元测试框架unitest,因其为python的内置库,曝光度较高,使用较广泛,进而广为人知, 只要有点开发基础的同学,都可以比较容易上手学习并进行二次开发,那就有人就问了,为什么还要学习pytest呢? 其实可以用一个简单的比喻来形容,为什么现在手机经常换呢?答案是显而易见,技术的更新,使得功能更强大、使用更便捷。接下来重点讲解一下自己在学习pytest过程中的一些学习心得。

附pytest官方文档:https://docs.pytest.org/en/latest/contents.html

1、虚拟环境准备

              前提:windows10,python3.7(已安装并加入环境变量)

              进入命令行窗口执行如下指令:

              python -m venv  F:/my_venv(安装目录)

2、安装pytest

              2.1 pycharm内安装

                      1、filesettingProjectProject Interpreter进入如下图页面,点击 +

                      2、在弹出的页面搜索pytest,并选择你想要的版本,点击 Install Package 按钮即可

 

                2.2 命令行安装

                     1) 打开命令行窗口,进入步骤 1安装的虚拟环境目录下的Scripts目录中

                     2) 执行activate

                    3) pip3 install pytest==(版本号), 版本号可不填写 直接执行pip3 install pytest

                     4)关闭虚拟环境, 执行deactivate

3、pytest使用约束

              3.1 文件命名约束

                     测试文件名必须以test_开头、或者以_test.py结尾

              3.2 测试类

                     以Test开头,并且无init方法,需要测试的类方法,以test_开头命名

              3.3 测试函数

                     以test_开头命名

      

4、执行方式

              4.1 函数方式

                     pytest.main("test_zhc.py")

              4.2 命令行方式

                     pytest test_zhc.py 执行单个测试文件

                     pytest F:/TEST   执行测试文件夹(批量测试文件)

      

5、pytest常用运行参数介绍

              pytest     help 查看帮助文档

                            -v    打印详细运行日志

                            -s    打印代码里面print 输出语句

                            -k    跳过过运行某个或者某些用例,

                                   荔枝 pytest -k '类名'

                                           pytest -k '方法名'

                                           pytest -k "类名 and not 方法名" //运行类里所有的方法,不包含某个方法

                            -x 遇到用例失败立即停止运行

                          maxfail=[num]  用例失败个数达到阀值停止运行, 荔枝:pytest maxfail=5 //用例失败数达到5个即停止运行

                            -m [标记名] 运行做标记的用例, 配合@pytest.mark.[标记名] 使用 荔枝:pytest -m slow

             

6、解决大批量执行测试case问题多进程

              安装pytest-xdist

              pytest test_zhc.py -n 6(进程数)

      

7、失败重跑机制(以下两种均可)

              使用场景:一些系统性因素导致结果未匹配期望值,引起测试case的失败,比如网络波动、断电等,给与重试机制以避免偶发性结果

              7.1 插件pytest-repeat

                     命令行使用方法:pytest reruns=num1 count=num2

                     参数说明:reruns 指失败后重跑次数,被测case直到成功或者达到num1次数重跑停止,

                                     count  指重复执行次数(与失败与否无关)

                     荔枝: pytest reruns=5 count=2 test_zhc.py

                     说明:test_zhc.py 该测试脚本中的测试函数 或者方法 会重复执行count=2次,

                              另外每次执行时,当某个函数或方法执行错误时,都会重试reruns=5次,即最坏的情况会重试2*(5+1),加1是指程序默认执行的一次

                     发散运用:结合前面学到的 -x 遇到用例失败立即停止运行,我们可以解决实际测试中遇到的偶发失败情景

                     荔枝:pytest -s count=100000 -x test_zhc.py    重复执行1W次直至失败结束

                     标记使用:

                            @pytest.mark.repeat(3)

                            标记某个测试方法,使其重复运行

                7.2 插件pytest-rerunfailures

                     命令行使用方法:pytest reruns 5 reruns-delay 10 -s

                     装饰器使用方法:@pytest.mark.flaky(reruns=5, reruns_delay=10)

                     参数介绍: 

                            reruns 失败后重跑次数

                            reruns-delay 失败后等待重跑秒数

8、前置动作、后置动作功能(预处理功能)

              8.1   setup_function()、teardown_function()

                     函数级别,即执行一次测试函数,setup_function()函数都会执行,并先于测试函数执行,

                     同理teardown_function()也会执行一次,并后于测试函数执行

              8.2  setup_class()、teardown_class()

                     类级别,即执行一次测试类,setup_class()函数都会执行,并先于测试类执行,

                     同理teardown_class()也会执行一次,并后于测试类执行

              8.3   setup_method()、teardown_method ()

                     类方法级别,即执行一次测试类方法,setup_method()函数都会执行,并先于测试类方法执行,

                     同理teardown_method()也会执行一次,并后于测试类方法执行

              8.4  setup_module()、teardown_module ()

                     模块级别,即执行一次模块,setup_module()函数都会执行,并先于模块执行,

                     同理teardown_module()也会执行一次,并后于测试模块执行

                   

9、pytest配置文件之pytest.ini

          当测试文件比较多时,可以建立测试文件夹,并把需要的配置文件放于测试文件夹根目录,命名为pytest.ini(存放位置和文件命名可以自定义)

              命令行模式 pytest -c 配置文件 

              荔枝:pytest -c f:/Test/zhc.ini

              配置文件如下图所示:

10、测试报告

              10.1 pytest-html

                     需要额外安装 pip3 install pytest-html

                     使用方法:pytest -s test_zhc.py html="f:/report.html"

              10.2 allure-pytest

                     可与jenkins集成,报告内容更丰富多样

                     需要额外安装 pip3 install allure-pytest

                     使用方法:

                            生成测试数据:pytest -s test_zhc.py alluredir  ./result/

                            根据数据生成报告:allure generate ./result/ -o ./report/

      

11、pytest之精髓fixture(个人观点)

              介绍:fixture作为测试前的初始化操作,前置条件,参数传递等,比如数据库连接,测试数据准备

              11.1 fixture的使用方式

                     定义fixture

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

                            被装饰函数

                            荔枝:

                                   scope:被装饰方法的作用阈,参数可选如下

                                          function(默认值), 作用于测试方法,即每个测试方法都会运行一次fixture

                                          class, 作用于测试类,即每个测试类都会运行一次fixture

                                          module,作用于模块,即模块里所有的用例执行前会运行一次fixture

                                          session,作用于会话,多个py文件调用一次fixture

                     使用fixture

                          1、函数或类里面方法直接传fixture的函数参数名称

                          2、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例

          11.2、scope='function'

          输出结果 

 

            11.3、scope='class' 输出结果

             

 

                11.4 scope='module'输出结果 

                   

 

                11.5 scope='session'

 

        11.6、params之参数传递

                     介绍:params参数类型为list,即列表中的每一个数据会当做用例数据输入,

                             可用于批量输入数据的测试

                     使用方法:@pytest.fixture(params=[1, 3]), @pytest.fixture(params=[(1, 3), (4, 5)])

                     荔枝:

                     

12、skipif跳过执行

              介绍: 跳过被标识的测试函数。 使用场景:被测功能未开发完毕、测试平台环境不容许

              使用方法:skipif(condition, reason)

                     参数condition:跳过的原因,参数类型为str、bool,当为字符串时,reason可以不填写,当为bool时必须填写reason

                     参数reason:跳过原因,类参数类型为str

              荔枝:

13、xfail标记为预期失败

              介绍: 指定被标识的测试函数失败, 被标记的case,后续代码不会被执行。 使用场景:功能依赖,例如前置功能失败,影响后续功能

              使用方法:xfail(condition=None, reason=None, raises=None, run=True, strict=False)

                     参数condition:预期失败除法条件,参数类型为str、bool,当为字符串时,reason可以不填写,当为bool时必须填写reason:

                     参数reason:失败原因,参数类型为str

                     参数raises:具体阐释失败原因,raises可以指定具体的异常类,例如

                     参数run:默认为True, 当为False时,被标记的case不会被执行

                     参数strict:默认为False, 当为True时,保证测试为XPASS时,测试记录为FAILED

              荔枝:

14、parametrize

              介绍:测试用例参数化,有点类似于fixture中的params参数。 使用场景:同一case,执行大批量测试数据

             使用方法:parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

                     常用参数:

                            argnames:参数名,参数类型为str, 单个参数"a", 多个参数 "a, b, c"

                            argvalues:参数值,参数类型为list, 单个参数[1], 多个参数[(1, 2, 3), (2, 3, 4)]  列表长度决定测试方法运行的次数

              荔枝:

15、统计代码覆盖率 pytest-cov

              使用方法:pytest cov=参数1 cov-report=html  cov-config=参数2

                     参数1:被测文件路径

                     参数2: 配置文件, 默认为 .coveragerc, 使用举例:跳过某些测试文件,

                                  不统计覆盖率

                    荔枝:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值