pytest介绍:
pytest是一个非常成熟的全功能的Python测试框架:
1.简单灵活,容易上手
2.支持参数化
3.测试用例的skip和xfail,自动失败重试等处理
4.能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+request)
5.pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest- allure(完美html测试报告生成)、pytest-xdist(多CPU分发)等
6.可以很好的和jenkins集成

安装pytest:pip install -U pytest 其中-U是对pytest进行更新 pytest – version:查看版本号
测试用例的识别与运行:
识别:
测试文件:
1.test_.py
2.
test.py
用例识别:
1.Test*类包含的所有test
*的方法(测试类不能有__init__方法)
2.不在class中的所有test_*方法
pytest也可以执行unittest框架写的用例和方法
运行:
pytest -v :可以运行出详细的日志信息
pytest -s :可以打印出测试用例用print的内容
pytest 文件名.py::类名 :运行某个模块里面的类
pytest 文件名.py::类名::方法名 :运行某个模块里面的某个类的方法
pytest -v -k"类名 and not 方法名":跳过运行某个用例
pytest -m[标记名]:@pytest.mark.[标记名]将运行有这个标记的测试用例
pytest -x 文件名:一旦运行到报错就停止运行
pytest --maxfail=[num]:当运行错误达到num的时候就停止运行

pytest执行-失败重新运行:
场景:测试失败后要重新运行n次,要在重新运行之间添加延迟时间,间隔n秒在运行
安装:pip install pytest-rerunfailures
执行:
1.pytest – reruns 3 -v -s test_class.py(设置重新运行n次)
2.pytest -v – reruns 5 --reruns-delay 1(设置延迟时间)
pytest执行-多条断言有失败也都运行
场景:一个方法中写多条断言,通常第一条过不去,下面就不执行了,我们想报错也都执行一下
安装:pip install pytest-assume
执行:
1.pytest.assume(1==4)

2.pytest.assume(2==4)

pytest框架结构
import pytest 类似的setup,teardown同样更灵活
1.模块级(setup_module/teardown_module)模块始末,全局的(优先最高)
2.函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
3.类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
4.方法级(setup_method/teardown_method)开始于方法始末(在类中)
5.类里面(setup/teardown)运行在调用方法的前后

pytest-fixtrue的用法
场景:
1.用例1需要先登录
2.用例2不需要登录
3.用例3需要登录
这种场景无法用setup和teardown实现
用法:在方法前面加@pytest.fixture()
场景:测试用例执行时,有的用例需要登陆才能执行,有些用例不需要登陆,setup和teardown无法满足。fixture可以,默认scope(范围)function
步骤:
1.导入pytest
2.在登录的函数前面加@pytest.fixture()
3.在要使用的测试方法中传入(登陆函数名称),就先登录
4.不传入的就不登录直接执行测试方法
前端自动化中应用-conftest
场景:你与其他测试工程师合作一起开发时,公共模块要在不同文件下,要在大家都能访问到的地方
解决:conftest.py这个文件进行数据共享,并且他可以放在不同位置起着不同范围共享的作用
执行:系统执行到参数login时先从本文件中查找是否又这个名字的变量,之后在conftest.py中找是否有
步骤:将登陆模块带@pytest.fixture()写在conftest.py中
conftest.py配置需要注意:
1.conftest文件名是不能换的
2.conftest.py与运行的用例要在同一个package下,并且有__init__文件
3.不需要import导入conftest.py文件,pytest用例会自动查找
4.全局的配置和前期工作都可以写在这里,放在某个包下,就是这个包共享的地方
前端自动化中应用-yieid
场景:你已经可以将测试方法前要执行或依赖的解决了,测试方法后销毁清楚数据的要如何进行呢?范围是模块级别的。类似setupClass
解决:通过在同一模块中加入yieid关键字,yield是调用第一次返回结果,第二次执行它下面的语句返回
步骤:在@pytest.fixture(scope=module)
在登录的方法中加yieid,之后加销毁清楚的步骤,注意,这种方式没有返回值,如果希望返回使用addfinalizer
fixture的自动应用
场景:不想原测试方法有任何改动,或全部都自动实现自动应用,没特例,也都不需要返回值时可以选择自动应用
解决:使用fixture中参数autouse=True实现
步骤:
1.在方法上面加@pytest.fixture(autouse=True)
2.在测试方法上面加@pytest.mark.usefixtures(“start”)
autouse:可以把方法用到每一条测试用例中
fixture带参数传递
场景:测试离不开数据,为了数据灵活,一般数据都是通过参数传的
解决:fixture通过固定参数request传递
步骤:在fixture中增加@pytest.fixture(params=[1,2,3,‘linda’])在方法参数中写request

@pytest.mark.skip(‘不执行此条case’):放在方法上面可以不执行此条用例
@pytest.mark.skipif(sys.platform==‘darwin’,reason=‘不在macOS执行’):通过判断当前系统 给出不执行此条用例的原因

import pytest# 方法名作为参数
test_user_data = ['jerry','Tome']
@pytest.fixture(scope='module')
def login_r(request):
#     这是接受并传入的参数user = request.paramprint(f"\n 打开首页准备登陆 登陆用户{user}")return user
@pytest.mark.skip('不执行此条测试用例')
# indirect=True,可以把传过来的参数当作函数执行
@pytest.mark.parametrize("login_r",test_user_data,indirect=True)
def test_case01(login_r):a = login_rprint(f"测试用例中login的返回值是:{a}")assert a != ''if __name__ == '__main__':pytest.main()

skip使用场景
1.调试时不想运行这个测试用例
2.标记无法在某些平台上运行的测试功能
3.在某些版本中执行,其他版本中跳过
4.当前的外部资源不可用时跳过(如果测试数据是从数据库中取到的,连接数据库的功能如果返回结果未成功就跳过,因为执行也都报错)
解决:
@pytest.mark.skip():跳过这个测试用例,可以加条件skipIf,在满足某些条件下才希望通过,否则跳过这个测试
Xfail场景
1.功能测试尚未实施或尚未修复的错误,当测试通过时尽管预计会失败(标记为pytest.mark.xfail),他是一个xpass将在测试摘要中报告
2.你希望测试由于某种情况而就应该失败
解决:
@pytest.mark.xfail
使用自定义标记mark只执行某部分用例
场景:
1.只执行符合要求的某一部分用例,可以把一个web项目划分为多个模块,然后指定模块名称执行
2.App自动化时,如果想Android和IOS公用一套代码时,也可以使用标记功能,表明哪些是IOS的用例,哪些是Android的运行时知道mark名称运行就可以
解决:在测试用例方法上添加@pytest.mark.webtest
执行:
1.-s参数:输出所用测试用例的print信息
2.-m:执行自定义标记的相关用例(使用命令执行)
pytest -s test.py -m=search
pytest -s test.py -m apptest
pytest -s test.py -m ‘not ios’
多线程并行与分布式执行
场景:测试用例1000条,一个测试用例执行一分钟,一个测试人员执行需要1000分钟,通常会用人力成本换取时间成本,加几个让人一起执行,时间就会缩短,如果10个人一起执行只需要1000分钟,这就是一种并行测试,分布式场景。
解决:pytest分布式执行插件:pytest-xdist,多个cpu或主机执行 前提:用例之间都是独立的,没有先后顺序,随机都能执行,可重复执行不影响其他用例。
安装:pip install pytest-xdist
多个CPU并行执行用例,直接-n 3是并行数量:pytest test.py -n 3
在多个终端下一起执行
pytest-html生成测试报告
安装:pip install pytest-httml
生成测试报告:pytest -v -s --html=report.html --self-contained-html

Python pytest测试框架详解相关推荐

  1. websocket接口自动化集成pytest测试框架详解

    目录 websocket协议 1.介绍 2.原理 3.与http协议的比较 4.websocket应用场景 自动化测试资源分享 websocket协议 1.介绍 WebSocket是一种在单个TCP通 ...

  2. 【07节】Python3+Selenium4自动化 unittest 测试框架详解

    文章目录 1.unittest 框架介绍 2.创建单元测试步骤 3.unittest 模块介绍 3.1 TestCase 类 3.1.1 TestCase 类常用方法: 3.1.2 TestCase ...

  3. pytest自动化测试框架详解+mark标记+fixture夹具

    介绍 pytest是python的一种单元测试框架,同自带unittest框架类似,功能,效率更强大 特点: 1. 非常容易上手,入门简单,丰富的文档 2. 支持参数化 3. 执行测试用例的过程中,跳 ...

  4. Spring MVC测试框架详解——服务端测试

    随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的.从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用sp ...

  5. python+selenium自动化测试框架详解,我就讲一遍

    目录 前言 1.测试框架分层设计 2.测试框架目录结构 3.编写用例方法 4.测试结果展示 前言 本文整理归纳以往的工作中用到的东西,现汇总成基础测试框架提供分享. 框架采用python3 + sel ...

  6. PowerMock测试框架详解

    摘要 本文介绍了Mock背景,常见的单元测试场景以及对应的测试方法,最后简单介绍了powermockit测试框架.理解本文内容,会带你入门java单元测试,其中第一章.第二章需要重点理解. 一.背景 ...

  7. python pytest测试框架(一)

    目录 一.安装 二.第一个测试例子 三.pytest参数 1.-K EXPRESSION 3.--maxfail=num 4.-m MARKEXPR 5. -v, --verbose 6.-q, -- ...

  8. python pytest测试框架介绍四----pytest-html插件html带错误截图及失败重测机制

    一.html报告错误截图 这次介绍pytest第三方插件pytest-html 这里不介绍怎么使用,因为怎么使用网上已经很多了,这里给个地址给大家参考,pytest-html生成html报告 今天在这 ...

  9. python之flask框架详解

    目录 前言 1.新建文件helloworld.py 2.相关配置参数 3.加载配置文件 3.1配置对象加载 3.2配置文件加载 3.3读取配置 4 路由定义 4.1指定路由地址 4.2 给路由传参 4 ...

最新文章

  1. Java中常见的锁简述
  2. MFC应用程序中添加控制台窗口
  3. Insufficient parameters supplied to the command
  4. 【2020年3月】自然语言处理最新论文速递
  5. 【100】新学年的学习安排
  6. git pull没有更新成功_因为 git pull 和同事闹僵了。
  7. LaTeX参考文献中遇到错误:Missing $ inserted. [\printbibliography[heading=bibintoc]]
  8. 【Java数据库】使用properties资源文件,简化数据库连接
  9. Leetcode::Subsets
  10. 设有n个正整数,将他们连接成一排,组成一个最大的多位整数
  11. js 简单的滑动教程(四)
  12. SpringBoot整合kafka(安装)
  13. p2p网络中的NAT穿透技术----常见NAT穿越解决方案
  14. mysql fm999990.99999_Oracle如何显示小数点前面的0
  15. C语言国二上机题库,【高分飘过】2013年国二C语言上机题库(必备完美版).doc
  16. vscode风格超酷个人主页源码
  17. linux操作系统原理【3】
  18. JavaScript获取浏览器高度和宽度值
  19. ubuntu18.04下载显卡驱动+CUDA+CUDNN
  20. 极坐标xy的转换_极坐标与直角坐标的转化

热门文章

  1. 利用Python读取txt文档的方法
  2. 什么蓝牙耳机性价比高?目前最值得入手的蓝牙耳机
  3. Angular-ClI入门教程
  4. android版cmd命令,android开发中的cmd命令
  5. 两台外网计算机远程桌面访问(内网穿透)
  6. 人工智能和深度学习的发展趋势
  7. 教程▍一步步上手TensorFlow——基础知识
  8. 全网首创Python中医药科普图片文字自动剪辑第1版
  9. ES5和ES6区别浅析
  10. 装修材料计算机,PC砖是一种什么装修材料?