应用程序的接口不外乎三种,CLI——命令行接口,API——应用编程接口和GUI。
因为现在有大把集成快速开发功能的IDE可供选择,因此GUI的实现变得非常的顺手。工具水平提高了,这看起来是理所当然的事情。其实呢?
单一的GUI接口,带来实现上的便利,用户只和GUI打交道,他们也没话说,那测试人员呢?有没有换位思考过,各位DEV们?
GUI有一个特点就是不稳定,元素的增减,是否显示,显示的位置,控件更新,都会引起GUI的变化,随之引发了自动化脚本失效,这是个很让人挠头的问题,冒烟测试停住了,回归也要大量人工介入。
需要提供更丰富的接口,CLI是一种不错的选择,因为CLI不但可以用在单元测试,更可以用到系统测试阶段,前提是整个软件要提供相当的CLI接口,让交互可以自动化起来。
看一个Xerces参数处理的例子
中间有一个usage(),输出使用帮助到屏幕
1
int argInd;
2
for (argInd = 1; argInd < argC; argInd++)
3
{
4
// Break out on first parm not starting with a dash
5
if (argV[argInd][0] != '-')
6
break;
7
8
// Watch for special case help request
9
if (!strcmp(argV[argInd], "-?"))
10
{
11
usage();
12
return 2;
13
}
14
else if (!strncmp(argV[argInd], "-v=", 3)
15
|| !strncmp(argV[argInd], "-V=", 3))
16
{
17
const char* const parm = &argV[argInd][3];
18
19
if (!strcmp(parm, "never"))
20
valScheme = AbstractDOMParser::Val_Never;
21
else if (!strcmp(parm, "auto"))
22
valScheme = AbstractDOMParser::Val_Auto;
23
else if (!strcmp(parm, "always"))
24
valScheme = AbstractDOMParser::Val_Always;
25
else
26
{
27
XERCES_STD_QUALIFIER cerr << "Unknown -v= value: " << parm << XERCES_STD_QUALIFIER endl;
28
return 2;
29
}
30
}
31
else if (!strcmp(argV[argInd], "-n")
32
|| !strcmp(argV[argInd], "-N"))
33
{
34
doNamespaces = true;
35
}
36
else if (!strcmp(argV[argInd], "-s")
37
|| !strcmp(argV[argInd], "-S"))
38
{
39
doSchema = true;
40
}
41
else if (!strcmp(argV[argInd], "-f")
42
|| !strcmp(argV[argInd], "-F"))
43
{
44
schemaFullChecking = true;
45
}
46
else if (!strcmp(argV[argInd], "-l")
47
|| !strcmp(argV[argInd], "-L"))
48
{
49
doList = true;
50
}
51
else if (!strcmp(argV[argInd], "-special:nel"))
52
{
53
// turning this on will lead to non-standard compliance behaviour
54
// it will recognize the unicode character 0x85 as new line character
55
// instead of regular character as specified in XML 1.0
56
// do not turn this on unless really necessary
57
58
recognizeNEL = true;
59
}
60
else if (!strcmp(argV[argInd], "-p")
61
|| !strcmp(argV[argInd], "-P"))
62
{
63
printOutEncounteredEles = true;
64
}
65
else if (!strncmp(argV[argInd], "-locale=", 8))
66
{
67
// Get out the end of line
68
strcpy(localeStr, &(argV[argInd][8]));
69
}
70
else
71
{
72
XERCES_STD_QUALIFIER cerr << "Unknown option '" << argV[argInd]
73
<< "', ignoring it\n" << XERCES_STD_QUALIFIER endl;
74
}
75
}
76
77
//
78
// There should be only one and only one parameter left, and that
79
// should be the file name.
80
//
81
if (argInd != argC - 1)
82
{
83
usage();
84
return 1;
85
}
posted on 2009-05-20 10:12
创建更好的解决方案 阅读(1420)
评论(0) 编辑 收藏 引用 所属分类:
TDD 、
C++专栏 、
软件测试 、
软件设计