Pytest框架使用方法总结

前言

Pytest是Python的另一个第三方单元测试库。它的目的是让单元测试变得更容易,并且也能扩展到支持应用层面复杂的功能测试。
pytest的特性有:
支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数
自动识别测试模块和测试函数
模块化夹具用以管理各类测试资源
对 unittest 完全兼容,对 nose基本兼容
支持Python3和PyPy3
丰富的插件生态,已有856多个各式各样的插件,社区繁荣

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

一 pytest单元测试框架

1 什么是单元测试:软件开发中,针对软件的最小单位(函数、方法)进行正确性的检查测试。

2 单元测试框架:

  java:junit和testng

  python:unittest和pytest

 

3 单元测试框架主要做什么:

  3.1 测试发现:从多个文件里面找到我们的测试用例;

  3.2 测试执行:按照一定的规则和顺序去执行,并生成结果;

  3.3 测试判断:通过断言判断预期结果和实际结果的差异;

  3.4 测试报告:统计测试进度、耗时、通过率,生成测试报告;

二 单元测试框架和自动化测试框架有什么区别

1 什么是自动化测试框架

2 作用:

  2.1 提高测试效率;

  2.2 减少人工的干预,提高测试的准确性,增加代码的重用性;

  2.3 核心思想是让不懂代码的人也能够通过这个框架去实现自动化测试。

3 pytest单元测试框架和自动化测试框架的关系:

  3.1 单元测试框架:只是自动化测试框架中的组成部分;

  3.2 POM设计模式:只是自动化测试框架中的组成部分之一;

    数据驱动

    关键字驱动

    全局配置文件的封装

    日志监控

    selenium requests二次封装

    断言

    报告邮件等

三 pytest简介

1 # 安装命令
2 pip install -U pytest
3 
4 # 验证命令
5 pytest --version

 

1 pytest是一个非常成熟的Python的单元测试框架,比unittest更灵活、易上手;

2 pytest可以和selenium、requests、appium结合实现web、APP、接口自动化;

3 pytest可以实现用例的跳过以及returns失败用例重试;

4 pytest可以和allure生成非常美观的测试报告;

5 pytest可以和jenkins持续继承;

6 pytest有很多非常强大的插件,并且这些插件能够实现很多实用的操作:

  pytest-html 生成html格式的自动化测试报告;

  pytest-xdist 分布式执行测试用例,多CPU分发;

  pytest-ordering 用于改变测试用例的执行顺序

  pytest-retunfailures 用例失败后重跑;

  allure-pytest 用于生成美观的测试报告;

  以上插件 可以放到 requirements.txt中,通过pip install -r requirements.txt 快速安装;

四 使用pytest,默认的测试用例的规则以及基础使用

1 模块名必须以test_开头或者_test结尾;

2 测试类必须Test开头,且不能init方法;

3 测试方法必须以test开头;

 1 # -*- coding:utf -8 -*-
 2 
 3 """
 4 @author:ss
 5 @file:test_login.py
 6 @time:2021-04-1118:57
 7 @desc:
 8 """
 9 
10 
11 class TestLogin:
12 
13     def test_01_login(self):
14         print('测试')

五 pytest测试用例运行方式

1 主函数模式:

  1.1 运行所有:pytest.main()

  1.2 运行指定模块:pytest.main(['-vs','test_login.py'])

  1.3 运行指定目录:pytest.main('-vs','./interface_testcase')

  1.4 通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名,组成

    pytest.main(['-vs','./interface_testcase/test_interface.py::test_04_func'])

    pytest.main(['-vs','./interface_testcase/test_interface.py::TestInterface::test_03_zhiliao'])

  1.5 运行指定分组:pytest.main(['-vs','test_login.py','-m','smoke'])

      1.6 自定义测试发现规则:例,忽略一些目录:pytest.main(['-s','-v','--ignore=interface_testcase'])

2 命令行模式:

  2.1 运行所有,命令行直接输入:pytest

  2.2 运行指定模块,命令行直接输入:pytest -vs test_login.py

  2.3 运行指定目录,命令行直接输入:pytest -vs ./interface_testcase

  2.4 运行指定目录,命令行直接输入:pytest -vs ./interface_testcase/test_interface.py::test_04_func

  2.5 运行指定分组,命令行直接输入:pytest -m smoke

参数详解:

  -s pytest默认不输出任何信息,如果要查看打印信息,需要在运行的时候添加-s指令;

  -v 显示更详细的信息;

  -vs 两个参数可以一起使用

  -n 支持多线程或者分布式运行测试用例,如:pytest -vs ./testcase/test_login.py -n 2

  -x 表示只要一个用例报错,那么测试停止

  --reruns NUM 失败用例重跑

  -k 根据测试用例的部分字符串指定测试用例,如:pytest -vs ./testcase -k 'ao'

  --html ./report/report.html --self-contained-html 生成html测试报告,注:不加这个指令--self-contained-html,需要多生成一个布局文件,不利于移动展示,如果加上该指令,只生产一个报告文件,移动、发送邮件特别方便;

 

3 通过读取pytest.ini配置文件运行:这个文件是pytest单元测试框架的核心配置文件

  1 位置:一般放在项目的根目录下;

  2 编码:必须是ANSI,可以使用notpad++修改编码格式;

 

  3 作用:改变pytest的默认行为;

  4 运行规则:不管是主函数的模式运行、命令行运行模式、都会去读取这个配置文件。

  [pytest]

  addopts = -vs # 命令行参数用空格分隔

  testpaths = ./testcase     # 测试用例的路径

  python_files = test_*.py   # 模块名的规则

  python_classes = Test*   # 类名的规则

  python_functions = test   # 方法名的规则

六 pytest执行测试用例的顺序

unittest 按照ASCII的大小来绝对的执行

pytest 默认从上到下

改变默认的执行顺序:使用mark标记,,如:@pytest.mark.run(order=3)

 

posted @ 2021-04-06 23:02  术科术  阅读(631)  评论(0编辑  收藏  举报