首页 > 编程语言 >python学习笔记:pytest单元测试框架

python学习笔记:pytest单元测试框架

时间:2022-09-21 11:47:42浏览次数:66  
标签:__ python self 单元测试 用例 pytest test main

一、安装配置和运行规则

1、安装:pip install pytest

查看安装版本:pytest --version

 

2、Pytest用例运行规则

用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的。

文件名以 test_*.py 文件或*_test.py;

以 test_ 开头的函数;

以 Test 开头的类,不能包含 __init__ 方法;

以 test_ 开头的类里面的方法;

所有的包(package)必项要有__init__.py 文件。


二、常见报错处理

1、运行测试用例时报错:AttributeError: 'Function' object has no attribute 'get_marker'

解决方案:升级pytest_remotedata版本

cmd --> 升级命令:pip install -U pytest_remotedata

 

三、基本case编写

在unittest中,写case必须得定义类,继承TestCase,而pytest不需要,类和函数都支持,函数需要以test开头,类需要以Test开头,断言只使用assert关键字即可, 代码如下:

import  pytest

class TestCase:

    #正确的用例
    def test_01(self):
        print('第一条用例')
        assert  1==1

    #不正确的用例
    def test_02(self):
        print('第二条用例')
        assert 1 == 2

# 运行用例 2种方式 命令运行pytest, main方法运行
if __name__ =='__main__':
    pytest.main()

运行结果如下

 

四、装饰器:用例执行的优先级、用例标签、用例跳过

1、用例优先级:使用@pytest.mark.run(order=xx)装饰器,数字越小,优先级越高。

注解不能控制执行顺序,原因为当前python环境未安装pytest-ordering

pip install pytest-ordering  

 

2、用例标签:多条用例,只想执行某一条、某几条用例,可以使用装饰器@pytest.mark.smoke(smoke是名字随便取,在运行时需要加上'-m‘,’smoke'进行标记)

 

3、用例跳过:使用装饰器@pytest.mark.skip("无条件跳过"),需要传一个字符串,说明跳过原因

import  pytest

class TestCase001:

    #正确的用例
    @pytest.mark.smoke #只执行该条用例,执行时需要加上'-m','smoke'
    def test_01(self):
        print('第一条用例')
        assert  1==1

    # @pytest.mark.skip("无条件跳过") #跳过此条用例,不执行
    def test_02(self):
        print('第二条用例')
        assert 1 == 2


    # @pytest.mark.run(order=1)#此条用例优先级为1,数字越小最早执行
    def test_03(self):
        print('第三条用例')
        assert 1 == '1'

if __name__ =='__main__':
    pytest.main(['-m','smoke','test_case001'])

 

五、前置/后置操作

import  pytest

class TestCase:

    # 前置条件类
    def setup_class(self):
        print('一个case执行之前做的事情')
    #后置条件类
    def teardown_class(self):
        print('一个case执行之后做的事情')

    # 前置条件方法
    def setup(self):
        print('所有case例执行之前做的事情')
    #后置条件方法
    def teardown(self):
        print('所有case执行之后做的事情')

    def test_01(self):
        print('第一条用例')

    def test_02(self):
        print('第二条用例')


if __name__ =='__main__':
    pytest.main([])

六、测试报告

1、生成HTML报告

  1)pytest-html

安装:pip install pytest-html

使用:pytest.main(["--html=./report.html","--self-contained-html"])

  2)PyTestReport(推荐)

安装:pip install PyTestReport

使用:pytest.main(["--pytest_report","py_test_report.html","--pytest_title","这是测试报告的标题","--pytest_desc","测试报告描述"])

  3)pytest-html-reporter

安装:pip install pytest-html-reporter

使用:pytest.main(["--html-report=./report_new.html"])

2、集成Allure报告(推荐)

如果要在pytest中集成allure报告,首先得下载allure,并配置好环境

 1)安装allure的插件:pip install allure-pytest  2)下载allure压缩包,解压到任意文件夹下,例如python文件夹下:下载地址:https://github.com/allure-framework/allure2/releases  3)配置环境变量:此电脑>属性>高级系统设置>环境变量>找到path:新建,将地址放进去,我的地址是“E:\python3\allure-2.19.0\bin”

 

 4)生成测试报告,新建py文件run.py,键入以下代码。

#生成测试报告  执行有用例
import pytest,os

if __name__ == '__main__':
    #括号里分别是,要执行的py文件,要用alluredir生成数据,自动生成的文件夹名称
    pytest.main(['test_bili_pytest.py','--alluredir','./allure-result'])
    #括号里的意思分别是: allure generate执行测试数据,-o生成测试报告,文件夹名reports
    os.system(('allure generate ./allure-result -o ./reports'))

 

5)生成的测试数据如下,不需要动,否则会影响报告。

在index.html点右键→open in browser→选择浏览器,打开报告

 

 

 

 七、pytest之fixture

 

 

 

 

 

标签:__,python,self,单元测试,用例,pytest,test,main
From: https://www.cnblogs.com/haifeima/p/16706068.html

相关文章

  • Pytest+allure+requests接口自动化
    实现功能测试数据隔离:测试前后进行数据库备份/还原接口直接的数据依赖:需要B接口使用A接口响应中的某个字段作为参数对接数据库:讲数据库的查询结果可直接用于断言......
  • “Python 中的监督学习”Datacamp 课程回顾
    “Python中的监督学习”Datacamp课程回顾这是我刚刚参加的课程的回顾。这篇评论作为学习辅助:帮助我在第一次学习后综合信息,并希望将内容保留更长时间。这篇文章还提供了......
  • 用于数据准备的 Python — 探索和清理数据集
    用于数据准备的Python—探索和清理数据集什么是数据准备?数据准备是收集、组合、结构化和组织数据的过程,以便将其用于商业智能(BI)应用程序、分析和数据可视化。此......
  • 你应该知道的 Python F 字符串技巧
    Python你应该知道的PythonF字符串技巧停止打印(f”variable={variable}”)Photoby约尔格·安杰利on不飞溅早在2016年,Python3.6就引入了一种新的字符串格......
  • 力扣2(java&python)-两数相加(中等)
    题目:给你两个 非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表......
  • python (),[], {}的含义
    1、python()表示元组,元组是一种不可变序列1)创建如:tuple=(1,2,3)取数据tuple[0]......tuple[0,2].....tuple[1,2]......2)修改元祖:元组是不可修改的3)删除元祖del......
  • 25. [实例]Python lxml应用
    1.前言本节通过编写一个简单的爬虫程序,进一步熟悉lxml解析库的使用。下面使用lxml库抓取猫眼电影Top100榜(点击访问),编写程序的过程中,注意与《Python爬虫抓取猫眼电......
  • 24. Python lxml库的安装和使用
    1.前言lxml是Python的第三方解析库,完全使用Python语言编写,它对Xpath表达式提供了良好的支持,因此能够了高效地解析HTML/XML文档。本节讲解如何通过lxml库解析H......
  • # Ubuntu22.04安装Python3.9设置软链接
    sudoaptinstallpython3.9测试,命令行中输入python3.9删除原有的外链sudorm/usr/bin/python3创建新的外链sudoln-s/usr/bin/python3.9/usr/bin/python3、......
  • python 文件操作
    文件操作打开:open(file,mode="r",buffering=None,encoding=None,errors=None,newline=None,closefd=True,opener=None)#file文件路径,如果该文件在同......