Dubbo 接口自动化测试框架

一、核心模块及基础服务类封装(封装同样参考unittest框架的五个文件夹加两个py文件。只是这个多一个base_service.py,放于api文件夹即可)

  1、核心模块介绍

  

  2、基础服务类封装设计

    

    1、创建一个基础服务类(base_service.py)

from dubboclient import DubboClient

class BaseService(object):
    def __init__(self):
        self.dubbo_client = DubboClient("211.103.136.244",6502)

    2、服务对象封装

      会员服务类(新建member_service.py)

#导包
import json

from base_service import BaseService

class MemberService(BaseService):
    #重写(扩展式)
    def __init__(self):
        super().__init__()    #继承父类
        self.service_name = "MemberService"    #服务名,多个方法使用
        
    #封装服务类下面的方法
    
    def find_by_telephone(self,tel):
        resp = self.dubbo_client.invoke(self.service_name,"findByTelephone",tel)
        if resp == "null":
            return None
        else:
            #将string类型的数据还原成 字典 或 列表数据
            return json.loads(resp)
        
    def find_member_count_by_months(self,months):
        resp = self.dubbo_client.invoke(self.service_name,"findMemberCountByMonths",months)
        return json.loads(resp)
    
    def add(self,info):               #自定义类型数据
        '''
        info:代表用户传入的测试数据,此时没有class元素
        :return: 
        '''
        #此时自己添加info的 class 类
        info["class"] = "com.itheima.pojo.Member"
        resp = self.dubbo_client.invoke(self.service_name,"add",info)
        if resp == "null":
            return True
        else:
            return False
        
if __name__ == "__main__":
    ms = MemberService()
    print(ms.find_by_telephone())

      预约设置服务类(同上)

#导包
import json

from base_service import BaseService

class OrderSettingService(BaseService):
    #重写(扩展式)
    def __init__(self):
        super().__init__()    #继承父类
        self.service_name = "OrderSettingService"    #服务名,多个方法使用

    #封装服务类下面的方法

    def edit_number_by_date(self,date):
        #给date添加class类
        date["class"] = "com.itheima.pojo.OrderSetting"
        resp = self.dubbo_client.invoke(self.service_name,"findByTelephone",date)
        if resp == "Failed":
            return False
        else:
            #将string类型的数据还原成 字典 或 列表数据
            return True

    def get_order_setting_by_month(self,months):
        resp = self.dubbo_client.invoke(self.service_name,"getOrderSettingByMonth",months)
        if resp == "Failed":
            return None
        else:
            return json.loads(resp)

    def add(self,data_list):               #自定义类型数据
      
        resp = self.dubbo_client.invoke(self.service_name,"add",data_list)
        if resp == "Failed":
            return False
        else:
            return True

if __name__ == "__main__":
    ms = OrderSettingService()

 

  3、测试脚本层

    创建 test_itheima_health.py

import unittest
#导入测试接口
from test01 import OrderSettingService

#封装测试类
class TestFindByTelephone(unittest.TestCase):
    #定义类属性,用了setUpClass
    ms = None
    
    @classmethod
    def setUpClass(cls) -> None:
        #创建类实例(赋值给类属性)#由于不是类方法,所以只能导入类包,通过实例化类对象获取方法
        cls.ms = OrderSettingService()
        
    #手机号已存在
    def test01_tel_exists(self):
        resp = self.ms.add(data_list=["2019-09"])
        #print(resp)
        self.assertEqual("2019-09",resp.get("date"))     #由于响应结果本身就是字典格式,所以不需要resp.json().get()

    #手机号不存在
    def test02_tel_not_exists(self):
        resp = self.ms.add(data_list="12132453536")
        #print(resp)
        self.assertEqual(None,resp)

    #手机号特殊字符
    def test03_tel_special_char(self):
        resp = self.ms.add(data_list="1213245abc")
        #print(resp)
        self.assertEqual(None,resp)

 

  4、参数化

    测试脚本层就可以写成通用测试方法(也可以将参数写成一个单独的文件,调用方法读取然后传入参数化)

import unittest
#导入测试接口
from test01 import OrderSettingService
#导入参数化包
from parameterized import parameterized
#封装测试类
class TestFindByTelephone(unittest.TestCase):
    #定义类属性,用了setUpClass
    ms = None

    @classmethod
    def setUpClass(cls) -> None:
        #创建类实例(赋值给类属性)#由于不是类方法,所以只能导入类包,通过实例化类对象获取方法
        cls.ms = OrderSettingService()

    #手机号已存在
    @parameterized.expand([("2019-09"),("2019-09"),
                           ("2019-09"),None,
                           ("2019-09"),None
                           ])
    def test01_tel_all_way(self,data_list,expect_data):
        resp = self.ms.add(data_list)
        #print(resp)
        if resp is None:
            self.assertEqual(expect_data,resp)     #
        else:
            self.assertEqual(expect_data,resp.get("data"))      #由于响应结果本身就是字典格式,所以不需要resp.json().get()

 

  5、生成测试报告

    run_suite.py文件写脚本

#导包
import unittest
#导入测试脚本
from test_itheima_health import TestFindByTelephone
from htmltestreport import HTMLTestReport

#创建suite实例
suite = unittest.TestSuite()

#添加测试用例
suite.addTest(unittest.makeSuite(TestFindByTelephone))

#创建HTMLTESTREPORT
runnner = HTMLTestReport("./report/健康小程序.html",description="描述",title="标题")

runnner.run(suite)

 

posted @ 2023-04-14 17:40  新入世界的小白  阅读(187)  评论(0编辑  收藏  举报