最近因工做緣由,須要測試dubbo接口,經過公司同事寫的框架,再結合度孃的幫助,本身作了一些總結記錄。java
經過下文意在說明如何搭建一個spring + dubbo + testng的測試環境,並完成一個簡單的dubbo接口測試用例。spring
1、在Idea中新建一個maven工程json
2、在pom.xml中添加相關依賴api
<dependencies> <!-- Spring框架依賴:用於構建Spring容器 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.5.RELEASE</version> </dependency> <!-- Spring單元測試依賴:用於測試類啓動spring容器 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.1.5.RELEASE</version> <scope>test</scope> </dependency> <!-- dubbo依賴--> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <!-- 引入相應工程的jar包:*根據工程不一樣具體填入相應值--> <dependency> <groupId>com.*.*</groupId> <artifactId>*</artifactId> <version>*</version> </dependency> <!-- testng依賴:測試框架--> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.14.3</version> <scope>test</scope> </dependency> <!-- fastjson依賴:主要用於接口返回結果中解析json對象 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.54</version> </dependency> <!-- 流式斷言器依賴:要比於junit和testng中的斷言,assertj的api更強大--> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.11.1</version> <scope>test</scope> </dependency> </dependencies>
3、Dubbo服務spring配置(resources目錄下新建一個bean.xml文件)app
因爲測試過程是RPC(遠程調用接口)的過程,測試項目至關於服務消費方Consumer,開發項目至關於服務提供方Provider,框架
因此測試只須要進行消費方的spring配置。xml的模板能夠直接從要測試的dubbo接口對應的應用中拷貝;maven
<dubbo:application>必須聲明,name和owner的值隨便取(固然要取有必定意義的),沒有對應關係;ide
<dubbo:reference>中url對應dubbo接口對應的dubbo服務地址和端口,單元測試
id惟一便可,測試
interface是dubbo服務的全限定類名
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="x1_consumer" owner="x2_consumer"/> <dubbo:reference url="dubbo://192.168.0.100:20860" id="testService" interface="com.*.*.service.TestService" timeout="30000"/> </beans>
4、編寫測試腳本
import com.*.*.TestService; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; import javax.annotation.Resource; //測試類須要繼承AbstractTestNGSpringContextTests,若是不這麼作測試類是沒法啓動Spring容器的 @ContextConfiguration(locations = "classpath:bean.xml") public class TestBase extends AbstractTestNGSpringContextTests { @Resource public TestService testService; }
測試類須要繼承AbstractTestNGSpringContextTests,若是不這麼作測試類是沒法啓動Spring容器的
使用了[@ContextConfiguration]是爲了加載被測試的Bean
import com.alibaba.fastjson.JSON; import org.testng.Assert; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; public class TestSaveData extends TestBase {
private TestDTO testDTO = new TestDTO(); private List<Integer> categorys = new ArrayList<Integer>(); @Test public void TestSaveData_nameIsNull() { categorys.add(1); testDTO.setCategorys(categorys); ResponseDTO res = TestService.saveData(testDTO); System.out.println(JSON.toJSONString(res)); assertThat(res.getCode()).as("返回狀態碼").isEqualTo("2") .isBetween("1","2"); assertThat(res.getMessage()).isEqualTo("XX名稱不能爲空!"); assertThat(res.isSuccess()).isFalse(); } }