Pytest测试框架基本使用方法详解

pytest介绍

pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:

1、简单灵活,容易上手,文档丰富;

2、支持参数化,可以细粒度地控制要测试的测试用例;

3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);

4、pytest具有很多第三方插件,并且可以自定义扩展

  • 如pytest-selenium(集成selenium)、
  • pytest-html(完美html测试报告生成)、
  • pytest-rerunfailures(失败case重复执行)、
  • pytest-xdist(多CPU分发)、
  • pytest--ordering(控制测试运行的顺序)

5、测试用例的skip和xfail处理;

6、可以很好的和CI工具结合,例如jenkins

编写规则:

  • 测试文件以test_开头(以_test结尾也可以)
  • 测试类以Test开头,并且不能带有 init 方法
  • 测试函数以test_开头

断言使用基本的assert即可

快速示例

test_pyexample.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

import pytest

class TestClass:

    def test_one(self):

      x = "this"

      assert 'h' in x

    def test_two(self):

      x = "hello"

      assert hasattr(x, 'check')

    def test_three(self):

      a = "hello"

      b = "hello world"

      assert a in b

通过命令行运行:

1、cd 到代码所在的目录,执行命令:py.test test_pyexample.py

2、安装pytest-sugar插件可以看到进度条

Pycharm配置运行:

1.file->Setting->Tools->Python Integrated Tools->项目名称->Default test runner->选择py.test

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import pytest

class TestClass:

    def test_one(self):

      x = "this"

      assert 'h' in x

    def test_two(self):

      x = "hello"

      assert hasattr(x, 'check')

    def test_three(self):

      a = "hello"

      b = "hello world"

      assert a in b

if __name__ == "__main__":

  pytest.main('-q test_class.py')

Console常用参数介绍:

  • -v 用于显示每个测试函数的执行结果
  • -q 只显示整体测试结果
  • -s 用于显示测试函数中print()函数输出
  • -x, --exitfirst, exit instantly on first error or failed test
  • -m 只运行带有装饰器配置的测试用例
  • -h 帮助

1

2

3

4

5

6

7

8

9

10

py.test # run all tests below current dir

py.test test_mod.py # run tests in module file test_mod.py

py.test somepath # run all tests below somepath like ./tests/

py.test -k stringexpr # only run tests with names that match the

# the "string expression", e.g. "MyClass and not method"

# will select TestMyClass.test_something

# but not TestMyClass.test_method_simple

py.test test_mod.py::test_func # only run tests that match the "node ID",

# e.g "test_mod.py::test_func" will be selected

# only run test_func in test_mod.py

pytest参数化

使用装饰器:@pytest.mark.parametrize()

单个参数:

1

2

3

4

5

6

import pytest

import random

@pytest.mark.parametrize('x',[(1),(2),(6)])

def test_add(x):

  print(x)

  assert x==random.randrange(1,7)

多个参数:

1

2

3

4

5

6

7

8

9

10

import pytest

@pytest.mark.parametrize('x,y',[

  (1+2,3),

  (2-0,1),

  (6*2,12),

  (10*2,3),

  ("test","test"),

])

def test_add(x,y):  #必须与上面保持一致,只能用x,y不能用其他字母

  assert x==y

控制测试运行顺序

安装pytest-ordering

pip install pytest-ordering

借助于装饰器@pytest.mark.run(order=1)控制测试运行的顺序

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import pytest

import time

value=0

@pytest.mark.run(order=2) #后执行order=2

def test_add2():

  print("I am 2")

  time.sleep(2)

  assert value==10

@pytest.mark.run(order=1#先执行order=1

def test_add():

  print("I am add")

  global value

  value=10

  assert value==10

运行后生成测试报告(htmlReport)

安装pytest-html:

pip install -U pytest-html

如何使用:

py.test test_pyexample.py --html=report.html

更详细的测试报告

安装 pytest-cov:

pip install pytest-cov 

如何使用

1

2

3

4

5

6

7

py.test --cov-report=html --cov=./ test_code_target_dir

Console参数介绍

--cov=[path], measure coverage for filesystem path (multi-allowed), 指定被测试对象,用于计算测试覆盖率

--cov-report=type, type of report to generate: term, term-missing, annotate, html, xml (multi-allowed), 测试报告的类型

--cov-config=path, config file for coverage, default: .coveragerc, coverage配置文件

--no-cov-on-fail, do not report coverage if test run fails, default: False,如果测试失败,不生成测试报告

--cov-fail-under=MIN, Fail if the total coverage is less than MIN. 如果测试覆盖率低于MIN,则认为失败

多进程运行

安装pytest-xdist:

pip install -U pytest-xdist

如何使用:

py.test test_pyexample.py -n NUM

其中NUM填写并发的进程数。

重新运行失败的用例

安装pytest- rerunfailures:

1

2

3

4

5

6

7

import random

def add(x,y):

  return x+y

def test_add():

  random_value=random.randint(2,7)

  print('random_value:'+str(random_value))

  assert add(1,3)==random_value

如何使用:

命令:pytest --reruns 重试次数

  比如:pytest --reruns 3  表示:运行失败的用例可以重新运行3次

命令:pytest --reruns 重试次数 --reruns-delay 次数之间的延时设置(单位:秒) 

  比如:pytest --reruns 3 --reruns-delay 5  表示:(译:瑞软四、地类)运行失败的用例可以重新运行3次,第一次和第二次的间隔时间为5秒钟

另外也可以通过装饰器的方式配置:

@pytest.mark.flaky(reruns=3, reruns_delay=5)

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest是一个非常成熟的全功能的Python测试框架。它具有以下几个主要特点: 1. 简单灵活,容易上手,拥有丰富的文档支持。 2. 支持参数化,可以细粒度地控制要测试测试用例。 3. 能够支持简单的单元测试和复杂的功能测试,并且可以用来做selenium/appnium等自动化测试、接口自动化测试pytest requests)。 4. 提供了丰富的第三方插件,并且可以自定义扩展。一些比较好用的插件包括pytest-selenium(集成selenium)、pytest-html(生成完美的HTML测试报告)、pytest-rerunfailures(失败用例重复执行)和pytest-xdist(多CPU分发)等。 5. 支持测试用例的skip和xfail处理,可以很好地与Jenkins集成。 6. 提供了report框架allure的支持,可以生成漂亮的测试报告。 7. 安装方便简单。 总之,pytest是一个功能强大、易于学习和使用的Python测试框架,适用于各种类型的测试任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python测试框架pytest详解](https://blog.csdn.net/lixiaomei0623/article/details/108874291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Pytest测试框架基本使用方法详解](https://download.csdn.net/download/weixin_38681318/14908223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值