IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> pytest基础学习第一课 -> 正文阅读

[开发测试]pytest基础学习第一课

什么是pytest

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

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

注:看到下面实例确实容易上手,简单灵活和文档丰富目前还未能体会

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

注:怎么细粒度控制测试用例和怎么参数化还不理解

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

注:selenium/appnium,pytest+requests这些词代表什么含义还不清楚

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

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

注:这个NB的插件怎么用没有体会

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

注:代表什么含义不清楚

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

注:怎么和Jenkins结合很值得研究

测试case编写规则

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

运行pytest的前提是已经安装了pytest module,如果未安装可直接使用pip install pytest进行安装

快速示例

test_pytest_demo.py

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_pytest_demo.py

?注:执行命令也可以是pytest?test_pytest_demo.py

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

?注:在pycharm的terminal下运行未看到有进度条,只看到有一个运行时间和一串飘绿的东东

Pycharm配置运行:

file->Setting->Tools->Python Integrated Tools->项目名称->Default test runner->pytest

选中待测试的文件,右键run之后,得到结果如下:

C:\project\yjd\python_projects\test\venv\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2021.3.2\plugins\python-ce\helpers\pycharm\_jb_pytest_runner.py" --path C:/project/yjd/python_projects/pytest_learning/test_pytest_demo.py
Testing started at 11:11 PM ...
Launching pytest with arguments C:/project/yjd/python_projects/pytest_learning/test_pytest_demo.py in C:\project\yjd\python_projects\pytest_learning

============================= test session starts =============================
platform win32 -- Python 2.7.13, pytest-4.6.11, py-1.11.0, pluggy-0.13.1 -- C:\project\yjd\python_projects\test\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: C:\project\yjd\python_projects\pytest_learning
plugins: sugar-0.9.4
collecting ... collected 3 items

test_pytest_demo.py::TestClass::test_one PASSED                          [ 33%]
test_pytest_demo.py::TestClass::test_two PASSED                          [ 66%]
test_pytest_demo.py::TestClass::test_three PASSED                        [100%]

========================== 3 passed in 0.03 seconds ===========================

Process finished with exit code 0

这时确实能看到各个测试case的进度。

Console常用参数介绍:

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

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

单个参数:

import pytest
import random
@pytest.mark.parametrize('x',[(1),(2),(6)])
def test_add(x):
  print(x)
  assert x == random.randrange(1,7)

?参数x分别被赋为1,2,6传递到test_add函数中运行,所以test_add函数一共会被执行3次。randrange函数是随机数产生顺序,randrange(1,7)代表产生一个1~7的随机整数

多个参数:

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):
  assert x == y

参数 x,y 分别被赋给(1+2,3),(2-0,1)... ... ("test", "test") 传递到test_add函数中?,所以test_add函数一共会被执行5次。

控制测试程序运行顺序

安装pytest-ordering

pip install pytest-ordering

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

import pytest
import time
value=0
@pytest.mark.run(order = 2)
def test_add2():
  print("I am 2")
  time.sleep(2)
  assert value == 10

@pytest.mark.run(order = 1)
def test_add():
  print("I am add")
  global value
  value = 10
  assert value == 10

上面例子中会先运行 order = 1的test_add(),然后运行order = 2的test_add2()

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

安装pytest-html:

pip install -U pytest-html

如何使用:

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

使用上面的案例实测之后会在相应的目录下生成html的报告

更详细的测试报告

安装 pytest-cov:

pip install pytest-cov

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

如何使用:

命令: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)

上述内容参考下面链接:

https://www.jb51.net/article/200593.htm

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:55:28  更:2022-03-30 18:58:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:46:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码