pytest学习笔记
From: https://blog.csdn.net/gaowg11/article/details/54910974
由于对测试框架了解比较少,所以最近看了下pytest测试框架,对学习心得做个记录。
学习的教程是刘春明老师的文章
http://blog.csdn.net/liuchunming033/article/details/46501653
1、pytest简介
pytest是Python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。
- 能够支持简单的单元测试和复杂的功能测试
- 执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败
- 支持重复执行失败的case
- 支持运行由nose, unittest编写的测试case
- 具有很多第三方插件,并且可以自定义扩展
- 方便的和持续集成工具集成
- 支持参数化
2、安装
pip install -U pytest
py.test --version
注意要用admin用户安装,否则会报错
3、举个例子
(1)单测试case
执行测试的时候,我们只需要在测试文件test_sample所在的目录下,运行py.test即可。pytest会在当前的目录下,寻找以test开头的文件(即测试文件),找到测试文件之后,进入到测试文件中寻找test_开头的测试函数并执行。
在当前目录下新建文件 test_champ.py
- def func(x):
- return x+1
- def test_func():
- assert func(2)==3
在命令行输入py.test,便可以看到执行的成功与失败的原因了
(2)多测试case
当需要编写多个测试样例的时候,我们可以将其放到一个测试类当中,如:
- class TestClass:
- def test_one(self):
- assert "h" in "this"
- def test_two(self):
- x = "hello"
- assert hasattr(x,"check")
我们可以通过执行测试文件的方法,执行上面的测试:py.test -q test_class.py
这里对python的命名规范有点小插曲:
一,包名、模块名、局部变量名、函数名
全小写+下划线式驼峰
example:this_is_var
二,全局变量
全大写+下划线式驼峰
example:GLOBAL_VAR
三,类名
首字母大写式驼峰,否则会报错提示语法错误
example:ClassName()
4、如何编写pytest测试样例
- 测试文件以test_开头(以_test结尾也可以)
- 测试类以Test开头,并且不能带有 __init__ 方法
- 测试函数以test_开头
- 断言使用基本的assert即可
5、如何执行pytest测试样例
- py.test # run all tests below current dir
- py.test test_mod.py # run tests in module
- py.test somepath # run all tests below somepath
- 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 select
- # only test_func in test_mod.py
6、测试报告
pytest可以方便的生成测试报告,即可以生成HTML的测试报告,也可以生成XML格式的测试报告用来与持续集成工具集成。
生成xt格式报告:
- py.test --resultlog=log.txt
生成XML格式的报告:
该格式方便与CI服务器进行集成。
- py.test --junitxml=path/log.xml
将测试报告发送到pastebin服务器,执行下面的命令会生成报告的网址
py.test test_report.py --pastebin=all
只发送失败的报告
py.test test_report.py --pastebin=failed
生成Html格式报告
这个需要安装pytest的第三方插件pytest-html:
7、如何获取帮助信息
- py.test --version # shows where pytest was imported from
- py.test --fixtures # show available builtin function arguments
- py.test -h | --help # show help on command line and config file options
与Python自带的unitest测试框架中的setup、teardown类似,pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作。但是fixture函数对setup和teardown进行了很大的改进。
- fixture函数可以使用在测试函数中,测试类中,测试文件中以及整个测试工程中。
- fixture支持模块化,fixture可以相互嵌套
- fixture支持参数化
- fixture支持unittest类型的setup和teardown
setup完成测试前的初始化工作,teardown实现测试完成后的垃圾回首工作。如果测试的程序使用jdbc连接数据库,那么setUpBeforeClass()方法中就可以写上初始化数据库连接的一些代码,tearDownAfterClass()方法中就可以写上关闭数据库连接的一些代码。
8、最佳实践
- virtualenv . # create a virtualenv directory in the current directory
- source bin/activate # on unix

2、在虚拟环境中安装pytest:
- pip install pytest
9、断言的使用
①正常断言
- 子签名类,忽略中间打印的过程,直接表示出错的原因
- assert value == 0, "value was odd, should be even"
- 等于、不等、小于、大于
assert func(2)==3
②异常断言
使用pytest.raise方法(需import pytest)
断言1除以0,将产生一个ZeroDivisionError类型的异常。
- import pytest
- def test_zero_division():
- with pytest.raises(ZeroDivisionError):
- 1 / 0
有的时候,我们可能需要在测试中用到产生的异常中的某些信息,比如异常的类型type,异常的值value等等。下面我们修改下上面的测试
- import pytest
- def test_recursion_depth():
- with pytest.raises(ZeroDivisionError) as excinfo:
- 1/0
- assert excinfo.type == 'RuntimeError'
因为该测试断言产生的异常类型是RuntimeError,而实际上产生的异常类型是ZeroDivisionError,所以测试失败了。在测试结果中,可以看到assert子表达式excinfo.type的值。
---------------------
本文来自 高文冠 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/gaowg11/article/details/54910974?utm_source=copy
pytest学习笔记的更多相关文章
- [转载]pytest学习笔记
pytest学习笔记(三) 接着上一篇的内容,这里主要讲下参数化,pytest很好的支持了测试函数中变量的参数化 一.pytest的参数化 1.通过命令行来实现参数化 文档中给了一个简单的例子, ...
- pytest 学习笔记一 入门篇
前言 之前做自动化测试的时候,用的测试框架为Python自带的unittest框架,随着工作的深入,发现了另外一个框架就是pytest (官方地址文档http://www.pytest.org/en/ ...
- pytest学习笔记(一)
这两天在学习pytest,之前有小用到pytest,觉得这个测试框架很灵巧,用在实现接口自动化(pytest+requests)非常的轻便,然后很有兴致的决定学习下,然后又发现了pytest-sele ...
- Pytest学习笔记3-fixture
前言 个人认为,fixture是pytest最精髓的地方,也是学习pytest必会的知识点. fixture用途 用于执行测试前后的初始化操作,比如打开浏览器.准备测试数据.清除之前的测试数据等等 用 ...
- Pytest学习笔记5-conftest.py的用法
前言 在之前介绍fixture的文章中,我们使用到了conftest.py文件,那么conftest.py文件到底该如何使用呢,下面我们就来详细了解一下conftest.py文件的特点和使用方法吧 什 ...
- Pytest学习笔记6-自定义标记mark
前言 在pytest中,我们可以使用mark进行用例的自定义标记,通过不同的标记实现不同的运行策略 比如我们可以标记哪些用例是生产环境执行的,哪些用例是测试环境执行的,在运行代码的时候指定对应的mar ...
- Pytest学习笔记7-skip和skipif的使用
前言 在实际的测试中,我们经常会遇到需要跳过某些测试用例的情况,pytest提供了skip和ifskip来跳过测试 下面我们就来通过一些例子看看skip和ifskip具体如何使用吧 skip的用法 使 ...
- Pytest学习笔记11-重复执行用例插件pytest-repeat
前言 我们在平时做测试的时候,经常会遇到一些偶现的bug,通常我们会多次执行来复现此类bug,那么在自动化测试的时候,如何多次运行某个或某些用例呢,我们可以使用pytest-repeat这个插件来帮助 ...
- Pytest学习笔记12-配置文件pytest.ini
前言 pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行. 常用的配置项 marks 作用:测试用例中添加了自定义标记( ...
随机推荐
- while循环中出现ssh导致读取文件错误
while read line do ...... ssh ... done < $file 使用上面包含ssh命令的while循环,ssh命令将$file内容全部吞噬,导致只处理完一行即退出: ...
- flask的安装
1.查看已安装的Flask版本 在 python 的交互模式中 : 1. import flask 没报错:已经安装了Flask,可以继续查看版本 报错:没安装Flask 2. flask.__ver ...
- SEO:网站改版
网站改版分为2种:前端页面改版(不使用301 ),链接结构发生变化(必须使用301) 1.确定一定以及肯定使用301永久重定向,不要使用302跳转 2.非常十分以及极其要求使用百度站长平台的“网站改版 ...
- mvc core2.1 Identity.EntityFramework Core 导航状态栏(六)
之前做的无法 登录退出,和状态,加入主页导航栏 Views ->Shared->_Layout.cshtml <div class="navbar-collapse col ...
- LeetCode - Kth Largest Element in a Stream
Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...
- confluence 为合并的单元格新增一行
1,先将最后一个结构取消合并单元格 | | ___ | | | ___ | | _ | ___ | 2,在最后一行追加一行,将左侧合并 3,将上面取消合并的重新合并即可
- Kettle入门--作业和转换的使用
本来想在centos7下部署的,发现因为java版本的问题,无法成功部署,无奈,转到windows平台(后来找到解决方法了,在centos7系统下yum install webkitgtk* -y 就 ...
- Centos7使用yum安装程序软件时提示未找到安装包解决方法
查找程序软件源,以sshd为例,假设sshd安装包无法找到,那么可以通过以下方法解决 yum provides sshd 然后我们就可以安装*.X86_64的程序软件源 例如yum install o ...
- KMPlayer速度步进设置及快捷键设置和同级视频自动加入播放列表
速度步进设置 快捷键设置 同级视频自动加入播放列表
- C# to IL 3 Selection and Repetition(选择和重复)
In IL, a label is a name followed by the colon sign i.e ":". It gives us the ability to ju ...