| 背景

自 SoloPi 上线已有半载,收到了一些用户的正向反馈,也给广大测试同学带来一定的效率提升的,和我们的初衷 “为业界带来美而小的工具” 相吻合。同时也收到一些建议,例如 SoloPi 还不支持 CI。经过分析,多数公司 CI 都依赖与主流测试框架实现,SoloPi 虽然用例录制体验非常好,但与主流测试框架不兼容,如果能让 SoloPi 与主流测试框架兼容,那该问题迎刃而解了。

|「用例转换」全新功能介绍

为了让 SoloPi 与主流测试框架兼容,用例兼容是关键,本期我们添加了用例转换功能。
SoloPi 用例与常规用例有所不同,它会将录制时控件的全部信息都保存下来,在回放时综合进行匹配,而一般的自动化用例往往只会使用其中一种信息进行匹配。为了更好地适应用户需求,转化脚本支持为每一个步骤配置查找的条件,方便用户选择最合适的方式执行。
目前,SoloPi 转化脚本提供了 Appium、Macaca 两种语言的转换。你也可以根据自己的需要,参照后文代码解析部分,实现自己的转化脚本。

|「用例转换」使用指南

  1. 执行入口

    python3 handler.py
    
  2. 输入 SoloPi 脚本地址

  3. 选择转化类型(目前支持 Appium 和 Macaca)

  4. 选择输出目录

  5. 每一步单独选择查找方式

  6. 导出完成,可以在对应目录查看导出的用例脚本,导出的脚本文件会被命名为 main.xxx 。

| 扩展实现

SoloPi 用例核心转化逻辑在 exporter module 下,用户可以扩展 BaseExporter 类,来实现自己的转换器

class BaseExporter(object):
    """
    Export SoloPi case to file
    """
    @staticmethod
    @abstractmethod
    def get_name() -> str:
        """
        Get name for this exporter
        """
        pass
    @abstractmethod
    def get_file_extension(self) -> str:
        """
        Get File Extension for this type
        :return:
        """
        pass
    def export_head(self, case_info: CaseInfo) -> str:
        """
        Export file head, you can export some universal method in this part
        """
        return ""
    @abstractmethod
    def export_step(self, step: Step, index: int, case_info: CaseInfo) -> str:
        """
        Export every step
        """
        pass
    def export_tail(self, case_info: CaseInfo) -> str:
        """
        Export file tail, for driver stop
        """
        return ""

其中各方法含义如下
get_name: 获取该导出器名称
get_file_extension: 获取导出文件的扩展名
export_head:获取导出文件的前缀文本
export_step:获取单步骤导出的文本
export_tail:获取导出文件的后缀文本

具体实现可以见 appium.py 与 macaca.py

立即体验 SoloPi 最新功能
https://github.com/soloPi/SoloPi-Convertor

体验 SoloPi 完整功能
https://github.com/alipay/SoloPi

| 问题反馈

欢迎大家在日常的回归测试、兼容性测试以及性能测试过程中试用 SoloPi 工具,过程中如有任何问题和意见,可以在 github 上通过 Issue 进行反馈,也可加入 SoloPi 开源交流群参与讨论。


↙↙↙阅读原文可查看相关链接,并与作者交流