开源测试工具 【开源】在线交互式编程自动化测试平台-yqhp

jiangyitao · 2023年10月13日 · 最后由 jiangyitao 回复于 2023年10月16日 · 4333 次阅读

在编写自动化脚本过程中,调试脚本是一件麻烦的事,我们需要不断调整代码来验证想法,反复从头开始执行,这将耗费大量时间。交互式编程可以让这件事变得轻松简单

交互式编程

交互式编程是一种编程方法,它允许工程师与计算机进行实时的、逐行的交互,以开发、测试和执行代码,这种编程方式通常用于脚本语言以及快速原型开发中。以下是交互式编程的一些特点:

  • 逐行执行:工程师可以逐行编写和执行代码,而不需要一次性编写整个程序
  • 即时反馈:工程师可以立即看到每行代码的执行结果,这有助于快速调试和修改代码
  • 交互性:工程师可以在执行过程中修改变量、调整参数和测试不同的方法,以探索和理解代码的行为

对新手而言,通过不断尝试不同的代码片段,可以快速掌握编程语言的基本语法。

yqhp 交互式编程

An image

  • monaco-editor是微软开源的文本编辑器,也是 vscode 核心编辑器。yqhp web 代码编辑器基于此实现
  • JShell 是 Java9 引入的编程工具,yqhp 交互式编程基于此实现

JShell 核心执行流程

An image

以下通过一个示例,更直观地了解 JShell 核心执行流程

  1. 类定义
// 运行代码
class HelloWorld {
    static void say() {
        System.out.println("hello world");
    }
}

// JShell生成的代码(简化版) -> 编译并加载到JVM
class $1 {
    public static class HelloWorld {
        static void say() {
            System.out.println("hello world");
        }
    }
}
  1. 方法定义
// 运行代码
boolean exists(By by) {
    try {
        driver.findElement(by);
        return true;
    } catch (Exception e) {
        return false;
    }
}

// JShell生成的代码(简化版) -> 编译并加载到JVM
import static $0.driver;
class $2 {
    public static boolean exists(By by) {
        try {
            driver.findElement(by);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
  1. 使用步骤 1 与 步骤 2 定义的类与方法
// 运行代码
if (exists(By.id("android:id/button1"))) {
    HelloWorld.say();
}

// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $1.HelloWorld;
import static $2.exists;
class $3 {
    public static Object do_it$() throws Throwable {
        if (exists(By.id("android:id/button1"))) {
            HelloWorld.say();
        }
        return null;
    }
}
  1. 查找元素
// 运行代码
var logintBtn = driver.findElement(By.id("android:id/tv_login"));

// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $0.driver;
class $4 {
    public static org.openqa.selenium.WebElement logintBtn;
    public static Object do_it$() throws Throwable {
        return logintBtn = driver.findElement(By.id("android:id/tv_login"));
    }
}
  1. 点击元素
// 运行代码
logintBtn.click()

// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $4.logintBtn;
class $5 {
    public static Object do_it$() throws Throwable {
        logintBtn.click();
        return null;
    }
}
  1. 获取元素 text
// 运行代码
var text = logintBtn.getText();

// JShell生成的代码(简化版) -> 编译并加载到JVM -> 通过反射调用do_it$方法
import static $4.logintBtn;
class $6 {
    public static String text;
    public static Object do_it$() throws Throwable {
        return text = logintBtn.getText();
    }
}

开源地址: https://github.com/yqhp

文档地址: https://yqhp.github.io/docs/

如有帮助,github star 支持下吧:)

共收到 3 条回复 时间 点赞

膜拜下大佬。

saii 回复

🙏

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册