Spring+Dubbo+TestNG接口測試初探

最近因工做緣由,須要測試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(); } }
相關文章
相關標籤/搜索