pytest(1)-简介

简介: pytest 是 python 的一个第三方单元测试框架,它继承自 python 自带的单元测试框架unittest,兼容 unittest。相比unittest,pytest的可扩展性更高,也是目前最为流行的 python 单元测试框架。至于它扩展性表现在哪些方面,我们需在后续的学习中一点一点进行总结。


前言


pytest 是 python 的一个第三方单元测试框架,它继承自 python 自带的单元测试框架unittest,兼容 unittest

相比unittestpytest的可扩展性更高,也是目前最为流行的 python 单元测试框架。至于它扩展性表现在哪些方面,我们需在后续的学习中一点一点进行总结。


简单使用


1 安装

安装pytest

pip install -U pytest

验证安装是否成功

pytest --version

2 用例编写

为了先让大家对pytest的使用有个粗浅的认识,接下来我们使用pytest对两个自定义接口进行简单测试,其中查询所有用户信息接口为get请求,注册用户接口为post请求,编写脚本test_demo.py,代码如下:

import pytest
import requests, json
class TestDemo:
    def test_get_all_users(self):
        '''查询所有用户信息'''
        url = "http://127.0.0.1:5000/users"
        # 请求接口
        res = requests.get(url=url).text
        res = json.loads(res)
        print(res)
        # 断言
        assert res['code'] == 0
    def test_register(self):
        '''注册用户'''
        headers = {"Content-Type": "application/json;charset=utf8"}
        url = "http://127.0.0.1:5000/register"
        data = {
            "username": "张学友",
            "password": "123456",
            "sex": "0",
            "telephone": "13823456789",
            "address": "北京东城区"
        }
        # 请求接口
        res = requests.post(url=url, headers=headers, json=data).text
        res = json.loads(res)
        print(res)
        # 断言
        assert res['code'] == 0
if __name__ == '__main__':
    pytest.main()

注意,测试类中不能定义__init__方法。

3 用例执行

  • 方式一:在python代码里调用pytest,使用pytest.mian()
# 执行当前目录下的测试用例
pytest.main()
# 执行指定的测试用例
pytest.main("testcase/test_one.py")
# 加参数如-s,执行参数根据需要进行添加,后面文章会对常用的参数进行说明
pytest.main(["-s", "testcase/test_one.py"])
  • pycharm控制台输出如下:

微信图片_20220424220635.png

  • 方式二:命令行执行
    pytest命令行执行pytest + 测试文件路径,示例如下
pytest E:/apiAutoTest/test_demo.py
# 加参数如-s
pytest -s E:/apiAutoTest/test_demo.py
  • 除了上面的直接通过pytest命令调用外,还可以通过命令在python解释器里调用,python -m 测试文件完整路径,如下:
python -m pytest E:/apiAutoTest/test_demo.py

结果如下:

微信图片_20220424220638.png


总结


如果使用unittest框架编写上面的测试用例的话,代码应该如下:

import unittest
import requests, json
class TestDemo(unittest.TestCase):
    def test_get_all_users(self):
        '''查询所有用户信息'''
        url = "http://127.0.0.1:5000/users"
        res = requests.get(url=url).text
        res = json.loads(res)
        self.assertEqual(res['code'], 0)
    def test_register(self):
        '''注册用户'''
        headers = {"Content-Type": "application/json;charset=utf8"}
        url = "http://127.0.0.1:5000/register"
        data = {
            "username": "张学友",
            "password": "123456",
            "sex": "0",
            "telephone": "13823456789",
            "address": "北京东城区"
        }
        res = requests.post(url=url, headers=headers, json=data).text
        res = json.loads(res)
        self.assertEqual(res['code'], 0)
if __name__ == '__main__':
    unittest.main()

由这个简单的测试用例,我们可以比较出pytestunittest 在测试用例的编写及执行时不一样的地方:

  1. pytest框架编写测试用例时,只需要引入 pytest 模块,使用python源生态的 assert 进行断言,且可以使用自带的命令行执行测试用例。
  2. unittest框架编写测试用例时,自定义的测试类需要继承unittest.TestCase,断言则使用的是unittest提供的断言方式(如 assertEqual、assertTrue、assertIn等),没有提供命令行方式执行测试用例。

当然,pytestunittest的区别远不止这些,待我们后续慢慢道来。

相关文章
|
网络协议 关系型数据库 MySQL
Nacos 作为注册中心的优势 | 学习笔记
快速学习 Nacos 作为注册中心的优势,介绍了 Nacos 作为注册中心的优势系统机制, 以及在实际应用过程中如何使用。
|
11天前
|
数据采集 人工智能 安全
|
6天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
330 164
|
5天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
332 155
|
6天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
411 4