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

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

硬件测试与文件系统验证

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

1. 获取芯片的内存大小

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

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

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

2. 文件系统测试

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

import osFLASH = '/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/

你可能感兴趣的文章
OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_openeuler切换root用户_su:拒绝权限_passwd: 鉴定令牌操作错误---国产瀚高数据库工作笔记001
查看>>
OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_踩坑_安装以后系统无法联网_启动ens33网卡---国产瀚高数据库工作笔记002
查看>>
OpenFeign 入门与实战
查看>>
OpenFeign源码学习
查看>>
OpenFeign组件声明式服务调用
查看>>
openfeign远程调用不起作用解决_使用Spring Boot的spring.factories进行注入---SpringCloud Alibaba_若依微服务框架改造---工作笔记007
查看>>
openfire开发(四)消息拦截器
查看>>
openfire源码解读之将cache和session对象移入redis以提升性能
查看>>
Openfire身份认证绕过漏洞复现+利用(CVE-2023-32315)
查看>>
OpenForest 开源项目安装与使用指南
查看>>
OpenGL glBlendFunc() 设置颜色混合 透明度叠加计算
查看>>
opengl 深度详解,多重采样时,如何在OpenGL纹理中解析深度值?
查看>>
OpenGL 的内置矩阵种种
查看>>
OpenGL/OpenGL ES 入门:基础变换 - 初识向量/矩阵
查看>>
OpenGL中shader读取实现
查看>>
OpenGL中旋转平移缩放等变换的顺序对模型的影响
查看>>
Opengl中的gluProject函数认识
查看>>
OpenGl介绍
查看>>
OPENGL半透明图像产生黑色光环
查看>>
OpenGL和图形卡
查看>>