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 作用:测试用例中添加了自定义标记( ...
随机推荐
- 【opencv基础】OpenCV installation stuck at [ 98%] Built target opencv_perf_stitching with no error
前言 按照官网步骤安装opencv的过程中进行到98%时一直没有继续进行. 原因 后台一直在编译运行,只需等待即可,参考here: well, turns out it gets stuck for ...
- JAVA代码时间SFTP文件的下载
参考文章:http://blog.csdn.net/smallerpig/article/details/50976191 SFTP文件的下载与FTP文件的下载差别较大,需要下载jsch-0.1.54 ...
- Python基础练习及答案
1.请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li=['alex', 'eric', 'rain'] 该题目主要是考的字符串的拼接,join方法, s = "" li ...
- javaweb防止表单重复提交
参考孤傲苍狼 https://www.cnblogs.com/xdp-gacl/p/3859416.html 场景一:在网络延迟的情况下让用户有时间点击多次submit按钮导致表单重复提交 场景二:表 ...
- 对中文进行MD5加密的注意事项(Java版,编码问题)
http://blog.csdn.net/tongdao/article/details/20690187 在工作中需要和第三方进行Http通信,在通信内容中有几个参数涉及到了中文.自己在进行MD5加 ...
- LeetCode - Number of Distinct Islands
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- LG3809 【模板】后缀排序
题意 题目背景 这是一道模板题. 题目描述 读入一个长度为 $ n $ 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的 ...
- prufer数列
涨姿势---prufer数列 一. 简介 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2.它 ...
- nginx安装最简单教程
[root@bogon ~]# wget -c http://nginx.org/download/nginx-1.7.9.tar.gz #下载安装包 [root@bogon ~]# ls anaco ...
- Singer 学习九 运行&&开发taps、targets (四 开发target)
singer 的target 需要从stdin 的行数据,同时处理schema.record.state 消息 指南 schema 需要进行关联stream records 数据的校验 一旦Targe ...