Pytest测试框架基本使用方法详解
pytest介绍
pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:
1、简单灵活,容易上手,文档丰富;
2、支持参数化,可以细粒度地控制要测试的测试用例;
3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
4、pytest具有很多第三方插件,并且可以自定义扩展
- 如pytest-selenium(集成selenium)、
- pytest-html(完美html测试报告生成)、
- pytest-rerunfailures(失败case重复执行)、
- pytest-xdist(多CPU分发)、
- pytest--ordering(控制测试运行的顺序)
5、测试用例的skip和xfail处理;
6、可以很好的和CI工具结合,例如jenkins
编写规则:
- 测试文件以test_开头(以_test结尾也可以)
- 测试类以Test开头,并且不能带有 init 方法
- 测试函数以test_开头
断言使用基本的assert即可
快速示例
test_pyexample.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_pyexample.py
2、安装pytest-sugar插件可以看到进度条
Pycharm配置运行:
1.file->Setting->Tools->Python Integrated Tools->项目名称->Default test runner->选择py.test
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 if __name__ == "__main__": pytest.main('-q test_class.py')
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.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)
多个参数:
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): #必须与上面保持一致,只能用x,y不能用其他字母 assert x==y
控制测试运行顺序
安装pytest-ordering
pip install pytest-ordering
借助于装饰器@pytest.mark.run(order=1)控制测试运行的顺序
import pytest import time value=0 @pytest.mark.run(order=2) #后执行order=2 def test_add2(): print("I am 2") time.sleep(2) assert value==10 @pytest.mark.run(order=1) #先执行order=1 def test_add(): print("I am add") global value value=10 assert value==10
运行后生成测试报告(htmlReport)
安装pytest-html:
pip install -U pytest-html
如何使用:
py.test test_pyexample.py --html=report.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:
import random def add(x,y): return x+y def test_add(): random_value=random.randint(2,7) print('random_value:'+str(random_value)) assert add(1,3)==random_value
如何使用:
命令: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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
相关文章
- 这篇文章主要介绍了解决@SpringBootTest 单元测试遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-14
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
这篇文章主要介绍了基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍 的相关资料,需要的朋友可以参考下...2016-05-14- DVWA (Dam Vulnerable Web Application)DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞...2016-11-25
- mail()函数的作用:连接到邮件服务器,利用smtp协议,与该服务器交互并投邮件。注意:1、mail函数不支持esmtp协议,---即,只能直投,不能登陆2、由上条,我们只能直投至最终的收件服务器地址.而该地址,又是在PHP.ini中指定的,所...2015-10-30
- 首先来看下流程:流程原理: 1.通过code获得access_token通过授权,并获取用户的信息(包括用户u_id)(这个u_id在后面的第三方登录表里面叫sina_id,那个表是需要自己建的) 2.查询第三方登录表,如果不存在用户sina_id,分2...2014-05-31
- 这篇文章主要介绍了.net数据库操作框架SqlSugar的简单入门,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下...2021-09-22
- 这篇文章主要介绍了记一次EFCore类型转换错误及解决方案,帮助大家更好的理解和学习使用asp.net core,感兴趣的朋友可以了解下...2021-09-22
- 宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Atheros AR8131 PCI-E Gigabit Ethernet Controller上网没问题。 宿主机使用无线的时候,客户机在Bridged Adapter模式下,使用可选项里唯一一个WIFI选项,Microsoft Virtual Wifi Miniport Adapter也无法上网,故弃之。...2013-09-19
- 这篇文章主要介绍了c# 常用框架汇总,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...2021-04-24
- Laravel框架我们用到的不多了,但如果使用需要搭配了,下面我们来看一篇关于搭建php Laravel框架教程详解,具体的操作细节如下所示,希望对各位有帮助。 一、安装 Compos...2016-11-25
- 这篇文章主要介绍了Java SSM框架如何添加写日志功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-25
- mail()函数的作用:连接到邮件服务器,利用smtp协议,与该服务器交互并投邮件。注意:1、mail函数不支持esmtp协议,---即,只能直投,不能登陆2、由上条,我们只能直投至最终的收件服务器地址.而该地址,又是在PHP.ini中指定的,所...2015-10-30
ASP.NET中iframe框架点击左边页面链接 右边显示链接页面内容
这篇文章主要介绍了ASP.NET中iframe框架点击左边页面链接,右边显示链接页面内容的实现代码,感兴趣的小伙伴们可以参考一下...2021-09-22- php测试性能代码 function microtime_float () { list ($usec, $sec) = explode(" ", microtime()); return ((float) $usec + (float) $sec); } functio...2016-11-25
- 这篇文章主要介绍了node.js爬虫框架node-crawler的相关资料,帮助大家利用node.js进行爬虫,感兴趣的朋友可以了解下...2020-10-29
- 下面我们一起来看看一篇关于phpmyadmin写入一句话木马的测试教程,希望此教程能够对各位有帮助。 方法一,一句话木马偶尔拿到一个config中,发现是root,且还有phpmyadmi...2016-11-25
- Ray是一种分布式执行框架,便于大规模应用程序和利用先进的机器学习库,今天给大家分享支持python的分布式计算框架Ray详解,感兴趣的朋友一起看看吧...2021-07-29
- 第一次接触神奇的vue.js,主要了解一下v-model、v-if、v-else、v-show、v-for等,感兴趣的小伙伴们可以一起学习一下...2016-12-02
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
这篇文章主要介绍了BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)的相关资料,需要的朋友可以参考下...2016-12-02- 这篇文章主要介绍了上手简单,功能强大的Python爬虫框架——feapder的使用教程,帮助大家更好的利用python进行爬虫,感兴趣的朋友可以了解下...2021-04-26