pos机图标设计ui,高复用性自动化脚本设计实践

 新闻资讯2  |   2023-07-03 13:41  |  投稿人:pos机之家

网上有很多关于pos机图标设计ui,高复用性自动化脚本设计实践的知识,也有很多人为大家解答关于pos机图标设计ui的问题,今天pos机之家(www.poszjia.com)为大家整理了关于这方面的知识,让我们一起来看下吧!

本文目录一览:

1、pos机图标设计ui

pos机图标设计ui

Tech导读 在自动化测试实践中,为了更好的契合被测业务场景,需要不断优化框架分层结构。本文结合产品模块化思路,意在介绍通过策略模式改造原本复杂分支语句代码,通过理论讲解、思路分析、方案设计、及代码演示,提供自动化脚本重构的落地方案。

01

痛点

在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!

随着运输业务场景的不断丰富和自动化脚本量的不断累积,日常在review用例时发现,目前大家仍停留在针对需求定制化用例编写,无法提高用例可复用性和可编排性。当业务流程中间某一环节发生变化时,不但需要重新修改脚本,还会影响当前应用其他用例执行结果。所以,如何设计高复用性脚本成为目前自动化建设的关键节点。

02

设计理论

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。从设计稿出发,提升页面搭建效率,亟需解决的核心问题有:

2.1 设计理念

根据面向对象程序设计理念,设计者应遵循高内聚与低耦合原则,通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。高内聚意味着一个类所能提供的功能应该是相关的,即一个类不要设计得包括很多互不相干的功能,低耦合代表要合理规划模块的颗粒度,即要保证一个模块可独立存在,降低模块之间复杂依赖关系。

2.2 策略模式

策略模式定义了一系列的算法,将每一组相关的算法封装起各个策略分支,从而将分支相关的代码隐藏起来,并且使它们之间可以相互替换。策略模式让算法的变化不会影响到使用算法的客户,希望可以提高程序的可扩展性。

03

解决思路

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。从设计稿出发,提升页面搭建效率,亟需解决的核心问题有:

3.1 基本思路

根据运输业务同一个流程存在不同场景,如询价服务接上游下发询价单节点,需要区分来源执行不同逻辑,目前设计五个算法能力,根据后期业务不断扩展,还会有更多算法加入进来,这个时候需要考虑一个好的结构对代码进行优化。可能前期大家通过if...elif...else 分支语句就可实现,但在考虑系统的健壮性和可维护性,这里就不能大量使用if分支语句。因为每一种算法能力的代码量极大且算法参数几十个,在随着更多上游接入可能存在十几个甚至更多else分支,很容易顾此失彼,牵一发而动全身。所以,利用策略模式设计一系列算法,再供用例拼装调用,提高代码的可读性和可复用性。

3.2 方案分析

优点:

1. 代码解耦,便于维护;

2. 避免使用难以维护的多重条件选择语句;

3. 可以运行时动态切换算法;

4. 开闭原则。无须对上下文代码进行修改,就可以添加新的代码。

缺点:

1. 如果算法逻辑,较为固定,不经常修改,使用策略模式只会增加代码量

2. 必须知道所有的具体策略类及它们的区别。

04

方案概述

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

4.1 环境依赖

Laputa框架简介:

Laputa框架基于 Pytest 集成了对API接口自动化, 以及对 Web应用, 移动端应用和 Windows 桌面应用 UI 等自动化的能力。具有可视化的Web界面工具, 便于配置执行规则,关联执行脚本, 触发用例执行,查看执行结果。提供CI集成服务,调用Jenkins API跟踪持续集成结果,开放接口,实现流水线自动化测试。

图1 自动化框架架构图

4.2 分层改造

图2 自动化用例分层图

4.3 策略设计

图3 策略模式设计图

4.4 操作步骤

1. 将频繁修改的算法进行抽取,独立为具体的算法类;

2. 创建抽象基类,实现一个约定的抽象策略方法;

3. 所有独立的算法类,必须实现基类中的抽象策略接口;

4. 建立上下类,该类可以动态的对算法进行setter,创建调用具体算法的方法,上下文可通过该方法与具体的策略交互;

5. 客户端进行调用,传入具体的算法类,上下文动态执行具体的算法任务。

05

设计实践

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

5.1 询价接单接口改造

如源代码结构,根据不同业务来源,写在一个方法里通过if...else...分别组装场景,一旦上游任一系统存在需求变动,当前接单接口调用逻辑需要变动:

【python】def receive_enquiry_bill(**kwArgs):params=[{}]params[0].update(kwargs)if params[0].get("enquirySource") == 8:passelif params[0].get("enquiryWay") == 2 and params[0].get("payMode") == 2:passelif params[0].get("enquiryWay") == 2 and params[0].get("payMode") == 3:passif params[0].get("enquirySource") == 46:passif params[0].get("enquirySource") == 20:pass

改造结构:

上下文类

【python】class AlgorithmStrategy(object): def __init__(self, algorithm_name): self.algorithm_name = algorithm_name @property def algorithm(self): return self.algorithm_name @algorithm.setter def algorithm(self, name): self.algorithm_name = name def execute_algorithm(self, params): return self.algorithm_name.execute(params)

算法基类:

【python】class CreateEnquiryBillBaseAlgorithm(ABC):# 算法能力基类 @abstractmethod def read_params(self, **kwargs):scenario=kwargs['scenario'] if "scenario" in kwargs and kwargs['scenario'] else 'base' return resource_custom_data[self.__class__.__name__][scenario][0].update(kwargs) @abstractmethod def execute(self, params): return jsf_receive_enquiry_bill(data=json.dumps(params)

不同算法:

【python】class CreateTFCEnquiryBill(CreateEnquiryBillBaseAlgorithm): def read_params(self, **kwargs): params = super().read_params(**kwargs) params[0].update({"businessCode": kwargs['businessCode'] if 'businessCode' in kwargs else f"TJ{laputa_util.date_time_str(fmt='%y%m%d')}{laputa_util.get_random_num(8)}","receiveBeginTime": tms_util.data_time_str(minutes=100),"deliveryBeginTime": tms_util.data_time_str(minutes=180)}) return params def execute(self, params): return super().execute(params)class CreateECLPClodEnquiryBill(CreateEnquiryBillBaseAlgorithm): def read_params(self, **kwargs):# 若当前场景参数与基础参数改动较大建议直接在Yaml里另写Keyparams = super().read_params(**kwargs)params[0].update({"businessCode": kwargs['businessCode'] if 'businessCode' in kwargs else f"ECO{laputa_util.date_time_str(fmt='%y%m%d')}{laputa_util.get_random_num(8)}","receiveBeginTime": tms_util.data_time_str(minutes=100),"deliveryBeginTime": tms_util.data_time_str(minutes=180)})return params def execute(self, params): super().execute(params)return jsf_do_assign(data=json.dumps(params))

算法注入使用:

【python】def receive_enquiry_bill(algOne=None, sceOne=None, **kwargs): """ Args: algorithm: 业务类型 scenario: 测试场景:执行步骤,执行数据 Returns: """ if algorithm: # 采用字典形式进行手动注册算法,由python动态查找 st = {"TFC": CreateTFCEnquiryBill(), "ECLP冷链": CreateECLPClodEnquiryBill(), "TC": CreateTCEnquiryBill(),"终端用车": CreateTerminalEnquiryBill()} query_algorithm = st.get(algOne) return query_algorithm.execute(query_algorithm.read_params(scenario=sceOne, **kwargs)) else: pass

当有需求变动,只需修改其一策略规则内部代码,如【分单策略需求】,除运输内部系统TFC下发询价指定个体标签,其他上游没有增加标签下发功能,则只需修改CreateTFCEnquiryBill()代码即可。

5.2 Common用例组装

拼接task客户端方法组成case,利用feature组装测试数据,数据驱动测试方法执行。

【python】@pytest.mark.parametrize("params", test_data('test_enquiry_core'), indirect=True)def test_enquiry_core(params): enquiry_code = receive_enquiry_bill_core(**params).get("data") return quote_enquiry_bill_core(enquiry_code=enquiry_code, **params)

06

总结

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

随着运输八大产品建设方向逐步明确,自动化平台需要从应用维度重构到产品维度,在脚本不断融合和解耦过程,如何在新的分层模式设计高复用性脚本,需要大家结合各自业务条线不断优化改进。

作者:刘红妍

来源:微信公众号:京东技术

出处:https://mp.weixin.qq.com/s/iDWtkOqGposBv9kklHbl_A

以上就是关于pos机图标设计ui,高复用性自动化脚本设计实践的知识,后面我们会继续为大家整理关于pos机图标设计ui的知识,希望能够帮助到大家!

转发请带上网址:http://www.poszjia.com/newsone/79121.html

你可能会喜欢:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 babsan@163.com 举报,一经查实,本站将立刻删除。