如果我们需要的测试数据过多,可以单独创建一个文件 conftest.py
来统一管理 Fixtures。
conftest.py
文件写入:
import re import pytest import requests @pytest.fixture def title(): """ 使用 requests 请求 https://lijianxun.top/ 返回 title """ html = requests.get("https://lijianxun.top") doc = html.text title = re.findall("<title>(.*?)</title>", doc)[0] return title
test_title.py
写入:
def test_add(title: str): assert "简讯" in title
这样也是可以的。
命令行使用参数 --fixtures
可以查看所有可用 Fixtures。
命令行输入:
pytest--fixtures conftest.py
会返回:
title 使用 requests 请求 https://lijianxun.top/ 返回 title
所以在编写 Fixtures 测试数据时,函数最好添加文档字符串,保证在之后查看明确各种函数的用处。
如何编写测试代码
介绍了 pytest 的用法,说到底还是为了编写测试代码服务的,但是如何编写测试代码呢?
测试并不复杂。明确需要测试的部分,声明预期的结果,符合预期便可通过测试。单元测试要测试的其实是逻辑、流程控制和配置。毕竟测试代码是死的,程序是活的。因为测试代码一旦写好,说明程序必须按照该测试执行,这样就可以放心修改代码,增加功能或重构。
例如写一个爬虫,数据是以字典的形式入库,其中有一些字段在源网站是 int 类型,因为业务需要,我要保证存储下来的是 str 类型,而且之后可能还会新增字段,也需要保证转换成 str 类型,这里可以写一个测试来判断入库的字段是否全部都是 str 类型。可能有读者会说,写测试这点功夫直接转换类型不就行了吗?但是谁能保证在之后修改代码的时候,重构或者有其他人接手这部分代码的时候还会想起转换类型呢?
正如《python web开发 测试驱动方法》书中说到,写测试代码就像写故事一样,把步骤写下来就组成了一个故事。比如用 Flask 搭建博客,我们需要测试用户登录,发帖,提交,返回首页博文展示到首页等一系列动作,故事写完了我们需要测试的部分也就想出来了。
最后
编写测试代码可能是枯燥的,但测试是开发过程中一个重要的组成部分。良好的测试可以保证程序运行的稳定性。所以为了你的代码,从今天开始学习写测试代码吧!
本文作者:简讯,一名自学编程的业余码农
声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。