https://www.cnblogs.com/poloyy/category/1690628.html 前言 目前有两种纯测试的测试框架,pytest和unittest unittest应该是广为人知...,而且也是老框架了,很多人都用来做自动化,无论是UI还是接口 pytest是基于unittest开发的另一款更高级更好用的单元测试框架 出去面试也好,跟别人说起来也好,pytest的逼格明显高于unittest...文件名以 test_*.py 文件和*_test.py 以 开头的函数 test_ 以 开头的类,不能包含 __init__ 方法 Test 以 开头的类里面的方法 test_ 所有的包...装饰器修饰的所有测试,后面再展开讲标记哦 6、-q 简单打印,只打印测试用例的执行结果 pytest -q start.py 7、-s 详细打印 pytest -s start.py 8、-x 遇到错误时停止测试...pytest -s -k "method or weibo" start.py Pycharm运行Pytest 平时写代码,咱们都在Pycharm写的,怎么可能一直用cmd来跑用例呢,现在我们就来看看在
而这篇文章主要讲unittest与pytest的区别,pytest相对unittest而言,代码简洁,使用便捷灵活,并且插件很丰富。 ...pytest更加方便快捷,用例格式简单,可以执行unittest风格的测试用例,无须修改unittest用例的任何代码,有较好的兼容性。...首先了解一下,用例运行前后置级别如下: 1.模块级:全局的,整个模块开只运行一次,优先于测试用例。 2.类级别:定义在类里面,只针对此类生效。...('\n整个模块 后 只运行一次') def setup_function(): print('\n不在类中的函数,每个用例 前 只运行一次') def teardown_function(...3") 运行结果: 细心的人应该可以知道,测试用例2并没有调用login函数,因为前置设置的是共享模式,类似全局函数。
测试过滤 随着测试套件的增长,可能会发现我们只想在一个功能上运行几个测试,为此, pytest提供了一些方法。 按名字的过滤。可以将pytest限制为只运行完全限定名称与特定表达式匹配的测试。...测试参数化 当你对那些处理这些数据或只是转换的函数进行测试时,可能会发现很多类似的测试,而他们可能只在被测试的代码的输入或输出方面有所不同。这需要复制测试代码,这样做有时会模糊我们试图测试的行为。...这些数据代表了一个人的列表,每个人都有一个给定的名字、姓氏和工作职位。该函数应该输出一个字符串的列表,其中包括每个人的全名、冒号和他们的头衔。如下代码。...如果想只运行那些需要数据库访问的测试,那么我们可以使用pytest -m database_access 要运行所有的测试。...py.test , 将会读取当前路径下所有符合规则的文件,类,方法,函数全部执行 -v参数 打印详细运行的日志信息,方便定位问题 -s参数 可以在控制台输出结果,当代码中有用到print语句输出信息时
、--cache-clear 3、自定义标记mark 1、运行上次失败用例 执行全部用例,第一次部分用例执行失败,此时当被测系统修复后,可执行上次失败的用例。...命令行输入 pytest -h 可以查询到两个命令行参数:--lf 和 --ff 参数: --lf, --last-failed 只重新运行上次运行失败的用例(或如果没有失败的话会全部跑)。...--ff, --failed-first 运行所有测试,但首先运行上次运行失败的测试(这可能会重新测试,从而导致重复的fixture setup/teardown)。...--cache-clear 在测试运行开始时删除所有缓存内容。 创建test_cache.py文件 编写4条测试用例 脚本代码: #!...: 只执行标记是case1的(函数test_case1)。
代码例子:import pytest# 定义测试函数def test_function(): assert True# 定义一个包含测试函数的模块module = """def test_function...()当你运行 run_tests.py 时,它会从内部执行 pytest,并自动运行当前目录下的所有测试文件(以 test_ 开头或以 _test 结尾的文件)。...例如,指定某个特定的测试文件运行:# run_tests.py import pytest def run_tests(): # 只运行指定的测试文件 pytest.main([...:pytest.main() 返回一个整数,表示测试运行的结果:0:所有测试都通过。...1:有测试失败。2:测试执行被中断。3:内部错误。4:命令行用法错误。
如果测试通过,它会输出一条简短的消息,否则会显示详细的错误信息。无论是使用unittest还是pytest,单元测试和TDD都是提高代码质量和可靠性的重要工具。...- y再次运行pytest,我们应该会看到测试用例通过:pytest现在我们成功地通过了新的测试用例。...divide(10, 0)再次运行pytest来验证这个测试用例:pytest确保所有的测试用例都通过后,我们就可以确信我们的函数在各种情况下都能正确工作。...我们列出了一系列参数组合和预期结果,pytest将会针对每个参数组合运行一次测试。运行pytest来验证参数化测试是否通过:pytest如果所有的测试通过了,那么我们的参数化测试就成功了。...然后我们调用divide函数,并验证日志模块的error方法是否被正确调用了一次。运行pytest来验证集成测试是否通过:pytest如果测试通过,那么我们的集成测试就成功了。
FizzBuz是一个简单的代码类型,非常适合解释和展示Python中的单元测试。 单元测试 单元测试是程序员为测试程序的一小部分而编写的自动化测试。单元测试应该运行得很快。...测试夹具用于配置和构建被测试单元。每个测试用例都可以使用这些通用条件。在本例中,我使用它创建FizzBuzz类的实例。 要运行单元测试,我们需要一个测试运行器。...测试运行器 测试运行程序是执行所有单元测试并报告结果的程序。Python的标准测试运行器可以使用以下命令在终端上运行。 python -m unittest test_fizzbuzz.py ?...测试用例名称的列表应该读起来像摘要或场景列表。这有助于读者理解被测单元的行为。 构造测试用例方法体 一个设计良好的测试用例由三部分组成。第一部分,安排、设置要测试的对象。...它应该将结果存储在htmlcov中。而不是为所有文件生成覆盖率报告,我告诉覆盖率只使用alarm.py。 ? ·END·
(['-s','-r','test_Pytest.py','test_Pytest.py']) 运行结果如下图:我们可以看到该用例中pytest.xfail()方法之前的代码运行了,之后的不再运行;结果中有一天用例被标记为...,pytest会capture所有的输出,保存直到所有的测试用例都执行结束,并且只输出那些失败的测试用例的信息,对于成功的测试用例,没有print的信息显示。...但是pytest还是会等着所有的测试用例都执行完毕才会显示运行结果。可以看到下面的test_1也显示出print的相关信息。...可是pytest还是要等所有的结果都运行完毕才完全输出到屏幕上,没法看到实时的运行情况。...通过本文,应该知道如何用pytest,logging和–capture=no实现运行测试用例的实时输出所有的log信息。
fixture功能 传入测试中的数据集 配置测试前系统的数据准备,即初始化数据 为批量测试提供数据源 fixture可以当做参数传入 如何使用 在函数上加个装饰器@pytest.fixture(),个人理解为...autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture ids:params测试ID的一部分。...",它的作用范围是每个测试用例执行之前运行一次,销毁代码在测试用例之后运行。...3、scope="module" fixture为module时,在当前.py脚本里面所有用例开始前只执行一次。...,即setup部分已经抛出异常了,则不会执行 request.addfinalizer() 的teardown内容(和yield相似,应该是最近新版本改成一致了) 可以声明多个终结函数并调用
,没有被大家挖掘出来,如此强大的框架不应该被埋没,今天我就带领大家深入pytest使用,共同领略pytest的强大。...() 来忽略,但做不到不改动代码变更测试用例集,pytest很好的实现了这一点,它支持如下查找: # 1....运行某个package下的所有用例。 pytest test_4....运行某个文件(module)下的所有用例。 pytest testtalk.py #会查找这个文件下所有的Test开头的类(这个类不允许有__init__方法)下面的以test_开头的方法。...、销毁函数或者多个条件的测试提供了更加灵活的选择。
1 pytest简介、安装和用例运行1.1 pytest简介pytest是Python的一个单元测试框架,与python自带的unittest测试框架类似;pytest比unittest框架使用起来更简洁...首先看下pytest运行用例规则:A、文件名规则:test_*.py和 *_test.py命名的函数;B、函数名规则:以test_开头的函数;C、python包的规则:同python一样,包需要有__init...__.py文件;D、静默运行:以-q或-quiet参数进行静默运行函数;运行方式:1、通过文件名去运行,比如在代码中加if __name == 'main__': pytest.main("-s",...的setup、teardown特性pytest前置和后置就是告诉用例运行前应该做啥,运行完后应该做啥;和unittest有一些方法是一样的;pytest有十种前置和后置方法:方法 运行级别说明setup_module...的mark特性pytest可自定义标记,即进行mark;作用是把一个大项目自动化用例,划分多个模块,标明哪些是模块A用例,哪些是模块B的,运行代码时候指定mark名称运行就可以;使用方法为:@pytest.mark
pytest.ini配置 3.1、在带头模式下运行测试(默认:无头) pytest --headed 3.2、在不同的浏览器中运行测试 在不同的浏览器 chromium、firefox 或 webkit...中运行测试。...1、fixture初步使用 我们直接在函数前定义就可以 @pytest.fixture() 但是这块是有一些注意事项:要定义的函数最好不要以test开头,和用例分开,并且fixture定义的函数是有返回值的...set): print('用例1') 这里我们定义了一个测试夹具,然后再test_01中使用了测试夹具的参数,那么执行结果应该是会先调用这个夹具函数,然后再执行用例函数 看下执行结果: 2、fixture...fixture中,也可以这样使用 并且有好几个: unction:默认作用域,每个测试用例都运行一次 class:每个测试类只执行一次 module:每个模块只执行一次 package:每个python
运行所有: pytest 或: make test 请注意,后者被定义为: python -m pytest -n auto --dist=loadfile -s -v ....确保同一文件中的所有测试将由同一个测试进程运行 不捕获输出 以详细模式运行 获取所有测试的列表 测试套件的所有测试: pytest --collect-only -q 给定测试文件的所有测试...在源代码修改时自动重新运行失败的测试 pytest-xdist提供了一个非常有用的功能,可以检测所有失败的测试,然后等待您修改文件并持续重新运行这些失败的测试,直到它们通过,同时您修复它们。...它将: 检查差异中的每个文件,看看更改是在代码中还是仅在注释或文档字符串中。只保留具有真实代码更改的文件。 构建一个内部映射,为库源代码的每个文件提供递归影响的所有文件列表。...所有__init__.py文件在其两个部分中具有相同的内容(由utils/check_inits.py执行) 所有被识别为从另一个模块复制的代码与原始代码一致(由utils/check_copies.py
ytest test_mod.py::TestClass::test_method 6.通过标记表达式执行 pytest -m slow 这条命令会执行被装饰器 @pytest.mark.slow 装饰的所有测试用例...2.存在于测试类内部 代码示例: 函数级别setup()/teardown() 运行于测试方法的始末,即:运行一次测试函数会运行一次setup和teardown import pytest...------->teardown_method # 第二次 teardown() 2.2.类级别 运行于测试类的始末,即:在一个测试内只运行一次setup_class和teardown_class,不关心测试类内有多少个测试函数...function" (default):作用于每个测试方法,每个test都运行一次 "class":作用于整个类,每个class的所有test只运行一次 "module":作用于整个模块,每个module...的所有test只运行一次 "session:作用于整个session(慎用),每个session只运行一次 params:(list类型)提供参数数据,供调用标记方法的函数使用 autouse:是否自动运行
在你编写测试函数的时候,你可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数。...比如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次,否则每个测试用例都要做这两步也是冗余。...,它将导致多个参数调用fixture函数和所有测试使用它。...此时应该要有一个配置文件,单独管理一些预置的操作场景,pytest里面默认读取conftest.py里面的配置 5.2 conftest.py 5.2.1 代码实现: ?...if __name__ == "__main__": pytest.main(["-s", "test_fix1.py"]) 5.3.3 运行结果: 运行代码后,控制台打印如下图的结果 ?
运行参数 pytest 带有很多参数,可以使用 pytest --help 来查看帮助文档,下面介绍几种常用的参数: **无参数** 读取路径下所有符合规则的文件,类,方法,函数全部执行。...使用方法如下: pytest -v **-s 参数** 带控制台输出结果,当你的代码里面有 print 输出语句,如果想在运行结果中打印 print 输出的代码,在运行的时候可以添加 -s 参数,一般在调试的时候使用...应用场景:在自动化测试过程中可以将测试用例添加标签进行分类,比如登录功能、搜索功能、购物车功能、订单结算功能等,在运行的时候可以只运行某个功能的所有的测试用例,比如这个版本只想验证登录功能,那就在所有登录功能的测试用例方法上面加上装饰符...@pytest.mark.login ,运行的时候使用命令添加一个 -m 参数,例如执行 pytest -m login 命令就可以只执行登录功能这部分的测试用例。...安装完 pytest 之后,编写的符合规则的测试用例都能被识别出来并且标出一个绿色的执行按钮,点击这个按钮也能执行某个方法或者某个类。例如: [no8svsdcs4.png?
如果某个测试函数被断言失败或者触发了外部异常,则该测试用例的运行就会终止,pytest将其标记为失败后会继续下一个测试用例。通常来说这是我们期望的运行模式。...Short模式:仅输出assert的一行一级系统判定内容。 line模式只使用一行输出显示所有的错误信息。 no模式则直接屏蔽全部回溯信息。...如果指定duration=0,将所有阶段按耗时从长到短排序后显示。 三:Pytest的精髓Fixture fixture是在测试函数运行前后,又pytest执行的外壳函数。...@pytest.fixture()装饰器用于声明函数是一个fixture。如果测试函数的参数列表中包含fixture名,那么Pytest会检测到,并在测试函数运行之前执行该fixture。...Scope=’function’: 函数级别的fixture每个测试函数只需要执行一次,配置代码在测试用例执行之前执行,销毁代码在测试用例运行之后运行。function是scope的默认值。
开发者应该将自动化测试视为代码的保险策略,防止由于增加新功能致使BUG产生。 另外一个要实施自动化测试的缘由,是因为人工测试在某些时候是难以完成对程序的所有功能测试。...比如,先向此函数提供3、6、9等这类能被3整除的数字,测试其是否返回Fizz。 按照这个思路,新建一个文件,并写入如下代码。...如果是一个大型项目,更应该有条不紊地进行单元测试,常见的一种方法把测试用的.py文件放到名为tests的目录中,从而与应用程序的代码分开。...比如,对于上面的应用程序fizzbuzz.py,如果想测试一下,遇到不能被3整除的数字的表现,就可以在test_fizzbuzz.py的列表中增加一个数字4,然后运行pytest。...虽然我们测试的目标就是这个函数,看来还是有遗漏。不过,第9行是函数的最后一行,它在确定输入的数字不能被3或5整除后返回该数字。
assert 2==2if __name__ == '__main__': pytest.main(["-v","-s","test_pytest.py"]) 直观的看到第一个运行和最后运行的是...params:可选参数列表,它将导致多个参数调用fixture函数和所有测试使用它。...autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture ids:params测试ID的一部分。...scope="module": fixture为module时,在当前.py脚本里面所有用例开始前只执行一次。...() ,代表这个类里面所有测试用例都会调用该fixture 可以叠加多个 @pytest.mark.usefixtures() ,先执行的放底层,后执行的放上层 可以传多个fixture参数,先执行的放前面
级别介绍: function级别(针对函数):每个测试用例运行之前运行 class级别(针对测试类):每个类执行一次(所有测试用例运行之前运行,这个节点从引入fixture的测试用例开始算)...scope="function",它的作用范围是每个测试用例来之前运行一次,销毁代码在测试用例运行之后运行。 ...(用例),都使用了fixture函数名,这样的话,fixture只在该class下所有测试用例执行前执行一次。 ...fixture函数名,这样的话,fixture只在该class下第一个使用fixture函数的测试用例位置开始算,后面所有的测试用例执行前只执行一次。...其作用在多个测试模块(.py文件)中只执行一次,并且是在传入函数名的测试用例中的第一个执行的测试用例之前执行。
领取专属 10元无门槛券
手把手带您无忧上云