pytest:是一个框架,使构建简单和可扩展的测试变得容易。

安装:pip install -U pytest

检查安装:pytest --version

官方文档:https://docs.pytest.org/en/latest/contents.html#toc

Running pytest can result in six different exit codes:

Exit code 0: All tests were collected and passed successfully
Exit code 1: Tests were collected and run but some of the tests failed
Exit code 2: Test execution was interrupted by the user
Exit code 3: Internal error happened while executing tests
Exit code 4: pytest command line usage error
Exit code 5: No tests were collected

To stop the testing process after the first (N) failures:

  1. pytest -x # stop after first failure
  2. pytest --maxfail=2 # stop after two failures

Pytest supports several ways to run and select tests from the command-line.(多种方式运行测试用例)

Run tests in a module:pytest test_mod.py

Run tests in a directory:pytest testing/

Run tests by keyword expressions:pytest -k "MyClass and not method"

This will run tests which contain names that match the given string expression, which can include Python operators that use filenames, class names and function names as variables. The example above will run TestMyClass.test_something but not TestMyClass.test_method_simple.

Run tests by node ids:

To run a specific test within a module:pytest test_mod.py::test_func

Another example specifying a test method in the command line:pytest test_mod.py::TestClass::test_method

Run tests by marker expressions:pytest -m slow

Will run all tests which are decorated with the @pytest.mark.slow decorator.

Run tests from packages:pytest --pyargs pkg.testing

This will import pkg.testing and use its filesystem location to find and run tests from.

  1. @pytest.fixture(scope="module")
    scope作用域: function, class, module, package or session. function, class, module, package or session.

conftest.py: sharing fixture functions

If during implementing your tests you realize that you want to use a fixture function from multiple test files you can move it to a conftest.py file. You don’t need to import the fixture you want to use in a test, it automatically gets discovered by pytest. The discovery of fixture functions starts at test classes, then test modules, then conftest.py files and finally builtin and third party plugins.

详情:https://docs.pytest.org/en/latest/fixture.html#conftest-py-sharing-fixture-functions

以下是方程无解老师整理的内容:

Unittest:python内嵌的测试框架

编写简范:

  测试模块:import unittest

  测试类必须继承:unittest.TestCase

  测试方法必须必须以“test_”开头

  模块名字、类名不做要求

测试方法级别:setUp、tearDown

测试类级别:setUpClass、tearDownClass

模块级别:setUpModule、tearDownModule

更高级的框架:Pytest

  具有很多第三方插件:http://plugincompat.herokuapp.com/

编写规范:

  测试文件以“test_”开头(以"_test"结尾也行)

  测试类以"Test"开头,并且不能带有__init__方法

  测试函数以"test_"开头

部分应用:

  1. # encoding: utf-8
  2.  
  3. import pytest
  4.  
  5. # pytest:参数化
  6. @pytest.mark.parametrize("x,y", [(3, 3), (3+5, 8), (6*2, 12), ("a", "a")])
  7. def test_add(x, y):
  8. assert x == y
  9.  
  10. value = 0
  11.  
  12. def test_add1():
  13. global value
  14. value = 10
  15. assert value == 10
  16.  
  17. def test_add2():
  18. print("I am 2")
  19. assert value == 10
  20.  
  21. @pytest.fixture()
  22. def login_and_login_out():
  23. return 1
  24. # print("login start")
  25. # yield
  26. # print("login out")
  27.  
  28. class TestSample:
  29. def test_answer1(self, login_and_login_out):
  30. result = login_and_login_out
  31. assert result == 1
  32.  
  33. # fixtures名字调用
  34. def test_answer2(self, login_and_login_out):
  35. result = login_and_login_out
  36. assert result == 1
  37.  
  38. # fixtures decorator调用
  39. @pytest.mark.usefixtures("login_and_login_out")
  40. def test_answer3(self):
  41. assert 1 == 1
  42.  
  43. # fixtures autouse调用
  44. @pytest.fixture(scope="module", autouse=True)
  45. def login():
  46. print("login -----------------")
  47. yield
  48. print("end login -------------")
  49.  
  50. @pytest.fixture(scope="class", autouse=True)
  51. def out():
  52. print("login out start -------")
  53. yield
  54. print("login out end ---------")
  55.  
  56. class TestSample2:
  57. def test_answer4(self):
  58. assert "hello 2019" == "hello 2019 "
  59.  
  60. def test_answer5(self):
  61. assert "fine" == "fine "
  62.  
  63. class TestSample3:
  64. def test_answer(self):
  65. assert "welcome" == "welcome "

pytest执行用例的方式:

  1)执行一个module:pytest -v src/testcase/api/xxx.py

  2)执行一个类:pytest -v src/testcases/api/xxx.py::TestSample(类名)

  3)执行一个方法:pytest -v src/testcases/api/xxx.py::TestSample(类名)::test_xx(方法名)

  4)执行一个目录或package:pytest -v src/testcases/api

  5)通过标签来运行测试用例:pytest -m P0(标签名) src/testcases/api/

  通过pytest.main运行:pytest.main(['-v', '--instafail', 'testcases/api/xxx.py', '-m=P0'])

  

python--pytest库的更多相关文章

  1. python常用库

    本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...

  2. python第三方库,你要的这里都有

    Python的第三方库多的超出我的想象. python 第三方模块 转 https://github.com/masterpy/zwpy_lst   Chardet,字符编码探测器,可以自动检测文本. ...

  3. python常用库(转)

    转自http://www.west999.com/info/html/wangluobiancheng/qita/20180729/4410114.html Python常用的库简单介绍一下 fuzz ...

  4. Python第三方库资源

    [转载]Python第三方库资源   转自:https://weibo.com/ttarticle/p/show?id=2309404129469920071093 参考:https://github ...

  5. 【转载】Python第三方库资源

    转自:https://weibo.com/ttarticle/p/show?id=2309404129469920071093 参考:https://github.com/jobbole/awesom ...

  6. Python全部库整理

    库名称简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器端构建格式 ...

  7. python 三方库字典

    参考:https://github.com/jobbole/awesome-python-cn 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 ...

  8. python的库有多少个?python有多少个模块?

    这里列举了大概500个左右的库: !   Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主 ...

  9. python第三方库大全

    环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以在虚拟环境中执行命令.官网 v ...

  10. python+paramiko库+svn写的自动化部署脚本

    第一篇博文 直接开门见山的说了. 这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞. 一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一 ...

随机推荐

  1. 【Mongodb】用户和认证 权限总结

    开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以对数据库任意操作而且可以远程访问数据库!   在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时admin ...

  2. linux中高亮显示文本的工具 -- bat

    bat 的项目地址 https://github.com/sharkdp/bat bat 是用rust 开发的, 在centos中安装bat需要rust的环境, 我们可以通过安装rust的包管理工具c ...

  3. 【Oracle】两个表Join关联更新

    两个表关联,用B表的字段更新A表的字段. UPDATE ( SELECT A.COL1 A_COL, B.COL2 B_COL FROM table1 A INNER JOIN table2 B ON ...

  4. Mac OS 电信3G上网设置

    打开客户端后(安装客户端mobile partner需要先安装jdk),在“系统偏好设置”里选择“网络”,网络左侧添加“huaweimobile-modem”,“电话号码”填写电信卡号,“账户名称”和 ...

  5. ios开发之--数组的一些操作

    1,创建数组 NSMutableArray * array =[[NSMutableArray alloc] initWithObjects:@"a",@"b" ...

  6. redis make错误处理

    cc: ../deps/hiredis/libhiredis.a: No such file or directory cc: ../deps/lua/src/liblua.a: No such fi ...

  7. Java中获取资源文件的方法总结

    这里总结3中方法获取资源文件的 ServletContext Class ClassLoader 文件的位置 1. ServletContext public void doGet(HttpServl ...

  8. Android 监听apk安装替换卸载广播

    首先是要获取应用的安装状态,通过广播的形式 以下是和应用程序相关的Broadcast Action ACTION_PACKAGE_ADDED 一个新应用包已经安装在设备上,数据包括包名(最新安装的包程 ...

  9. session会话保持

    #coding=utf-8 from flask import Flask from flask import request from flask import redirect from flas ...

  10. 手机CPU

    说起手机CPU的历史,笔者给大家提一个问题:"世界上第一款智能手机是什么呢?"相信很多人的答案是爱立信的R380或诺基亚的7650,但都不对,真正的首款智能手机是由摩托罗拉在200 ...