Spring+Dubbo+TestNG接口測試初探


最近因工作原因,需要測試dubbo接口,通過公司同事寫的框架,再結合度娘的幫助,自己做了一些總結記錄。

通過下文意在說明如何搭建一個spring + dubbo + testng的測試環境,並完成一個簡單的dubbo接口測試用例。

一、在Idea中新建一個maven工程

二、在pom.xml中添加相關依賴

    <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>

 三、Dubbo服務spring配置(resources目錄下新建一個bean.xml文件)

由於測試過程是RPC(遠程調用接口)的過程,測試項目相當於服務消費方Consumer,開發項目相當於服務提供方Provider,

所以測試只需要進行消費方的spring配置。xml的模板可以直接從要測試的dubbo接口對應的應用中拷貝;

<dubbo:application>必須聲明,name和owner的值隨便取(當然要取有一定意義的),沒有對應關系;

<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>

四、編寫測試腳本

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(); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM