自动开关测试
软件写差不多了,就需要机器上完整地运行、测试,检查其中可能存在的错误,长时间运行的可靠性等。本篇的主题是自动开关测试,通过模拟开关变化,使机器反复地运行、停止。
项目中机器的启动与停止有多种方式,但无论如何均需要打开、关闭动作,这里的测试就是针对开关的模拟而设计的。
其中一种机器的开关方式:打开开关,等待一段时间,关闭,等待一段时间,再打开,如此循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| static uint32_t randseed; static uint32_t curl_rand(void) { uint32_t r; r = randseed = randseed * 1103515245 + 12345; return (r << 16) | ((r >> 16) & 0xFFFF); }
static uint16_t random(void) { return curl_rand()%2000 + 30; }
void task_on_off(void* pvData) { uint16_t sec; pvData = pvData; randseed =seconds_cal(); OSTimeDlyHMSM(0,0,10,0); while(1) { sec=random()%120+10; OSTimeDlyHMSM(0,sec/60,sec%60,0);
SWITCH_OPEN(0); sec=random()%(4*60)+10; OSTimeDlyHMSM(0,sec/60,sec%60,0); SWITCH_CLOSE(0); } }
|
打开或者关闭的时间是一个伪随机数,并且对随机数的大小进行了限制,避免过长或过短时间的开或者关。
还有一种机器,是通过自复位按钮来确定开关状态的,此时就是通过脉冲实现的。模拟代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| void task_lpg_button(void* pvData) { uint16_t sec; pvData = pvData; randseed =seconds_cal(); OSTimeDlyHMSM(0,0,10,0); while(1) { sec=random()%120+10; OSTimeDlyHMSM(0,sec/60,sec%60,0);
SWITCH_OPEN(0); OSTimeDlyHMSM(0,0,0,300); SWITCH_CLOSE(0); sec=random()%(4*60)+10; OSTimeDlyHMSM(0,sec/60,sec%60,0);
SWITCH_OPEN(1); OSTimeDlyHMSM(0,0,0,300); SWITCH_CLOSE(1); } }
|
上述代码模拟脉冲时延时是300ms,实际的按钮脉冲时间不会这么长,主要是因为模拟软件运行所使用的板子的问题。
其它
上述原理与实现都很简单,重点在于这样一种思想:工欲善其事,必先利其器。如果人去操作测试,效率不高,并且也很费时间,如果期间还在做其它事情,就会有忘记的可能,使用这些小工具就会避免这些问题。
但是另一方面,模拟测试也只会测试一方面的问题,如果想要全面的自动测试,还需要做大量的工作。
实际工作中随着项目的进行,还写了其它一些小工具,比如通信协议的校验值计算、数据转发与监控等等。这些工具的使用,对于发现问题、解决问题起到了很大的帮助。