天天看點

Socket接口異步驗證明踐

之前做過一些​

​Socket​

​​接口的測試腳本,但是并沒有對其中的響應結果進行自動化驗證,主要還是靠人肉眼去檢查。前天完成了​

​JSON​

​​對象的多功能驗證類​

​VerifyBean​

​​的代碼,終于有時間做​

​Socket​

​​接口的自動化驗證了。由于公司長連接配接基于​

​Socket.IO​

​​協定的,是以​

​WebSocket​

​的這裡就不涉及了,有興趣的可以加我一起交流。

這裡先提一嘴:​

​Groovy​

​​重載操作符**==** 的時候有個問題:在原生的項目裡面使用​

​obj == obj​

​​會調用​

​obj​

​​對象的​

​equal​

​​方法,但是如果把原生的項目打包成​

​jar​

​​包然後在其他項目中調用​

​obj == obj​

​​,會優先調用​

​Java​

​中的 ==,的确不明是以,但是太坑了,花了至少一個小時時間排查修複問題,又增加了一些日志。如果各位對​

​JSON​

​​對象的多功能驗證類有興趣的話,建議去​

​GitHub​

​​或者​

​gitee​

​檢視最新的代碼。

  • ​Gitee​

    ​位址​gitee.com/fanapi/test…
  • ​GitHub​

    ​位址​github.com/JunManYuanL…

話不多說,上代碼

這裡我思路如下:

package com.okayqa.socket.test

import com.fun.base.bean.VerifyBean
import com.fun.base.interfaces.ISocketVerify
import com.fun.frame.socket.ScoketIOFunClient
import com.okayqa.socket.base.SocketBase
import org.slf4j.Logger
import org.slf4j.LoggerFactory
/**
 * wiki:http://wiki.okjiaoyu.cn/display/RJBK/ailearn-instruction-svr
 */
class ST extends SocketBase {

    private static Logger logger = LoggerFactory.getLogger(ST.class)

    static int roomId = 43548;

    static int activity_id = roomId;

    public static void main(String[] args) {
        def tbase = getTeaBase()
        ScoketIOFunClient teacher = getSocket(tbase)
        initAll()
        registerAll()
        joinRoom(roomId)
        leaveRoom(roomId)
        def sv = new SV(teacher)
        def bean = new VerifyBean("jsonpath|\$.cmd|=joinRoomResponse", EMPTY, "FunTester0")
        def bean1 = new VerifyBean("contain|61951375269", EMPTY, "FunTester1")
        sv.addVerify(bean)
        sv.addVerify(bean1)
        sleep(2.0);
        def thread = new Thread(sv)
        thread.start()
        logger.info("腳本完成!")
        thread.join()
        output(sv.vs*.result)
        sv.vs.each {it.print()}
        ScoketIOFunClient.closeAll()
    }

    static class SV implements ISocketVerify {


        List<VerifyBean> vs = new ArrayList<>()

        ScoketIOFunClient client

        SV(ScoketIOFunClient client) {
            this.client = client
        }

        @Override
        void initMsg(List<String> list) {

        }

        @Override
        boolean verify() {
            return false
        }

        @Override
        void addVerify(VerifyBean verifyBean) {
            vs << verifyBean
        }

        @Override
        void remoreVerify(VerifyBean verifyBean) {
            vs.remove(verifyBean)
        }

        @Override
        void removeAllVerify() {
            vs.clear()
        }

        @Override
        void saveResult() {

        }

        @Override
        void run() {
            synchronized (client.msgs) {
                client.msgs.each { x ->
                    vs.each { v ->
                        def s = x.substring(1, x.length() - 1)
                        v.setValue(s)
                        v.verify()
                    }
                }
            }
        }
    }
}      

控制台輸出

INFO-> 目前使用者:fv,IP:10.60.192.21,工作目錄:/Users/fv/Documents/workspace/okay_test/,系統編碼格式:UTF-8,系統Mac OS X版本:10.16
INFO-> requestid: Fdev16092381258113
INFO-> 請求uri:https://teacherpad-***.cn/api/t_pad/user/login,耗時:984 ms
INFO-> 教師:61951375269,學科:null,名稱:範老師零零零,登入成功!
INFO-> Socket 連接配接: http://ailearn-***.cn:38899/?systemId=61951375269&loginType=3&token=2cc340d010af4fd3a22be276cf2ebec3&userType=1,用戶端名稱: 老師:61951375269
INFO-> 老師:61951375269 開始連接配接...
INFO-> 老師:61951375269 連接配接成功!
INFO-> 老師:61951375269 收到響應:[{"msg":"","code":0,"data":{"role":"T","s_sid":123,"deviceVersion":"1.0","userId":61951375269,"token":"2cc340d010af4fd3a22be276cf2ebec3"},"cmd":"registerResponse"}]
INFO-> 老師:61951375269 收到響應:[{"msg":"","code":0,"data":{"roomId":43548},"cmd":"joinRoomResponse"}]
INFO-> 老師:61951375269 收到響應:[{"msg":"","code":0,"data":{},"cmd":"leaveRoomResponse"}]
INFO-> 腳本完成!
INFO-> verify對象: registerResponse,比對的字元串: =joinRoomResponse
INFO-> verify對象 $.cmd|=joinRoomResponse ,驗證結果: false
INFO-> verify對象 61951375269 ,驗證結果: true
INFO-> verify對象: joinRoomResponse,比對的字元串: =joinRoomResponse
INFO-> verify對象 $.cmd|=joinRoomResponse ,驗證結果: true
INFO-> 第1個:true
INFO-> 第1個:true
INFO-> FunTester0 驗證結果: true
INFO-> FunTester1 驗證結果: true
INFO-> 老師:61951375269 socket連結關閉!
INFO-> 關閉所有Socket用戶端!

Process finished with exit code 0      
FunTester,非著名測試開發,文章記錄學習和感悟,歡迎關注,交流成長。