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

二、Pytest以及常用插件安装
把如下内容写到一个txt文件中,如require-install.txt
pytest
pytest-html
pytest-xdist
pytest-rerunfailures
然后在Dos窗口中使用此命令安装所有的模块:pip install -r require-install.txt
通过命令:pytest --version验证安装结果。如果报如下错误则需要调整python或pytest的版本,这是python和pytest的版本不兼容:
下面说两个错误例子,一个是win7、python3.7.4以及pytest5.0+,将python降到3.7.3就ok了,另一个是Windows 10, python 3.8.1, pytest 5.3.3,将pytest降到4.6.9以下版本也ok,因此建议你要么降python版本,要么降pytest版本试试。
笔者使用的是:win7+python3.7.3+pytest5.4.1,亲测没问题。

三、 pytest框架基础应用
pytest运行函数时和运行类里面的方法情况如下:

import pytest
  def test01():
    print('测试用例一')
  def abcd():
    print('测试用例二') class TestCase:
  def test_03(self):
    print('测试用例三')
  def defg(self):
    print('测试用例四') if __name__ == '__main__':
  pytest.main(['-s','pytest-demo.py'])

运行结果如下:

注意事项:
  (1) 测试函数、类中的测试方法都必须以test_ 开头,当然以什么开头在pytest可自定义。
  (2) 测试类必须以Test开头,并且不能带有init方法
  (3) 断言必须使用assert断言
执行方式:
(1) 主函数方式运行:
  指定运行文件:pytest.main([’-s’,‘pytest-demo.py模块名’])
  注意:如果py文件是以test_开头或者以_test结尾则可以使用pytest.main()运行。因为pytest.main()会运行当前目录下所有以test_开头或者以_test结尾的文件。
(2) 命令行方式运行
  点开Pycharm左下角的:Terminal打开当面目录下的命令行窗口。
  输入命令执行:pytest pytest-demo.py模块名
  注意:如果py文件是以test_开头或者以_test结尾则可以使用pytest命令运行,因为pytest会运行当前目录下所有以test_开头或者以_test结尾的文件。

四、 运行时参数说明
-s:显示打印内容
  如:pytest pytest-demo.py -s
  等价于:pytest.main([’-s’,‘pytest-demo.py’])
:::指定测试用例运行
  运行函数:如:pytest pytest-demo.py::test_01
  等价于:pytest.main([’-s’,‘pytest-demo.py::test01’])
  运行类中方法:如:pytest pytest-demp.py::TestCase::test_03
  等价于:pytest.main([’-s’, ‘pytest-demo.py::TestCase::test_03’])
–html=路径/report.html:生成xml/html格式测试报告(需要先安装pytest-html)
  如:pytest pytest-demp.py --html-./report.html
  等价于:pytest.main([’-s’,‘pytest-demo.py’,’–html=./report.html’])
–maxfail=1:出现1个失败就终止测试
  如:pytest pytest-demo.py --maxfail=1
  等价于:pytest.main([’-s’,‘pytest-demo.py’,’–maxfail=1’])
-n:pytest-xdist多线程运行(需要先安装pytest-xdist)
  如:pytest pytest-demo.py -n 2
  等价于:pytest.main([’-s’,‘pytest-demo.py’,’-n=2’])
  在用例中使用time.sleep(2)加等待时间测试,发现多线程时间减少了。
–reruns NUM:重试运行测试用例(需要先安装pytest-rerunfailures)
  如:pytest pytest-demo.py --reruns 2
  则一旦有用例失败,则会重复执行两次,貌似这种不能用main运行。

由此能看出:pytest.main([’-s’,‘pytest-demo.py模块名’]),main方法中是传入的一个list格式,list中可以传入多个参数。

五、pytest的ini配置文件
pytest.ini文件是pytest的主配置文件,可以改变pytest的默认行为。
1.pytest.ini的放置位置:一般放在项目工程的根目录(即当前项目的顶级文件夹下)
2.pytest.ini的作用:指定pytest的运行方式(在cmd输入pytest后,会读取pytest.ini中的配置信息,按指定的方式去运行)
3.cmd下使用 pytest -h 命令查看pytest.ini的设置选项(以下截图只是部分选项)
常用设置选项如下:
[pytest]
addopts = -s … #可添加多个命令行参数,用空格分隔
testpaths = …/pytestproject #测试用例文件夹,可自己配置,…/pytestproject为上一层的pytestproject文件夹。
python_files = test*.py #配置测试搜索的模块文件名称
python_classes = Test* #配置测试搜索的测试类名
python_funtions = test #配置测试搜索的测试函数名

示例如下:

[pytest]
addopts = -s --html=./report.html
testpaths = …/pytestproject
python_files = test*.py
python_classes = Test*
python_funtions = test*

注意:
1.运行的时候自动读取配置文件,运行pytestproject下的所有test开头的模块文件。

如果你此文你也有同感,如果你觉得此文对你有帮助,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:

软件测试技术群:695458161,群里发放的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

作者:来自公众号:软测之家
出处:https://www.cnblogs.com/csmashang/p/12513587.html
欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

【Pytest01】全网最全最新的Pytest框架快速入门的更多相关文章

  1. 【Pytest02】全网最全最新的Pytest框架快速进阶篇(pytest前置和后置以及忽略测试用例)

    一.Pytest的前置和后置方法 1.Pytest可以集成unittest实现前置和后置 import unittest import pytest class TestCase(unittest.T ...

  2. 【Pytest05】全网最全最新的Pytest框架之用例分组执行

    一.Fixture用例分组运行常用于冒烟测试,分模块运行等 pytest.ini配置文件中增加分组参数markers来实现用例分组,如: markers = g1:组一 smoke:冒烟测试 pyte ...

  3. 【Pytest04】全网最全最新的Pytest框架fixture应用篇(2)

    一.Fixture参数之params参数可实现参数化:(可以为list和tuple,或者字典列表,字典元祖等) 实例如下: import pytest def read_yaml(): '] @pyt ...

  4. 【Pytest03】全网最全最新的Pytest框架fixture应用篇(1)

    fixtrue修饰器标记的方法通常用于在其他函数.模块.类或者整个工程调用时会优先执行,通常会被用于完成预置处理和重复操作.例如:登录,执行SQL等操作. 完整方法如下:fixture(scope=' ...

  5. flask 框架快速入门

    flask 框架快速入门 搭建一个简易flask项目 首先使用 Pycharm创建flask项目 运行flask项目 1.使用Pycharm搭建flask项目 (如果Pycharm新建项目中未出现该图 ...

  6. pytest学习--快速入门

    一.pytest简介 Pytest是python的一种单元测试框架. pytest的特点: 入门简单,文档丰富 支持单元测试,功能测试 支持参数化,重复执行,部分执行,测试跳过 兼容其他测试框架(no ...

  7. vue-element-admin框架快速入门

    年底了,最近公司也不是太忙,感觉今年互联网行业都遇到寒冬,不在是前两年像热的发烫的赛道.这几天完成公司项目系统的优化和升级,目前准备想开发一套前后端分离的系统.       现在java最新最火的技术 ...

  8. MyBatis框架——快速入门

    主流的ORM框架(帮助开发者实现数据持久化工作的框架): 1.MyBatis: 半自动化ORM框架,半自动:指框架只完成一部分功能,剩下的工作仍需开发者手动完成. MyBatis 框架没有实现 POJ ...

  9. struts2框架快速入门小案例

    struts2快速入门: index.jsp------>HelloAction--------->hello.jsp struts2流程 1.导入jar包 struts2的目录结构: a ...

随机推荐

  1. unittest实战(二):用例编写

    # coding:utf-8import unittestfrom selenium import webdriverimport timefrom ddt import ddt, data, unp ...

  2. PyQt5之音乐播放器

    按照自己思路简单写了个桌面播放器,只有自己喜欢的歌.使用QtDesigner设计的ui界面,功能简单,还有很多bug@~@,代码奉上: music_button.ui使用扩展工具pyuic5生成了mu ...

  3. 基于activity的强大java工作流引擎,可视化开发工作流

    我们先来看看工作流引擎和Activity? 工作流引擎 所谓工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色.分工和条件的不同决定信息传递路由.内容等级等 ...

  4. pip3 install mysqlclient安装失败

    报错信息: OSError: mysql_config not found 解决方法: 执行以下命令 yum install python-devel mysql-devel -y 然后再 pip3 ...

  5. 基于abp框架的数据库种子数据初始化

    目录 基于abp框架的数据库种子数据初始化 1.背景 2.参照 3.解决方案 3.1 初始化数据 3.2 依赖注入方法容器里获取数据库上下文 3.3 封装创建初始化数据列表方法 3.4 数据库中没有的 ...

  6. css自定义 range radio select的样式滑轮,按钮,选择框

    写在前面: 之前踩坑css的时候,遇到滑轮,按钮,选择框这类型的东西,为了页面效果,总是需要自定义他们的样式,而不使用他们的默认样式.当时写的时候,我也是蛮头疼的,弄了个demo,链接在下面.对此做个 ...

  7. preload & prefetch

    原文地址在 我的笔记里,觉得还行就给个 star 吧:) 关于 preload 和 prefetch 早有耳闻,知道它们可以优化页面加载速度,然具体情况却了解不多.搜索了相关的资料后对其有了些认识,在 ...

  8. LeetCode37 使用回溯算法实现解数独,详解剪枝优化

    本文始发于个人公众号:TechFlow,原创不易,求个关注 数独是一个老少咸宜的益智游戏,一直有很多拥趸.但是有没有想过,数独游戏是怎么创造出来的呢?当然我们可以每一关都人工设置,但是显然这工作量非常 ...

  9. python 深浅拷贝 元组 字典 集合操作

    深浅拷贝 :值拷贝 :ls = [,,] res = ls 则print(res)就是[,,] 浅拷贝 :ls.copy() 深拷贝:ls3 = deepcopy(ls) # 新开辟列表空间,ls列表 ...

  10. angular - collapse--TemplateRef

    用的ant  collapse组件 需要自定义Header 请忽略前面的dw... 主要是TemplateRef<void> 查了半天.可以实现效果,直接上代码,我也不懂为什么 反正实现了 ...