1、什么是pytest

pytest是一个非常成熟的全功能的Python测试框架,主要有以下特点:

  1. 简单灵活,容易上手,文档丰富
  2. 支持参数化,可以细粒度地控制要测试的测试用例
  3. 能够支持简单的单元测试和复杂的功能测试,还可以用来做 selenium/appium 等自动化测试、接口自动化测试(pytest+request)
  4. pytest有很多第三方插件,可以自定义扩展
  5. 测试用例的skip和xfail处理
  6. 可以很好的和CI工具结合,例如Jenkins

安装pytest 版本

pip3 install pytest==4.0.2

2、pytest的用例编写规则

  1. 测试文件以test_开头(以_test结尾也可以),注意:pytest 文件名.py不受此规则限制。
  2. 测试类以Test开头,并且不能带有 __init__ 方法
  3. 测试函数以test_开头
  4. 断言使用基本的assert即可

3、为什么使用pytest:可以通过命令行来对测试用例进行控制

举例:test_a.py

import pytest

def test_case1():
print("--- test_a ---")
assert True def test_case2():
print("--- test_b ---")
assert True

执行1:pytest  #会执行所有test_ 开头的文件

执行2:pytest -v -s   # -v显示运行的函数,-s运行显示内部的打印信息

执行3:pytest -v -s test_a.py

执行4: pytest -k case2  #case2 是关键字,筛选测试文件、测试类名、测试方法中包含关键字的,均可被执行

执行5:pytest test_a.py::test_case1 -s -v   #执行指定的测试方法

4、执行某个测试方法

代码举例:

import pytest

class Calc(object):
@classmethod
def add(cls, x, y, *d):
# 加法计算
result = x + y
for i in d:
result += i
return result @classmethod
def sub(cls, x, y, *d):
# 减法计算
result = x - y
for i in d:
result -= i
return result @classmethod
def mul(cls, x, y, *d):
# 乘法计算
result = x * y
for i in d:
result *= i
return result @staticmethod
def div(x, y, *d):
# 除法计算
if y != 0:
result = x / y
else:
return -1
for i in d:
if i != 0:
result /= i
else:
return -1
return result def test_add():
assert Calc.add(1, 2, 3) == 6 def test_sub():
assert Calc.sub(100, 20, 30) == 50 class TestCalc():
def test_mul(self):
assert Calc.mul(2, 3, 4) == 24 def test_div(self):
assert Calc.div(32, 8, 4) == 2

执行1:pytest test_c.py::TestCalc::test_mul -s -v  #执行指定的函数

执行2:pytest test_c.py::TestCalc -s -v  #执行指定的类

执行3:pytest test_c.py::TestCalc -s -v --reruns 3  #3表示重跑3次

5、生成pytest测试报告

  1. 安装包:pip install pytest-html
  2. 执行命令:pytest --html=report.html
  3. 生成report.html 测试报告

6、setup 和 teardown 函数

import pytest

class Test_ST():
def setup(self):
print("------setup------") def teardown(self):
print("------teardown------") def test_001(self):
assert True def test_002(self):
assert False

7、确定执行顺序

1)安装包:

pip install pytest-ordering

2)使用 @pytest.mark.run(order=x) 标记被测试函数

3)运行的顺序由order传入的参数决定,order从小到大的顺序执行

import pytest
class Test_ST(): @pytest.mark.run(order=3) #第三个被执行
def test_001(self):
print("001...")
assert True @pytest.mark.run(order=2) #第二个被执行
def test_002(self):
print("002...")
assert True @pytest.mark.run(order=1) #第一个被执行
def test_003(self):
print("003...")
assert True

8、@pytest.fixture

pytest中加入fixture装饰器来标记固定的工厂函数,使测试能够可靠、重复地执行,fixture函数可以在测试执行前和执行后进行必要的准备和清理工作,和unitest测试框架中的setup、teardown类似。但是pytest fixture和传统风格的setuo/teardown函数相比,有了巨大的改进:
1)fixture具有明确的名称,并且通过在测试函数、模块、类或整个项目中申明它们的使用来激活。
2)fixture是以模块化的方式实现的,因为每个fixture名称都会触发fixture函数,其本身也可以使用其他fixture、
3)fixture管理从简单的单元扩展到复制的函数测试,允许根据配置和组件选项参数化fixture和测试,或者在函数、类、模块或整个测试会话范围内重复使用fixture。
 
fixture(scope='function',params=None,autouse=False,ids=None,name=None):
scope:被标记方法的作用域,有四个级别参数
"function"(默认),作用于每个测试方法,每个test都运行一次
"class",作用于整个类,每个class的所有test只运行一次
"module",作用于每个模块,每个module的所有test只运行一次
"session",作用于整个session,每个session只运行一次
params:(list类型)提供参数数据,供调用标记方法的函数使用。
autouse:如果True,则为所有测试激活fixture func可以看到它。如果为False则显示需要参考来激活fixture。
ids:每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成
name:fixture的名称。这默认为装饰函数的名称。如果fixture在定义它的统一模块中使用,夹具的功能名称将被请求夹具的功能arg遮蔽,解决这个问题的一种方法时将装饰函数命令"fixture_<fixturename>"然后使用"@pytest.fixture(name='<fixturename>')"。
 
使用场景:
  1. 作为参数引用
  2. 作为函数引用
  3. 设置自动执行
  4. 设置作用域为function
  5. 设置作用域class
  6. 设置作用域module
  7. 设置作用域为 session
  8. 参数化

9、@pytest.mark

使用方法举例:@pytest.mark.skipif(condition,reason=None)

参数:

         condition:跳过的条件,True(跳过、不执行)/False(不跳过、执行),必传参数
         reason:标注原因
作用:
  1)跳过测试函数:@pytest.mark.skipif(2>1,reason="故意的")
  2)标记函数为失败函数:@pytest.mark.xfail(True,reason="故意的")
  3)传参(要传参数的名称,且和参数化中定义的一致):
    单个参数:@pytest.mark.parametrize('name', ["tom", "lisa", "lucy"])  
    多个参数:@pytest.mark.parametrize("username,password",[('wang','wang123'),('li','li23'),('zhao','zhao123')])

单元测试框架pytest的更多相关文章

  1. Pytest单元测试框架-Pytest环境安装

    unittest是python自带的单元测试框架,它封装好了一些校验返回的结果方法和一些用例执行前的初始化操作,使得单元测试易于开展,因为它的易用性,很多同学也拿它来做功能测试和接口测试,只需简单开发 ...

  2. 【Pytest】python单元测试框架pytest简介

    1.Pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高.根据pytest的官方网站介绍 ...

  3. Pytest单元测试框架——Pytest+Allure+Jenkins的应用

    一.简介 pytest+allure+jenkins进行接口测试.生成测试报告.结合jenkins进行集成. pytest是python的一种单元测试框架,与python自带的unittest测试框架 ...

  4. python单元测试框架pytest

    首先祝大家国庆节日快乐,这个假期因为我老婆要考注会,我也跟着天天去图书馆学了几天,学习的感觉还是非常不错的,这是一篇总结. 这篇博客准备讲解一下pytest测试框架,这个框架是当前最流行的python ...

  5. python单元测试框架——pytest

    官网:https://docs.pytest.org/en/latest/ pytest帮你写出更好的程序 1.An example of a simple test:(一个简单的例子),命名为tes ...

  6. python单元测试框架pytest——fixture函数(类似unitest的setup和teardown)

    pytest的setup和teardown函数(曾被一家云计算面试官问到过). pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作.与python自带的unitest ...

  7. python:单元测试框架pytest的一个简单例子

    之前一般做自动化测试用的是unitest框架,发现pytest同样不错,写一个例子感受一下 test_sample.py import cx_Oracle import config from sen ...

  8. Python单元测试框架pytest常用测试报告类型

    先前博客有介绍pytest测试框架的安装及使用,现在来聊聊pytest可以生成哪些测试报告 1.allure测试报告 关于allure报告参见先前的一篇博文:https://www.cnblogs.c ...

  9. Python单元测试框架之pytest -- 断言

    对于测试来讲,不管是功能测试,自动化测试,还是单元测试.一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果.测试的成功与否就是拿实际的结果与预期的结果进行比较.这个比的过程实际就 ...

  10. Python单元测试框架之pytest -- 生成测试报告

    继续pytest单元测试框架的学习,pytest可以生成多种类型的测试报告.这一节就来学习pytest如何生成测试报告. 创建test_calss.py 测试用例文件,这里以测试该文件为例. #cod ...

随机推荐

  1. 52条SQL语句,性能优化!

    52条SQL语句,性能优化! SQL语句性能优化 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2,应尽量避免在 where 子句中对 ...

  2. Redis从入门到放弃(11):雪崩、击穿、穿透

    1.前言 Redis作为一款高性能的缓存数据库,为许多应用提供了快速的数据访问和存储能力.然而,在使用Redis时,我们不可避免地会面对一些常见的问题,如缓存雪崩.缓存穿透和缓存击穿.本文将深入探讨这 ...

  3. numpy中计算相关系数的np.corrcoef

    np.corrcoef的作用 计算 Pearson 乘积矩相关系数.它可以用来分析给定数据集中各个变量之间的线性相关程度,返回一个相关系数矩阵,相关系数矩阵中的值介于 -1 到 1 之间,包括 -1 ...

  4. Vue【原创】基于【日历组件Calendar】的【节假日管理】功能整合

    基于日历组件(lilo-calendar)的节假日管理功能整合. 效果图: 完整代码: 1 <template> 2 <div class="root-calendar&q ...

  5. springboot集成seata1.5.2+nacos2.1.1

    一.前言 Seata出现前,大部分公司使用的都是TCC或者MQ(RocketMq)等来解决分布式事务的问题,TCC代码编写复杂,每个业务均需要实现三个入口,侵入性强,RocketMQ保证的是最终一致性 ...

  6. Docker 镜像库国内加速的几种方法

    概述 在国内,拉取 Docker 镜像速度慢/时不时断线/无账号导致限流等,比较痛苦. 这里提供加速/优化的几种方法. 梳理一下,会碰到以下情况: 国内下载速度慢/时不时断线:是因为网络被限制了. 没 ...

  7. 通过snmp获取设备每个接口的配置IP地址,网段信息和VLAN接口号

    第一部分,观察通过snmp OID能获取的信息,对信息进行关联. 1.通过 snmp获取到接口IP地址和掩码信息,发现IP地址作为索引值: 2.每个IP地址的索引,都可以关联到接口的索引 3.每个接口 ...

  8. GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,WINDOWS平台)

    工具简介 GDB苹果网页一键打包工具(IOS,IPA,苹果应用网页打包,Windows平台)可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行.作为 ...

  9. Solution -「YunoOI 2017」由乃的 OJ

    Description Link. 起床困难综合症 上树. Solution 线段树维护,树剖上树. 具体题解有空再写,我要去睡觉了. #include<bits/stdc++.h> ty ...

  10. LeetCode 周赛上分之旅 #47 前后缀分解结合单调栈的贡献问题

    ️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...