黑盒测试主要包括边界值测试,等价类测试,基于判断表的测试,因果图,正交实验设计法,错误推测法等。本文章主要介绍边界值测试,以及介绍边界值测试的实际案例及解析。
1.边界值测试
人们从长期的测试工作经验得知,大量的错误都是发生在定义域至于(输出)的边界上,而不是在其内部。
边界值分析的基本思想是使用输入变量的最小值,略大于最小值,正常值,略小于最大值和最大值设计测试用例。通常我们用
m
i
n
、
m
i
n
+
、
n
o
m
、
m
a
x
−
、
m
a
x
min、min+、nom、max-、max
min、min+、nom、max−、max来表示。
当一个函数或程序有两个及两个以上的输入变量时,就需要考虑如何组合个变量的取值。我们可以根据可靠性理论中的单缺陷假设和多缺陷假设来考虑。
在边界值分析中,用到了单缺陷假设,即选取测试用例时仅仅使得一个变量取极值,其他变量均取正常值。对于有两个输入变量的程序
P
P
P,其边界值分析的测试用例如下:
{
<
x
1
n
o
m
,
x
2
m
i
n
>
,
<
x
1
n
o
m
,
x
2
m
i
n
+
,
<
x
1
n
o
m
,
x
2
n
o
m
>
,
<
x
1
n
o
m
,
x
2
m
a
x
−
,
<
x
1
n
o
m
,
x
2
m
a
x
>
,
<
x
1
m
i
n
,
x
2
n
o
m
>
,
<
x
1
m
i
n
+
,
x
2
n
o
m
>
,
<
x
1
m
a
x
−
,
x
2
n
o
m
>
,
<
x
1
m
a
x
,
x
2
n
o
m
>
}
\left \{ <x_{1nom},x_{2min}>,<x_{1nom},x_{2min+},<x_{1nom},x_{2nom}>,<x_{1nom},x_{2max-},<x_{1nom},x_{2max}>,<x_{1min},x_{2nom}>, <x_{1min+},x_{2nom}>,<x_{1max-},x_{2nom}>,<x_{1max},x_{2nom}> \right \}
{<x1nom,x2min>,<x1nom,x2min+,<x1nom,x2nom>,<x1nom,x2max−,<x1nom,x2max>,<x1min,x2nom>,<x1min+,x2nom>,<x1max−,x2nom>,<x1max,x2nom>}
下面是一个双变量的边界值测试用例,如下所示:
2.案例
根据下面给出的规格说明,利用边界值测试的方法,给出足够的测试用例。
“一个程序读入三个整数。把此三个数值看成是一个三角形的三个边。这个程序要打印出信息,说明这个三角形是三边不等的、是等腰的、还是等边的。要求输入三个整数a,b,c,必须满足以下条件:
1
≤
a
≤
100
;
1
≤
b
≤
100
;
1
≤
c
≤
100
1\leq a\leq 100;1\leq b\leq 100;1\leq c\leq 100
1≤a≤100;1≤b≤100;1≤c≤100”.请用边界值分析法设计测试用例。
1.分析各变量取值
边界值分析的基本思想是使用输入变量的最小值,略大于最小值、正常值、略大于最大值、最大值设计测试用例。因此
a
,
b
,
c
a,b,c
a,b,c的边界取值是:
1
,
2
,
50
,
99
,
100
1,2,50,99,100
1,2,50,99,100。
注意,有
n
n
n个变量的程序,其边界值分析会产生
4
n
+
1
4n+1
4n+1个测试用例。这里有3个变量,因此会产生13个测试用例。
2.编码环境搭建
首先打开IDEA,新建一个Maven的原型项目。
3.编写判断三角形类型的源代码
public class Triangle {
public String judgeTriangle(int a,int b,int c){
String triangle="";
if(a+b >c && a+c>b && b+c>a){
if(a==b&&b==c){
triangle="等边三角形";
}else if(a!=b && b!=c && a!=c){
triangle="一般三角形";
}else{
triangle="等腰三角形";
}
}else{
triangle="非三角形";
}
return triangle;
}
}
4.编写测试用例
这里的变量tri为对应测试用例下三角形的类型,为了方便后序的测试断言。
a,b,c,tri,
50,50,1,等腰三角形,
50,50,2,等腰三角形,
50,50,50,等边三角形
50,50,99,等腰三角形
50,50,100,非三角形
50,1,50,等腰三角形
50,2,50,等腰三角形
50,99,50,等腰三角形
50,100,50,非三角形
1,50,50,等腰三角形
2,50,50,等腰三角形
99,50,50,等腰三角形
100,50,50,非三角形
5.编写Junit测试代码
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class TestTriangle {
public static Triangle triangle;
@BeforeAll
static void setUpBeforeClass() throws Exception {
triangle=new Triangle();
}
@AfterAll
static void tearDownAfterClass() throws Exception {
}
@BeforeEach
void setUp() throws Exception {
}
@AfterEach
void tearDown() throws Exception {
}
@ParameterizedTest
@CsvFileSource(files = "src/main/java/com/data.csv", numLinesToSkip = 1)//数据文件的路径,可以根据自己的情况而定
void calcuPressTestWithCsvSource(int a,int b,int c,String tri) {
assertEquals(tri,triangle.judgeTriangle(a,b,c));
}
}
熟悉Junit4的可能不太熟悉现在Junit5的@BeforeAll,@AfterAll,@BeforeEach, @AfterEach,所以我在这里对Junit4与Junit5做一个对比,具体如下图所示:
测试执行顺序为@BeforeAll @BeforeEach @AfterEach @AfterAll
一般在@BeforeAll下完成变量的初始化。
assertEquals是断言预期值与实际值是否相等,相等则表示成功。
具体的断言API如下所示。
6.测试结果
通过文件读取测试用例,避免了大量的人工输入测试用例,极大地方便了用户的工作,可以进行批量测试。