pytest 的些许应用

很早就知道TDD 的开发模式了,不过总是养不成先写测试的习惯,这次强制自己 把自己新项目中的测试部分加上,借此机会也学习了 pytest.

参考教程http://www.testclass.net/pytest/

 这个网站上有很多 关于 test 的介绍也推荐给大家随时查阅。

下面介绍一下我使用的情况。

我使用的IDE 是VS Code, python3.6

按照 pytest 

pip install  pytest

测试的目录结构和src 目录同级 然后编写测试代码。

我的项目的代码结构如下


├── config  #相关配置文件
├── logs #log文件夹
├── src
│   ├── algorithm #具体业务逻辑代码
│   │   ├── algorithm_result.py
│   │   ├── health_info.py
│   │   ├── load_info.py
│   │   └── parcel_info.py
│   ├── dao  #关于数据库访问链接的代码
│   │   ├── database_connection.py
│   │   ├── database_dao.py
│   │   ├── database_service.py
│   │   ├── table_model.py
│   │   └── type.py
│   ├── logsetting # log 的配置
│   │   └── log_setting.py
│   ├── route.py    # 主程序
│   ├── static      # 前端代码
│   └── util
│       └── sendmail # 发邮件相关的代码
└── test # 测试代码
    ├── algorithm
    │   ├── test_algorithm_result.py
    │   ├── test_health_info.py
    │   ├── test_load_info.py
    │   └── test_parcel_info.py
    └── test_route.py

目前就针对 algorithm方面写了pytest.

下面的代码是用来判断我代码中get_load_info() 这个函数是否正确返回的。

import sys
import datetime
import pytest
sys.path.append("../src")
import algorithm.health_info as hi


class TestHealthInfo(object):

    def test_get_health_info(self):
        dt = datetime.datetime.now().strftime("%Y-%m-%d")
        res= hi.get_health_info(dt)
        assert res['health']!= None

    #为了测试多个用例,这里测试5次分别将3,4,6,7,8 这些参数代入进行测试
    @pytest.mark.parametrize("campid", [3, 4, 6, 7, 8])
    def test_get_algrithm_status_dic(self, campid):
        dt = datetime.datetime.now().strftime("%Y-%m-%d")
        res = hi.get_algrithm_status_dic(dt, campid)
        print(res)
        assert res['NORMAL'] != None
        assert type(res) == dict

    @pytest.mark.parametrize("campid", [3, 4, 6, 7, 8])
    def test_get_confirm_status_dic(self, campid):
        dt = datetime.datetime.now().strftime("%Y-%m-%d")
        res = hi.get_confirm_status_dic(dt, campid)
        print(res)
        assert res['wave'] != None

这里@pytest.mark.parametrize("campid", [3, 4, 6, 7, 8]) 这一行给定了这个测试的参数,在运行的时候这个测试会执行5次,分别传入3,4,6,7,8 的参数进行测试,这个是我觉得比较方便的地方

用了断言判断相应的字段是否为空,判断返回值类型是否是 dict .

然后剩下的就是 在命令行里 输入pytest了。

还有另外一种方式就是这个VS code  里 会出现如下标志

点一下这个 Run Test 就能针对性的进行测试,或者按照Code Runner 这个拓展插件,选中 测试代码右击 run code 也可以。

这里由于有5个参数因此在这Run test后面有(Multiple)的标识, 当我们点击这个标识的时候,也可以去选择运行指定一个参数进行测试。还是比较人性化的。如下图。

这个pytest 还是比较方便的。学会这个技能之后就能使用TDD的开发模式啦

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值