zoukankan      html  css  js  c++  java
  • pytest进阶之配置文件

    前言

    pytest配置文件能够改变pytest框架代码的运行规则。比如修改pytest收集用例的规则,添加命令行参数等等!下面我们来一一讲解常用的一些配置项

    Help

    通过命令pytest --help查看配置文件中可以添加的一些参数及选项,这些选项都是可以添加到pytest的配置文件的

    [pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg file found:
    
      markers (linelist)       markers for test functions
      empty_parameter_set_mark (string) default marker for empty parametersets
      norecursedirs (args)     directory patterns to avoid for recursion
      testpaths (args)         directories to search for tests when no files or dire
      console_output_style (string) console output: classic or with additional progr
      usefixtures (args)       list of default fixtures to be used with this project
      python_files (args)      glob-style file patterns for Python test module disco
      python_classes (args)    prefixes or glob names for Python test class discover
      python_functions (args)  prefixes or glob names for Python test function and m
      disable_test_id_escaping_and_forfeit_all_rights_to_community_support (bool) di
      xfail_strict (bool)      default for the strict parameter of xfail markers whe
      junit_suite_name (string) Test suite name for JUnit report
      junit_logging (string)   Write captured log messages to JUnit report: one of n
      junit_duration_report (string) Duration time to report: one of total|call
      junit_family (string)    Emit XML for schema: one of legacy|xunit1|xunit2
      doctest_optionflags (args) option flags for doctests
      doctest_encoding (string) encoding used for doctest files
      cache_dir (string)       cache directory path.
      filterwarnings (linelist) Each line specifies a pattern for warnings.filterwar
      log_print (bool)         default value for --no-print-logs
      log_level (string)       default value for --log-level
      log_format (string)      default value for --log-format
      log_date_format (string) default value for --log-date-format
      log_cli (bool)           enable log display during test run (also known as "li
      log_cli_level (string)   default value for --log-cli-level
      log_cli_format (string)  default value for --log-cli-format
      log_cli_date_format (string) default value for --log-cli-date-format
      log_file (string)        default value for --log-file
      log_file_level (string)  default value for --log-file-level
      log_file_format (string) default value for --log-file-format
      log_file_date_format (string) default value for --log-file-date-format
      addopts (args)           extra command line options
      minversion (string)      minimally required pytest version
    
    environment variables:
      PYTEST_ADDOPTS           extra command line options
      PYTEST_PLUGINS           comma-separated plugins to load during startup
      PYTEST_DISABLE_PLUGIN_AUTOLOAD set to disable plugin auto-loading
      PYTEST_DEBUG             set to enable debug tracing of pytest's internals
    
    
    to see available markers type: pytest --markers
    to see available fixtures type: pytest --fixtures
    (shown according to specified file_or_dir or current dir if not specified; fixtures with leading '_' are only shown with the '-v' option

    File

    通常情况下我们会把配置文件放到我们的项目根目录下 命名为 pytest.ini, 项目在运行时会首先按照配置文件中设置的参数选项来运行,其次再遵守pytest的默认规则

    使用

    添加默认参数选项

    我们都知道pytest可以在cmd中使用命令行运行脚本,通常是这样的 pytest -vqs 脚本, 我们通过这个命令来运行一下脚本,大概输出运行信息就是下面这种形式

    D:PytestAutoTestFrameWorkTestCases>pytest -vqs test_loginCase.py
    ============================= test session starts =============================
    platform win32 -- Python 3.6.4, pytest-4.4.1, py-1.6.0, pluggy-0.9.0
    rootdir: D:PytestAutoTestFrameWork, inifile: pytest.ini
    plugins: rerunfailures-7.0, metadata-1.8.0, html-1.20.0, allure-pytest-2.6.2
    collected 4 items
    
    test_loginCase.py ------------open browser------------
    -------staring login-------
    info: string upload url "https://mail.126.com"
    info:switching to iframe "//div[@id="loginDiv"]/iframe"
    info:clearing value
    [Info:Starting find the element "//input[@name="email"]" by "xpath"!]
    info:input "linuxxiaochao"
    [Info:Starting find the element "//input[@name="email"]" by "xpath"!]
    info:clearing value
    [Info:Starting find the element "//input[@name="password"]" by "xpath"!]
    info:input "xiaochao11520"
    [Info:Starting find the element "//input[@name="password"]" by "xpath"!]
    info:click "//a[@id="dologin"]"
    info:switch back to default iframe
    ---------end login---------

    现在们在我们的项目根目录下新建pytest.ini文件并输入下面的选项

    [pytest]
    addopts=-vqs

    我们再次运行脚本仅通过命令pytest即可,这时候一会发现输出信息和上面一摸一样,这就是配置文件的作用

    添加用例路径

    [pytest]
    testpaths=./TestCases

    通过这样一项设置,我们可以把我们用例所在的目录添加到配置文件,这样我们在运行用例的时候,pytest会直接在配置文件所在的目录搜索用例

    指定pytest的版本

    [pytest]
    minversion = 3.0

    指定pytest忽略哪些搜索目录

    [pytest]
    norecursedirs = .* venv src *.egg dist build

    标红部分为系统默认不会搜索的路径,前面是用户自定义的路径,注:当自定义时最好把系统默认的添加到后面

    修改pytest收集用例的规则-测试类

    pytest默认会搜索以test_开头/以_test结尾的文件,以Test开头的类,且以test_开头的测试函数为测试用例

    我们希望pytest能够搜索以Test*开头,*Test结尾或者*Suite开头或结尾的类名字,我们需要添加这样的选项

    [pytest]
    python_classes = *Test Test* *Suite

    修改pytest收集用例规则-修改测试模块

    我们希望pytest可以搜索以check_*开头的文件

    [pytest]
    python_files=test_* *_test check_*

    修改pytest收集用例规则-修改测试方法

    我们希望可以搜索以check_* 开头的测试函数为测试用例

    [pytest]
    python_functions = test_* *_test check_*

    添加生成报告选项

    [pytest]
    addopts = -v --rerun 1 --html=report.html --self-contained-html

    添加mark标记

    通常我们在编写测试用例的时候,会在用例上回添加一些标记来记录哪些用例需要运行,哪些需要跳过,哪些需要标记为failed等等,那么难免我们记不住这些标记,我们可以通过配置文件记录这些标记

    [pytest]
    markers=
        loginTest: Run login test cases
        contactTest: Run add contact test cases
        sendMailTest: Run send mail test cases

    我们添加完这些标记之后,可以通过 pytest --markers 查看我们自定义的mark

    D:PytestAutoTestFrameWorkTestCases>pytest --markers
    @pytest.mark.loginTest: Run login test cases
    
    @pytest.mark.contactTest: Run add contact test cases
    
    @pytest.mark.sendMailTest: Run send mail test cases
    
    @pytest.mark.flaky(reruns=1, reruns_delay=0): mark test to re-run up to 'reruns' times. Add a delay of 'reruns_delay' seconds between re-runs.
    
    @pytest.mark.filterwarnings(warning): add a warning filter to the given test. see https://docs.pytest.org/en/latest/warnings.html#pytest-mark-filterwarnings
    
    @pytest.mark.skip(reason=None): skip the given test function with an optional reason. Example: skip(reason="no way of currently testing this") skips the test.

    最后

    pytest看的差不多了,其实小项目也写完了,一直没时间整理,也没时间写到博客上来,快51了,争取这几天发出来!

  • 相关阅读:
    Java多态
    推荐TED演讲:20岁光阴不再来(Why 30 is not the new 20)
    HDU 5305 Friends (DFS)
    C#高级编程八十一天----捕获异常
    Amazon EC2安装mysql多实例并配置主从复制
    python coding style guide 的高速落地实践
    Tomcat 在win7/win8 系统下tomcat-users.xml.new(拒绝访问)解决方法
    jsp+oracle实现数据库内容以表格形式在前台显示(包含分页)
    JSP/SERVLET入门教程--Servlet 使用入门
    解决系统打开CHM文件无法正常显示
  • 原文地址:https://www.cnblogs.com/linuxchao/p/linuxchao-pytest-configfile.html
Copyright © 2011-2022 走看看