micropython程序容量_写了一下 micropython 的文件系统单元测试

直接上代码。

主要是测 ram 、rom 、还有 剩余空间、目录管理、文件管理、分区边界测试,还是要结合自身的需求补充更多测试的。

比如没有做完整的读写正确性测试,擦除次数测试等等。

### 获取芯片的 ram 大小

#def print_mem_free():

#import gc

#print('ram total : ' + str(gc.mem_free() / 1024) + ' kb')

#print_mem_free()

#gc.collect()

#print_mem_free()

# 文件系统测试

import os

FLASH = '/flash'

## 获取 spiffs 映射的 flash 分区大小

def print_flash_size(FLASH):

statvfs_fields = ['bsize', 'frsize', 'blocks', 'bfree', 'bavail', 'files', 'ffree', ]

info = dict(zip(statvfs_fields, os.statvfs(FLASH)))

# print(info)

print('flash total : ' + str(info['bsize'] * info['bfree'] / 1024) + ' kb')

## 格式化 flash 文件系统

def unit_test_fs_format():

os.flash_format()

#unit_test_fs_format()

#print_flash_size(FLASH)

## 测试目录相关函数 不支持 # NotImplementedError: SPIFFS not support

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)))

#unit_test_fs_dir_mk_and_rm(FLASH)

#print_flash_size(FLASH)

## 测试文件相关函数 open stat remove rename

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))

unit_test_fs_file_function(FLASH)

print_flash_size(FLASH)

## 测试文件的边界与重入 file write read close

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)) # 使用的是无 spiffs cache 的固件写入速度较慢。

#print(few.flush())

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()

## 数据检查

## 写入重入

unit_test_fs_file(FLASH)

print_flash_size(FLASH)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值