–> Junit Test
或者需要debug时,选择Debug As
–> Junit Test
,运行即可。(也可以看见每次启动测试时,每次端口号都是不同的。)
2018-07-25 23:16:28.733 INFO 13000 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 59999 (http)
2018-07-25 23:16:28.754 INFO 13000 --- [ main] c.l.l.s.c.controller.DemoControllerTest : Started DemoControllerTest in 5.673 seconds (JVM running for 6.769)
由于配置了print()
这个ResultHandler
,所以控制台会打印相关参数信息。建议设置此属性,这样就算测试有问题,也能看下具体的参数信息。其他相关mock的用法,此处就不举例了,大家可自行搜索下,比较本章节只是简单示例下用法~
- 鉴于每次编写控制层测试类时,都需要创建
MockMvc
对象,故可创建一个基类,这样省得每次都写。
BaseMockTest.java
/**
* mock 基类
* @author oKong
*
*/
public abstract class BaseMockTest {
@Autowired
private WebApplicationContext wc;
protected MockMvc mockMvc;
@Before
public void beforeSetUp() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(wc).build();
}
}
这样编写mock测试类时,还需要继承此基类即可。
Junit常用注解说明
- @Test 加在待测试的方法前面
- @Before 带上@Test的方法执行前会执行该方法
- @After 带上@Test的方法执行完毕后会执行该方法
- @BeforeClass 加上这个注解,则该方法会第一个执行(在所有方法中),且方法要加上关键词static,是一个static方法
- @AfterClass 加上这个注解,则该方法最后一个执行(在所有方法中),同样,方法要加上关键词static,是一个static方法
详细的使用,大家可自行谷歌下,毕竟常用的也就前面三个了,(┬_┬)
基于ContiPerf的性能测试
ContiPerf是一个轻量级的测试工具,基于JUnit 4 开发,可用于效率测试等。可以指定在线程数量和执行次数,通过限制最大时间和平均执行时间来进行性能测试。
性能测试示例
0.加入pom依赖包。
<dependency>
<groupId>org.databene</groupId>
<artifactId>contiperf</artifactId>
<version>2.3.4</version>
<scope>test</scope>
</dependency>
1.改写UnitTestServiceTest
测试类,进入ContiPerfRule
。
题外话:@Rule
是Junit
提供的一个扩展接口注解,其接口类为:org.junit.rules.MethodRule
,注意在Junit5中,已经被TestRule
所以替代了。这里只是简单提下,因为具体的也不是很清楚,也没有深入了解过。
/**
* 编写接口测试类
* @author oKong
*
*/
@RunWith(SpringRunner.class)
//SpringBootTest 是springboot 用于测试的注解,可指定启动类或者测试环境等,这里直接默认。
@SpringBootTest
public class UnitTestServiceTest {
@Autowired
UnitTestService testService;
//引入 ContiPerf 进行性能测试
@Rule
public ContiPerfRule contiPerfRule = new ContiPerfRule();
@Test
//10个线程 执行10次
@PerfTest(invocations = 100,threads = 10)
public void test() {
String msg = "this is a test";
String result = testService.process(msg);
//断言 是否和预期一致
Assert.assertEquals(msg, result);
}
}
- 控制台会有性能报告,同时访问:
target/contiperf-report/index.html
,会有图表提示。
控制台输出:
cn.lqdev.learning.springboot.chapter13.service.UnitTestServiceTest.test
samples: 100
max: 403
average: 41.5
median: 15
测试报告:
测试报告
注解参数说明
@PerfTest
- invocations:执行次数n,与线程数量无关,默认值为1
- threads:线程池数量n,并发执行n个线程
- duration:重复地执行时间n,测试至少执行n毫秒
@Required
- throughput:吞吐要求n,要求每秒至少执行n个测试
- average:平均执行时间n,要求平均执行时间不超过n毫秒
- max:最大执行时间n,要求最大的执行时间不超过n毫秒
- totalTime:总执行时间n,要求总的执行时间不超过n毫秒
- median:50%平均执行时间n,要求所有执行的50%测试平均执行时间不超过n毫秒
- percentile90:90%平均执行时间n,要求所有执行的90%测试平均执行时间不超过n毫秒
- percentile95:95%平均执行时间n,要求所有执行的95%测试平均执行时间不超过n毫秒
- percentile99:99%平均执行时间n,要求所有执行的99%测试平均执行时间不超过n毫秒
- percentiles:表达式”a:n,b:m”,要求a%的测试不超过n毫秒,b%的测试不超过m毫秒
总结
本章节主要是对Junit
和ContiPerf
的使用简单的示例,像MockMvc
的详细用法并没有深入,大家可自行搜索下,毕竟我也用的不多呀。
最后
目前互联网上很多大佬都有SpringBoot
系列教程,如有雷同,请多多包涵了。本文是作者在电脑前一字一句敲的,每一步都是实践的。若文中有所错误之处,还望提出,谢谢。