博客
关于我
写了一下 micropython 的文件系统单元测试
阅读量:432 次
发布时间:2019-03-06

本文共 2806 字,大约阅读时间需要 9 分钟。

硬件测试与文件系统验证

为了确保系统的稳定性和功能性,我们需要对硬件和文件系统进行全面的测试。以下是主要测试内容和步骤说明。

1. 获取芯片的内存大小

我们可以通过以下方法获取芯片的内存大小:

def print_mem_free():
import gc
print('ram total : ' + str(gc.mem_free() // 1024) + ' kb')
gc.collect()

运行上述代码可以获取当前的内存使用情况。

2. 文件系统测试

首先,我们需要验证文件系统的总大小:

import os
FLASH = '/flash'
def print_flash_size(FLASH):
statvfs_fields = ['bsize', 'frsize', 'blocks', 'bfree', 'bavail', 'files', 'ffree']
info = dict(zip(statvfs_fields, os.statvfs(FLASH)))
print('flash total : ' + str(info['bsize'] * info['bfree'] // 1024) + ' kb')

运行 print_flash_size(FLASH) 可以查看闪存的总大小。

3. 格式化文件系统

为了确保文件系统的格式化过程正确,我们可以执行以下验证:

def unit_test_fs_format():
os.flash_format()

运行上述函数后,重新调用 print_flash_size(FLASH) 查看文件系统的格式化结果。

4. 目录管理测试

我们需要验证目录操作的正确性:

def unit_test_fs_dir_mk_and_rm(FLASH):
assert(0 == len(os.listdir(FLASH)))
os.mkdir('test')
os.rmdir('test')
assert(0 == len(os.listdir(FLASH)))

运行该函数后,检查目录操作是否成功完成。

5. 文件操作测试

文件的读写和重命名操作需要进行详细验证:

def unit_test_fs_file_function(FLASH):
name, info = 't.txt', b'0123456789ABCDEF'
# 创建文件
few = open(name, "wb")
few.write(info)
#assert(os.stat(name)[6] == 0) # 可以在 menuconfig 中取消 cache 机制
print(os.stat(name))
# 文件应该存在了,但内容还未写入,此时则证明有 write cache 工作。
assert(name in os.listdir(FLASH))
few.close()
# 检查文件是否存在,且文件大小为 len(info) 。
assert(os.stat(name)[6] == len(info))
# 确认文件读取
fer = open(name, "rb")
assert(fer.read() == info)
fer.close()
# 确认 rename 工作
tmp = 'rename.txt'
os.rename(name, tmp)
assert(tmp in os.listdir(FLASH))
os.rename(tmp, name)
assert(name in os.listdir(FLASH))
os.remove(name)
assert(name not in os.listdir(FLASH))

运行该函数后,逐一验证文件操作是否正确完成。

6. 文件边界与重入测试

为了确保文件操作的稳定性,我们需要进行以下测试:

def unit_test_fs_file(FLASH):
name, info = 't.txt', b'0123456789ABCDEF'
if (name in os.listdir(FLASH)):
os.remove(name)
few = open(name, "wb")
few.write(info)
few.close()
# 测试内容
few = open(name, "ab")
assert(few.read() == info)
few.write(name)
few.close()
few = open(name, "ab")
assert(few.read() == info + name)
few.close()
if (name in os.listdir(FLASH)):
os.remove(name)
# 边界检查
import time, gc
count, tm = 0, time.ticks_ms()
info = info * 10240
print(len(info), time.ticks_diff(time.ticks_ms(), tm))
gc.collect()
try:
few = open(name, "wb")
while True:
print(few.write(info))
count = count + 1
print(count * len(info))
print_flash_size(FLASH)
few.close()
except Exception as e:
print(e)
finally:
print(count * len(info), time.ticks_diff(time.ticks_ms(), tm))
print_flash_size(FLASH)
few.close()
# 数据检查
# 写入重入

运行该函数后,逐一验证文件边界和重入操作是否正确完成。

转载地址:http://inbyz.baihongyu.com/

你可能感兴趣的文章
Netty:ChannelPipeline和ChannelHandler为什么会鬼混在一起?
查看>>
Netty:原理架构解析
查看>>
Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
查看>>
Network Sniffer and Connection Analyzer
查看>>
Network 灰鸽宝典【目录】
查看>>
NetworkX系列教程(11)-graph和其他数据格式转换
查看>>
Networkx读取军械调查-ITN综合传输网络?/读取GML文件
查看>>
network小学习
查看>>
Netwox网络工具使用详解
查看>>
Net与Flex入门
查看>>
net包之IPConn
查看>>
Net操作配置文件(Web.config|App.config)通用类
查看>>
Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
查看>>
New Relic——手机应用app开发达人的福利立即就到啦!
查看>>
NFinal学习笔记 02—NFinalBuild
查看>>
NFS
查看>>
NFS Server及Client配置与挂载详解
查看>>
NFS共享文件系统搭建
查看>>
nfs复习
查看>>
NFS安装配置
查看>>