黑盒测试主要包括边界值测试,等价类测试,基于判断表的测试,因果图,正交实验设计法,错误推测法等。本文章主要介绍边界值测试,以及介绍边界值测试的实际案例及解析。
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.测试结果
通过文件读取测试用例,避免了大量的人工输入测试用例,极大地方便了用户的工作,可以进行批量测试。