python中unittest框架应用

news2024/9/27 15:30:16

1、Unittest为Python内嵌的测试框架,不需要特殊配置

2、编写规范

需要导入 import unittest

测试类必须继承unittest.TestCase

测试方法以 test_开头

模块和类名没有要求

TestCase 理解为写测试用例

TestSuite 理解为测试用例的集合

TestLoader 理解为的测试用例加载

TestRunner 执行测试用例,并输出报告

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

import unittest

from class_api_login_topup.demo import http_request

from class_api_login_topup.http_attr import Get_Attr  # 反射的值 获取 cookies

# 这是文件http_attr中的Get_Attr类

class Get_Attr:

    cookies = None

class Login_Http(unittest.TestCase):

    def __init__(self, methodName, url, data, method, expected):

        super(Login_Http, self).__init__(methodName)  # 超继承

        self.url = url

        self.data = data

        self.expected = expected

        self.method = method

    def test_api(self):  # 正常登录

        res = http_request().request(self.url, self.data, self.method, getattr(Get_Attr, 'cookies'))

        if res.cookies:

            setattr(Get_Attr, 'cookies', res.cookies)

        try:

            self.assertEqual(self.expected, res.json()['code'])

        except AssertionError as e:

            print("test_api's, error is {0}", format(e))

            raise e

        print(res.json())

if __name__ == '__main__':

    unittest.main()

执行一:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

import unittest

from class_demo_login_topup.http_tools import Login_Http

suite = unittest.TestSuite()

loader = unittest.TestLoader()

test_data = [{'url': 'http://test.lemonban.com/futureloan/mvc/api/member/login',

              'data': {'mobilephone': 'xxxx', 'pwd': '123456'}, 'expected': '10001', 'method': 'get'},

             {'url': 'http://test.lemonban.com/futureloan/mvc/api/member/login',

              'data': {'mobilephone': 'xxxx', 'pwd': '12345678'}, 'expected': '20111', 'method': 'get'},

             {'url': 'http://test.lemonban.com/futureloan/mvc/api/member/recharge',

              'data': {'mobilephone': 'xxxx', 'amount': '1000'}, 'expected': '10001', 'method': 'post'},

             {'url': 'http://test.lemonban.com/futureloan/mvc/api/member/recharge',

              'data': {'mobilephone': 'xxxx', 'amount': '-100'}, 'expected': '20117', 'method': 'post'}]

# 遍历数据,执行脚本 addTest 单个执行

for item in test_data:

    suite.addTest(Login_Http('test_api', item['url'], item['data'], item['method'], item['expected']))

#  执行

with open('http_TestCase.txt', 'w+', encoding='UTF-8') as file:

    runner = unittest.TextTestRunner(stream=file, verbosity=2)

    runner.run(suite)

# 运行结果

{'status': 1, 'code': '10001', 'data': None, 'msg': '登录成功'}

{'status': 0, 'code': '20111', 'data': None, 'msg': '用户名或密码错误'}

{'status': 1, 'code': '10001', 'data': {'id': 10011655, 'regname': '小蜜蜂', 'pwd': 'E10ADC3949BA59ABBE56E057F20F883E', 'mobilephone': 'xxxx', 'leaveamount': '150000.00', 'type': '1', 'regtime': '2021-07-14 14:54:08.0'}, 'msg': '充值成功'}

{'status': 0, 'code': '20117', 'data': None, 'msg': '请输入范围在0到50万之间的正数金额'}

执行二:把test_data的数据放在EXCEL中运行。

1

2

3

4

5

6

7

8

9

10

import unittest

from class_demo_login_topup.http_tools import Login_Http

suite = unittest.TestSuite()

loader = unittest.TestLoader()

test_data = HttpExcel('test_api.xlsx', 'python').real_excel()

for item in test_data:

    suite.addTest(Login_Http('test_api', item['url'], eval(item['data']), item['method'], str(item['expected'])))

with open('http_TestCase.txt', 'w+', encoding='UTF-8') as file:

    runner = unittest.TextTestRunner(stream=file, verbosity=2)

    runner.run(suite)  

执行三、直接用装饰器ddt

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

import unittest

from class_api_login_topup.demo import http_request

from class_api_login_topup.http_attr import Get_Attr  # 反射的值

from ddt import ddt, data, unpack

from class_demo_login_topup.http_excel import HttpExcel

test_data = HttpExcel('test_api.xlsx', 'python').real_excel()

@ddt

class Login_Http(unittest.TestCase):

    @data(*test_data)

    def test_api(self, item):  # 正常登录

        res = http_request().request(item['url'], eval(item['data']), item['method'], getattr(Get_Attr, 'cookies'))

        if res.cookies:

            setattr(Get_Attr, 'cookies', res.cookies)

        try:

            self.assertEqual(str(item['expected']), res.json()['code'])

        except AssertionError as e:

            print("test_api's, error is {0}", format(e))

            raise e

        print(res.json())

执行ddt方式一

1

2

3

4

5

6

7

8

9

10

import unittest

from class_demo_login_topup.http_tools import Login_Http

from class_demo_login_topup.http_excel import HttpExcel

suite = unittest.TestSuite()

loader = unittest.TestLoader()

from class_demo_login_topup import http_tools_1

suite.addTest(loader.loadTestsFromModule(http_tools_1))  # 执行整个文件

with open('http_TestCase.txt', 'w+', encoding='UTF-8') as file:

    runner = unittest.TextTestRunner(stream=file, verbosity=2)

    runner.run(suite)

执行ddt方式二

1

2

3

4

5

6

7

8

9

10

import unittest

from class_demo_login_topup.http_tools import Login_Http  # 不用ddt的方法

from class_demo_login_topup.http_excel import HttpExcel

suite = unittest.TestSuite()

loader = unittest.TestLoader()

from class_demo_login_topup.http_tools_1 import * # http_tools_1文件是用ddt的方法

suite.addTest(loader.loadTestsFromTestCase(Login_Http))  # 执行http_tools_1 文件下的Login_Http类,按照类执行

with open('http_TestCase.txt', 'w+', encoding='UTF-8') as file:

    runner = unittest.TextTestRunner(stream=file, verbosity=2)

    runner.run(suite)

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1914453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字经济时代,你有数商吗?

引言:随着科技的飞速发展,我们正步入一个全新的数字经济时代。在这个时代里,数据成为了新的石油,是推动经济增长和社会进步的关键要素。而在这个数据洪流中,一个新兴的概念——“数商”,正逐渐进入公众的视…

项目文章|Cell子刊One Earth 土壤微生物多样性与人畜致病菌的流行

农田土壤孕育了大量微生物,其中也包括对人类和动物造成威胁的条件致病菌。土壤中的人畜致病菌可通过直接或间接的方式感染人类和动物。 例如,植物可以作为人畜病原菌的间接宿主,通过食物链传播到人类和动物系统;与土壤的直接接触…

python-25-零基础自学python-处理异常三兄弟try-except-else

学习内容:《python编程:从入门到实践》第二版第十章 知识点: 程序异常如何处理?try-except-else try-尝试可能引起错误的步骤 except-错误步骤发生,打印一些需要用户知道的信息,没有就pass else-错误不…

Samtec汽车电子 | 汽车连接器如何在高要求、极端的环境中工作

【摘要/前言】 汽车电子,这些年来始终是极具流量的热门话题,目前不断发展的智能座驾、辅助驾驶等赛道都是对相关产业链需求的进一步刺激,这里蕴含着一片广阔的市场。 同样,广阔的市场里有着极高的准入门槛和事关安全的技术挑战。…

Day49:LeedCode 647. 回文子串 516.最长回文子序列

647. 回文子串 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 示例 1: 输入:s "abc" 输出:3 解…

PLM是什么?一文读懂PLM系统的定位、价值、特点、功能(流程行业离散行业)、实施、以及发展趋势

随着全球制造业向智能化、数字化转型,产品生命周期管理(PLM)系统已成为企业优化研发流程、加速产品上市速度的关键工具。本文将带您深入了解PLM,了解研发管理的最佳实践。 01、PLM系统的定位 PLM即产品生命周期管理,P…

请跳至打印机属性的“Adobe PDF设置”页面,取消选择“仅停靠系统字体;不使用文档字体”

场景: 当使用adobe pdf打印时,出现如下提示“请跳至打印机属性的“Adobe PDF设置”页面,取消选择“仅停靠系统字体;不使用文档字体””,该如何解决。 描述 □“仅停靠系统字体;不使用文档字体” 复选本框…

【排序 - 堆排序】

堆排序(Heap Sort)是一种高效的排序算法,利用了堆这种数据结构的特性。堆排序的时间复杂度为 O(n log n),并且是一个原地排序算法,不需要额外的存储空间。 堆的基本概念 堆是一种特殊的树形数据结构,分为…

supOS助力油气行业数智化转型

在油气行业,高温高压、易燃易爆的特殊环境对生产安全和效率提出了极高的要求。传统工厂管理模式往往存在信息孤岛、决策滞后、响应速度慢等问题,难以适应现代工业化发展的需求。 从传统工厂到智能工厂,首先要实现企业经营运营自动化和生产过程…

78. UE5 RPG 创建技能数据并初始化技能ui

在上一篇文章里,我们创建了技能的UI,接下来,我们要考虑如何实现对技能UI的填充,肯定不能直接写死,需要有一些方法去实现技能的更新。我们期望能够创建一个技能数据,然后根据数据通过回调的方式实现数据的更…

树链剖分相关

树链剖分这玩意儿还挺重要的,是解决静态树问题的一个很好的工具~ 这里主要介绍一下做题时经常遇到的两个操作: 1.在线求LCA int LCA(int x,int y){while(top[x]!top[y])if(dep[top[x]]>dep[top[y]]) xfa[top[x]];else yfa[top[y]];return dep[x]&l…

新版FMEA培训未能达到预期效果怎么办?

在制造业的质量管理中,FMEA(Failure Mode and Effects Analysis,失效模式与影响分析)是一项至关重要的工具,它帮助企业识别和评估产品或过程中潜在的失效模式,以及这些失效模式可能导致的后果。然而&#x…

可视化作品集(11):节能环保能耗领域大展拳脚。

在大屏上可视化节能环保领域的能耗数据可以通过各种图表和数据展示方式,可以帮助观众直观地了解节能环保领域的能耗情况和公司在该领域的工作成果。 1. 实时能源消耗数据: 通过实时折线图或饼状图展示不同能源(电力、天然气、水等&#xff…

FastAPI 学习之路(三十六)引入APIRouter

本次调整后的目录如下: 我们可以使用APIRouter来声明路径操作,我们先看下如何去使用。 我们根据选择划分为users和items来细分。 具体实现如下: ①先看items实现 from fastapi import APIRouter from fastapi import Depends from models.…

【密码学】公钥密码的基本概念

在先前我写的密码学体制文章中谈到,现代密码学分为两大体制,介绍了一些有关对称密码体制诸如流密码和分组密码的内容。本文的主要内容则切换到公钥密码体制(又称非对称密码体制),简述了公钥密码体制的基本思想和应用方…

SPI通信协议和W25Q64

前言: STM32中的通信接口: UART 单总线 IIC SPI CAN 1. SPI FLASH W25Q64的关系 SPI:一种通信接口,可以用于和搭载SPI接口的设备通信 FLASH:是一种掉电不丢失的存储 -- 手机8256G的256 单片机 64K512K的512 芯片内部flash&…

AutoMQ 与蚂蚁数科达成战略合作

近期,AutoMQ 与蚂蚁数科正式签署战略合作协议,将和蚂蚁数科云原生 PaaS 平台 SOFAStack 在产品研发、生态集成、市场合作、技术社区影响力等多方面开展深度合作。 AutoMQ 是业内领先的消息和流存储服务提供商,基于云原生基础设施重新设计了 …

windows防火墙端口设置

PS:本文实例为Windows Server 2019,其他Windows版本大同小异。 1、首先打开windows防火墙,点击“高级设置” 2、 高级设置界面 3、假设需要开放一个端口为3306应该怎么做 光标对准“入站规则”右键新建规则,选择“端口” 协议这…

CSDN回顾与前行:我的创作之旅——2048天的技术成长与感悟

CSDN回顾与前行:我的创作之旅——2048天的技术成长与感悟 💖The Begin💖点点关注,收藏不迷路💖 前言 时光荏苒,岁月如梭。转眼间,从我在CSDN上写下第一篇技术博客《2-6 带头结点的链式表操作集…

tensorflow之欠拟合与过拟合,正则化缓解

过拟合泛化性弱 欠拟合解决方法: 增加输入特征项 增加网络参数 减少正则化参数 过拟合的解决方法: 数据清洗 增大训练集 采用正则化 增大正则化参数 正则化缓解过拟合 正则化在损失函数中引入模型复杂度指标,利用给w增加权重,…