java+testng实现接口测试框架
1.新建maven项目:
(1)打开idea,new project,新建一个maven项目
(2)搜索maven中央仓库 - https://mvnrepository.com/,进入后搜索testng
image.png
(3)复制如下内容,放入pom.xml文件中
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.5</version>
</dependency>
image.png
完成以上步骤,testng就完成引入了。
2.安装testng.xml :
(1)下载插件:https://plugins.jetbrains.com/plugin/9556-create-testng-xml
(2)通过idea 中找到下载的这个插件,进行安装
image.png
(3)重启idea,右击这个文件就可以看到 create testng xml了
image.png
3.编写第一个测试用例:
(1)在src/main/java下新建文件 com.Casemeu.testcase,在testcase新建.javaClass文件testcase1
image.png
(2)如下代码使用 @test注解,代表这是一个可执行的测试用例,并使用Assert进行断言
image.png
(3)执行测试用例,点击运行按钮即可,执行结果如下:
image.png
4.使用xml批量执行用例:
(1)右击任意一个文件点击create testng xml,然后重启idea,即可生成testng.xml文件,右击执行run testng.xml 可批量执行所有的用例:
image.png
5.@Test常用参数
(1) enable 是否执行此用例,若enable = false,则不执行此方法,若enable = true 则此方法执行,如图test1的enable设置为false,则只执行了test2,test3用例:
image.png
(2)expectedException预期异常,提前预期用例会返回的异常,使得测试用例通过后,不会抛出此异常。
例如:使用1除以0 除数为0 则会抛出
java.lang.ArithmeticException: / by zero的异常如图所示
image.png
但是此时用例的断言是通过的,所以我们不需要获取此类异常。此时我们增加参数
expectedException = ArithmeticException.class,再次运行代码:
image.png
最终,测试用例执行通过,此异常不会被抛出导致用例失败。
当然,预期异常也可以设置多个,例如:
@Test(expectedExceptions = {ArithmeticException.class, ArithmeticException2.class,... })(3)timeout 超时时间设置,
timeout =2 即超时时长2ms,如图所示若用例执行超过2ms则会报错超时。
image.png
(4)goups 用例分组,testng可以通过分组的方式运行测试用例,将同组的用例放在一起运行。
编写如下代码,使用
groups = "分组名"来定义分组
image.png
然后通过testng.xml文件配置分组信息执行:
image.png
注意:此时就不需要写 具体的用例名称了,他会根据分组去运行。
一个用例也可以同时有多个分组,可以使用```groups = {"groups2","groups2"}
同时testng.xml中需要修改为:
<groups>
<run>
<include name="groups2"/>
<include name="groups1"/>
</run>
</groups>
一个定义分组后,各个用例引用这个分组的例子:
首先新建一个文件用于定义分组
文件名:groups
public class groups {
public static final String BVT = "BVT";
public static final String NORMAL = "NORMAL";
public static final String ABNORMAL = "NORMAL";
}
然后使用测试用例引用这个分组进行分组分类
文件名:testcase1
import static com.Casemeu.common.groups.*;
public class tastcase1{
@Test(groups = BVT)
public void test1() {
Assert.assertEquals("hello", "hello");
}
这样是实现了规范的分组管理。
(5)dependsOnMethods依赖方法,加入此参数表示测试用例执行前均需要执行依赖的方法,依赖的方法执行失败用例也会失败
dependsOnMethods = {"test2","test1"}
实际应用如下:
image.png
(6)Parameters使用xml进行参数化:
首先配置代码中参数化内容
@Test(groups = BVT)
@Parameters({"p1","p2"})
public void test2(String p1,String p2) {
System.out.printf("第一个参数为:"+p1+"第二个参数为:"+p2);
Assert.assertEquals(namea, "你好", "名称相同");
}
然后配置xml中参数,放入test标签下一级:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="All Test Suite">
<test verbose="2" preserve-order="true" name="D:/interfaceCreation/src/main/java">
<parameter name="p1" value="参数化参数第一个"></parameter>
<parameter name="p2" value="参数化参数第二个"></parameter>
<groups>
<run>
<include name= "BVT"/>
</run>
</groups>
<classes>
<class name="com.Casemeu.testcase.tastcase1">
</class>
</classes>
</test>
</suite>
接着执行这个xml就可以了,如图已经把两个参数都传入用例中了:
image.png
(7)@DataProvider 传递较复杂的参数,进行参数化:
首先新建一个传递参数的方法
@DataProvider(name = "account')
public Object[][] account(){
return new Obhect[][]{
{"zhang","12345"},
{"chen","11111"}
};
}
然后,在测试用例中使用这个参数:
@Test(groups = BVT,dataProvider = "account")
public void test21(String at,String pw) {
System.out.printf("账号为:"+at+",密码为:"+pw);
Assert.assertEquals("你好", "你好", "名称相同");
}
然后运行这个用例,可以看到这两个参数都传入到用例中:
6.测试报告的生成:
(1)idea中找到run - Edit Configurations - (右边框中)listeners - use default reproters(勾选)
image.png
image.png
(2)这个时候运行代码就可以看到测试报告的文件
image.png
(3) index.html 汇总的测试报告 /emailable-report.html 详细的测试报告
image.png
7.功能小计
测试注释 @Test
套件测试 标签
在套件中的所有测试运行之前运行 @BeforeSuite
在套件中的所有测试运行之后运行 @AfterSuite
测试之前运行 @BeforeTest
测试之后运行 @AfterTest
分组测试 @Test的group参数
在调用属于任何这些组的第一个测试方法之前运行 @BeforeGroups
在调用属于任何这些组的第一个测试方法之后运行 @AfterGroups
在调用当前类的第一个测试方法之前运行 @BeforeClass
在调用当前类的第一个测试方法之后运行 @AfterClass
在每个测试方法之前运行 @BeforeMethod
在每个测试方法之后运行 @AfterMethod
预期的异常 @Test(expectedExceptions = ArithmeticException.class)
超时测试 @Test(timeout=1000)
参数化测试 @Parameters或DataProvider
依赖测试 @Test的dependsOnMethods参数
8.接口测试中用到的其他包(此处待持续更新):
(1)首先我们引入fastjson的包,在pom.xml中
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.24</version>
</dependency>
(2)数据库链接
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.github.yongchristophertang</groupId>
<artifactId>rest-connector</artifactId>
<version>0.5.17</version>
</dependency>










网友评论