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

/* 返回一个无符号32位整型的伪随机数. */
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,实际的按钮脉冲时间不会这么长,主要是因为模拟软件运行所使用的板子的问题。

其它

上述原理与实现都很简单,重点在于这样一种思想:工欲善其事,必先利其器。如果人去操作测试,效率不高,并且也很费时间,如果期间还在做其它事情,就会有忘记的可能,使用这些小工具就会避免这些问题。

但是另一方面,模拟测试也只会测试一方面的问题,如果想要全面的自动测试,还需要做大量的工作。

实际工作中随着项目的进行,还写了其它一些小工具,比如通信协议的校验值计算、数据转发与监控等等。这些工具的使用,对于发现问题、解决问题起到了很大的帮助。