一、核心模块及基础服务类封装(封装同样参考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)
















