Sobes.tech
Middle

Омӯзиши тестии WebSocket-ро доштед?

sobes.tech AI

Ҷавоб аз AI

Бале, будааст. Санҷиши WebSocket дар бар мегирад санҷиши барқарор кардани пайванд, фиристодан ва гирифтани паёмҳо, идоракунии хатоҳо ва иҷроиш.

Равишҳои санҷиш:

  • Санҷиши воҳид: Санҷиши компонентҳои алоҳида, ки масъул барои функсияи WebSocket (масалан, таҳлили паёмҳо, идоракунии ҳодисаҳо).
  • Санҷиши интегратсионӣ: Санҷиши муоширати байни муштарӣ ва сервери WebSocket.
  • Санҷиши боркашӣ: Арзёбии иҷрои пайванд дар WebSocket бо шумораи зиёди муштариёни ҳамзамон ва мубодилаи шиддатноки маълумот.
  • Санҷиши бехатарӣ: Санҷиши заъифӣҳо, ба монанди ворид кардани код ё рад кардани хизматрасонӣ.

Асбобҳо:

  • Postman: Имкон медиҳад, ки пайвандҳои WebSocket-ро санҷед, паёмҳоро фиристед ва қабул кунед.
  • Websocket.org (Echo Test): Як асбои онлайн барои санҷиши функсионалии асосии WebSocket.
  • XCUITest: Фреймвор барои санҷиши UI-и барномаҳои iOS, метавонад барои симулясияи амалҳои корбар, ки бо WebSocket алоқаманданд, истифода шавад.
  • Китобхонаҳои махсус: Масалан, Starscream ё SocketIO дар сценарийҳои санҷишӣ.

Масалан, санҷиши асосии барқарор кардани пайванд бо истифода аз китобхонаи тест:

// Масалан, истифодаи Starscream барои тестҳо
import Starscream
import XCTest

class WebSocketTests: XCTestCase {

    var socket: WebSocket!
    var didConnectExpectation: XCTestExpectation!

    override func setUpWithError() throws {
        // Танзими интизорӣ барои ҳодисаи асинхронӣ
        didConnectExpectation = expectation(description: "WebSocket пайваст шуд")
        // Иваз кардани URL бо суроғаи сервери тестии WebSocket
        socket = WebSocket(request: URLRequest(url: URL(string: "ws://echo.websocket.org")!))
        socket.delegate = self
    }

    override func tearDownWithError() throws {
        // Бозгашт додани socket баъди ҳар санҷиш
        socket.disconnect()
        socket = nil
        didConnectExpectation = nil
    }

    func testWebSocketConnection() throws {
        // Пайваст шудан ба сервери WebSocket
        socket.connect()

        // Чекунӣ барои иҷрои интизорӣ дар вақти маҳдуд
        wait(for: [didConnectExpectation], timeout: 10.0)

        // Санҷишҳои иловагӣ метавонанд илова шаванд, масалан, ҳолати socket-ро санҷед
        XCTAssertTrue(socket.isConnected, "WebSocket бояд пайваст бошад")
    }
}

// Тарашир барои делегати WebSocket
extension WebSocketTests: WebSocketDelegate {
    func didReceive(event: WebSocketEvent, client: WebSocket) {
        switch event {
        case .connected(_):
            print("WebSocket пайваст шуд")
            // Иҷрои интизорӣ дар вақти пайвастшавӣ
            didConnectExpectation.fulfill()
        case .disconnected(let reason, let code):
            print("WebSocket қатъ шуд: \(reason) бо коди \(code)")
        case .text(let string):
            print("Пайёми матнӣ қабул шуд: \(string)")
        case .binary(let data):
            print("Додҳои бинарӣ қабул шуд: \(data.count) байт")
        case .ping(_):
            print("Ping қабул шуд")
        case .pong(_):
            print("Pong қабул шуд")
        case .viabilityChanged(_):
            print("Тағйироти қобилияти ҳаёт")
        case .reconnectSuggested(_):
            print("Тавсия барои пайвастшавии дубора")
        case .cancelled:
            print("WebSocket бекор шуд")
        case .error(let error):
            print("Хатои WebSocket: \(error?.localizedDescription ?? "")")
            XCTFail("WebSocket бо хато рӯбарӯ шуд: \(error?.localizedDescription ?? "")")
        }
    }
}