dubbo_telnet自动化测试脚本

该脚本使用dubbo telnet方式(dubbo官网提供的dubbo python client目前只支持jsonrpc协议,目前环境不支持),可以根据该脚本实现dev、test环境的接口自动化、压力测试,根据具体需求填补脚本即可。

#!/usr/bin/python
# -*- coding:utf-8 -*-
import json
import telnetlib
import unittest
import time
import re


class Dubbo(telnetlib.Telnet):

    prompt = 'dubbo>'
    coding = 'utf-8'

    def __init__(self, host=None, port=0):
        super().__init__(host, port)
        self.write(b'\n')

    def command(self, flag, str_=""):
        data = self.read_until(flag.encode())
        self.write(str_.encode() + b"\n")
        return data

    def invoke(self, service_name, method_name, args):
        command_str = "invoke {0}.{1}({2})".format(
            service_name, method_name, args)
        self.command(Dubbo.prompt, command_str)
        data = self.command(Dubbo.prompt, "")
        data = json.loads(data.decode(
            Dubbo.coding, errors='ignore').split('\n')[0].strip())
        return data


class DcTest(unittest.TestCase):
    #setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用 #
    def setUp(self):
        '''
        33: Dubbo('301.57.79.01', 27075)
        44: Dubbo('106.12.59.915', 7075)
        dev: Dubbo('121.36.108.215', 6666)
        '''
        self.dubbo_conn = Dubbo('127.0.0.1', 6666)
        self.verificationErrors = []  # 脚本运行时,错误的信息将被打印到这个列表中#
        self.accept_next_alert = True  # 是否继续接受下一个警告#
    # 更改司机状态
    def test_update_driver_status(self):
        data = {"class":"com.caocao.dc.api.dto.input.DriverStatusDTO","driverNo":1003019,"status":1}
        result = self.dubbo_conn.invoke(
            "com.caocao.dc.api.app.DriverCenterApi", "updateDriverStatus", data)
        print(result)
        time.sleep(2)
    # 司机开始服务
    def test_start_service(self):
        data = {"class": "com.caocao.dc.api.dto.input.DriverStartServiceParam", "driverNo": 1003019,"lat": 30.206907552083333, "lng": 120.22090521918403, "orderLabel": 128, "orderNo": 74602113541, "bizType": 1}
        result = self.dubbo_conn.invoke(
            "com.caocao.dc.api.app.response.DriverOrderResponseApi", "startService", data)
        print(result)
        time.sleep(2)
    def tearDown(self):
        '''
        tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。
        self.assertEqual([], self.verificationErrors) 是个难点,
        对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。
        '''
        self.assertEqual([], self.verificationErrors)

class DriverSupportTest(unittest.TestCase):
    #setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用 #
    def setUp(self):
        '''
        33: Dubbo('17.46.148.208', 7071)
        44: Dubbo('19.22.19.25', 7075)
        '''
        self.dubbo_conn = Dubbo('97.92.238.218', 7071)
        self.verificationErrors = []  # 脚本运行时,错误的信息将被打印到这个列表中#
        self.accept_next_alert = True  # 是否继续接受下一个警告#

    # 虚拟号AX预绑定
    def test_pre_bind_phone(self):
        data = {"class":"com.caocao.driver.support.dto.phone.BindPhoneAxPreParam","customerPhone":"4141241","orderNo":4141241,"bizType":80,"expireTime":1,"areaCode":"0571"}
        result = self.dubbo_conn.invoke(
            "com.caocao.driver.support.api.VirPhoneAxApi", "preBindPhone", data)
        print(result)
        time.sleep(2)
    def tearDown(self):
        '''
        tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。
        self.assertEqual([], self.verificationErrors) 是个难点,
        对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。
        '''
        self.assertEqual([], self.verificationErrors)

'''
driver-order
'''
class DriverOrderTest(unittest.TestCase):
    #setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用 #
    def setUp(self):
        '''
        33: Dubbo('101.159.59.142', 7071)
        44: Dubbo('106.2.9.25', 7071)
        '''
        self.dubbo_conn = Dubbo('111.32.49.515', 7071)
        self.verificationErrors = []  # 脚本运行时,错误的信息将被打印到这个列表中#
        self.accept_next_alert = True  # 是否继续接受下一个警告#
    # 订单流程校验
    def test_check_serve_flow(self):
        data = {"class": "com.caocao.driver.order.param.ServeFlowCheckParam", "bizType": 1, "cityCode": "0571",
                "driverNo": 3500035951, "driverType": 1, "orderLabel": 0, "orderNo": 8361805001163, "orderType": 1, "serveFlow": 1}
        result = self.dubbo_conn.invoke(
            "com.caocao.driver.order.api.DriverServeActionSupportApi", "checkServeFlow", data)
        print(result)
        time.sleep(2)
    # 司机开始服务订单(实时单确认接单/预约单开始服务)
    def test_start_service(self):
        print(self.dubbo_conn)

    def tearDown(self):
        '''
        tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。
        self.assertEqual([], self.verificationErrors) 是个难点,
        对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。
        '''
        self.assertEqual([], self.verificationErrors)

'''
local
'''
class LocalTest(unittest.TestCase):
    #setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用 #
    def setUp(self):
        '''
        local1: Dubbo('127.0.0.1', 20880)
        '''
        self.dubbo_conn = Dubbo('127.0.0.1', 20880)
        self.verificationErrors = []  # 脚本运行时,错误的信息将被打印到这个列表中#
        self.accept_next_alert = True  # 是否继续接受下一个警告#
    # 测试sayHello
    def test_say_hello(self):
        for x in range(0,1):
            data = {"class":"com.alibaba.dubbo.demo.BeanParam","name":"lios","age":25+x}
            result = self.dubbo_conn.invoke(
            "com.alibaba.dubbo.demo.DemoService", "hello", data)
            print(result)
            pass
        time.sleep(2)

    def test_2(self):
        print(self.dubbo_conn)

    def tearDown(self):
        '''
        tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。
        self.assertEqual([], self.verificationErrors) 是个难点,
        对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。
        '''
        self.assertEqual([], self.verificationErrors)


'''
dc suite
'''
def dc_suite():
    suite = unittest.TestSuite()
    suite.addTest(DcTest("test_update_driver_status"))
    suite.addTest(DcTest("test_start_service"))
    return suite
    pass

'''
driver-support suite
'''
def driver_support_suite():
    suite = unittest.TestSuite()
    suite.addTest(DriverSupportTest("test_pre_bind_phone"))
    return suite
    pass

'''
driver-order suite
'''
def driver_order_suite():
    suite = unittest.TestSuite()
    suite.addTest(DriverOrderTest("test_check_serve_flow"))
    suite.addTest(DriverOrderTest("test_start_service"))
    return suite
    pass
'''
local suite
'''
def local_suite():
    suite = unittest.TestSuite()
    suite.addTest(LocalTest("test_say_hello"))
    return suite
    pass

if __name__ == "__main__":
    ## 指定suite套件
    unittest.main(defaultTest='dc_suite')

微信公众号:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值