前言

目前有两种纯测试的测试框架,pytest和unittest,这系列文章主要介绍pytest为主

UnitTest测试框架理论

  • python 自带的单元测试框架,常用在单元测试
  • 在自动化测试中提供用例组织与执行
  • 提供丰富的断言方法-验证函数等功能
  • 加上HTMLTestRunner可以生成html报告
  • 官方文档 https://docs.python.org/3/library/unittest.html

官方简单的例子

import unittest

class TestStringMethods(unittest.TestCase):
# setUp代表执行函数测试前要做什么,每个函数前后都会执行一次
def setUp(self) -> None: # -> 表示返回了什么结果
print("setup") # tearDown代表执行函数测试后要做什么
def tearDown(self) -> None:
print("teardown") @classmethod # 下面两个实例,代表整个测试类的开始(setUpClass)前的操作和结束(tearDownClass)后的操作 只执行一次
def setUpClass(cls) -> None:
print('setUpclass---->') @classmethod
def tearDownClass(cls) -> None:
print('tearDownClass---->') def test_abd(self):
print('test_adb') def test_upper(self):
print('test_upper')
self.assertEqual('foo'.upper(), 'FOO') def test_isupper(self):
print('test_isupper')
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper()) def test_split(self):
s = 'hello world'
print("test_split")
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2) if __name__ == '__main__':
unittest.main()

说明:

  • Unittest 提供了 test cases、 test suites、 test fixtures、 test runner等相关组件
  • 编写规范
    • 测试模块首先 import unittest
    • 测试类必须继承 unittest.TestCase
    • 测试方法必须以"test_"开头

实战:

测试一个search的类

import unittest

# 测试一个search的类
class Search:
def serch_fun(self):
print("search....")
return True class TestSearch(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.search = Search()
print('setUpclass---->') @classmethod
def tearDownClass(cls) -> None:
print('tearDownClass---->') def test_search(self):
print('test_search111...')
assert True == self.search.serch_fun() def test_searc2(self):
print('test_search222...')
assert True == self.search.serch_fun() def test_searc3(self):
print('test_search333...')
assert True == self.search.serch_fun() if __name__ == '__main__':
unittest.main()

Pytest简单介绍

非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考

能够支持简单的单元测试和复杂的功能测试

支持参数化

执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败

支持重复执行(rerun)失败的 case

支持运行由 nose, unittest 编写的测试 case

可生成 html 报告

方便的和持续集成工具 jenkins 集成

可支持执行部分用例

具有很多第三方插件,并且可以自定义扩展

Pytest安装

在Python的虚拟环境pip中直接输入

pip install pytest

创建一个简单的Demo, 文件名字为: test_demp.py

def func(x):
return x + 1 def test_answer():
assert func(3) == 5 class TestClass:
def test_a(self):
print('1') def test_b(self):
print('2')

注意:

  • 执行 pytest 时候 会查找当前目录及其子目录下以 test_*.py 或 *_test.py 文件,找到文件后,在文件中找到以 test 开头函数并执行
  • 执行一个文件的时候就 pytest + 指定文件.py
  • Test类包含的所有test_的方法(测试类不能有__init__.py)

或者可以选择用Python的解释器执行, 在test_demo.py文件底下加上入口

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

Pytest执行用例规则

1、运行test_demo.py 模块里面的某个函数,或者某个类,某个类里面的方法

加v和不加-v都可以,加-v的话,打印的信息更详细

pytest -v test_demo.py::TestClass::test_one

pytest test_demo.py::TestClass::test_one

pytest test_demo.py::test_answer

2、执行某个 匹配用例名称 -k

pytest -k test_a -v

3、-k 同时匹配不同的用例名称, 符合 test_a* 或者 test_b* 的函数都会进行测试

pytest -k "test_a or test_b" -v

4、 (常用)参数化的方式生成多个测试用例, 在test_demo.py中更改代码 改为

@pytest.mark.parametrize('a,b', [(1, 2), (2, 3)])
def test_answer(a, b):
assert func(a) == b 然后在控制台中执行: pytest -k test_answer -v

5、遇到需要在测试用例前进行的操作,比如登录,则需要在函数前加入装饰器fixture

# 同样改写的是test_demo.py, 在最外层写个函数
@pytest.fixture()
def login():
print('登录之后')
username = 'od'
return username 然后在 TestClass 中调用
class TestClass:
def test_a(self, login):
print(f'login name is {login}')
print('1') def test_b(self):
print('2') def test_c(self, login):
print(f'login name is {login}')
print('3')
#然后执行
pytest -v -s
#-s 可以在控制台输出print的内容

这样就可以执行装饰器修饰的所有测试, 下一节学的是参数驱动的一些笔记

python Unitest和pytest 介绍和安装的更多相关文章

  1. python测试模块-pytest介绍

    1.pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高. 它具有如下特点: •非常容易 ...

  2. python数据库-数据库的介绍及安装(47)

    一.数据库的介绍 数据库(Database)是存储与管理数据的软件系统,就像一个存入数据的物流仓库.每个数据库都有一个或多个不同的API接口用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数 ...

  3. Python之数据分析工具包介绍以及安装【入门必学】

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 首先我们来看 Mac版 按照需求大家依次安装,如果你还没学到数据分析,建议你 ...

  4. python入门第3篇 pycharm安装及使用

    内容: 1. python开发工具的介绍及安装 2.pycharm的设置及技巧 一.python开发工具的介绍及安装 python下载后就自带了一个官方的IDE,官方的IDE我个人觉得不是很好用,所以 ...

  5. Python之路-python(mysql介绍和安装、pymysql、ORM sqlachemy)

    本节内容 1.数据库介绍 2.mysql管理 3.mysql数据类型 4.常用mysql命令 创建数据库 外键 增删改查表 5.事务 6.索引 7.python 操作mysql 8.ORM sqlac ...

  6. Python介绍、安装、使用

    Python介绍.安装.使用 搬运工:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Python语言介绍 说到Python语言,就不得不说一下它的创始人Guido van Rossu ...

  7. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  8. 第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装

    第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装 elasticsearch(搜索引擎)介绍 ElasticSearch是一个基于 ...

  9. Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)

    Python -- Scrapy 框架简单介绍 最近在学习python 爬虫,先后了解学习urllib.urllib2.requests等,后来发现爬虫也有很多框架,而推荐学习最多就是Scrapy框架 ...

  10. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

随机推荐

  1. For循环用法-打印乘法表

      for循环可以遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次).for循环的结构如下 具体例子打印乘法表: #打印乘法表: for i in range(1, ...

  2. RealWorldCTF渗透赛第二期复现-ctfshow

    比赛概述 开始时间:2023年3月10日15时 环境保留时间:72小时 环境重置时间:20分钟 官方wp链接:Docs (feishu.cn) [本次复现跟着官方WP进行,只做记录学习之用] 0x1 ...

  3. 使用 Agora SDK 开发 React Native 视频通话App

    在 React Native 的应用中,从头开始添加视频通话功能是很复杂的.要保证低延迟.负载平衡,还要注意管理用户事件状态,非常繁琐.除此之外,还必须保证跨平台的兼容性. 当然有个简单的方法可以做到 ...

  4. Dash 2.9.0版本重磅新功能一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master 大家好我是费老师,就在昨晚,Dash框架发布了其2.9.0版本更新,在一众更新 ...

  5. Python的安装与配置(图文教程)

    安装Python 想要进行Python开发,首先需要下载和配置Python解释器. 下载Python 访问Python官网: https://www.python.org/ 点击downloads按钮 ...

  6. 本地推理,单机运行,MacM1芯片系统基于大语言模型C++版本LLaMA部署“本地版”的ChatGPT

    OpenAI公司基于GPT模型的ChatGPT风光无两,眼看它起朱楼,眼看它宴宾客,FaceBook终于坐不住了,发布了同样基于LLM的人工智能大语言模型LLaMA,号称包含70亿.130亿.330亿 ...

  7. 迁移学习(NRC)《Exploiting the Intrinsic Neighborhood Structure for Source-free Domain Adaptation》

    论文信息 论文标题:Exploiting the Intrinsic Neighborhood Structure for Source-free Domain Adaptation论文作者:Shiq ...

  8. [ACM]Uva572-Oil Deposits-DFS应用

    #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> usin ...

  9. 在ArcGIS Pro中对Revit的bim数据进行地理配准(平移、旋转等)

    在ArcGIS Pro中,打开Revit的rvt格式数据,默认是没有坐标系,且位置会放置在原点位置(0,0),在实际使用过程中,需要对rvt数据进行地理配准,包括平移.旋转等操作将bim数据放置在正确 ...

  10. pandas之去重

    "去重"通过字面意思不难理解,就是删除重复的数据.在一个数据集中,找出重复的数据删并将其删除,最终只保存一个唯一存在的数据项,这就是数据去重的整个过程.删除重复数据是数据分析中经常 ...