Groovy 在Katalon Studio的关键字中使用Gmail API

Groovy 在Katalon Studio的关键字中使用Gmail API,groovy,gmail,gmail-api,katalon-studio,katalon,Groovy,Gmail,Gmail Api,Katalon Studio,Katalon,我使用本教程连接Gmail API: 我想在Katalon Studio中制作一个关键字,这取决于Gmail API。 我修改了该行的示例代码: InputStream in = GmailQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH); 为此: InputStream ins = new FileInputStream(CREDENTIALS_FILE_PATH); 添加JAR文件,运行项目,打开浏览器窗口以获取令牌。

我使用本教程连接Gmail API: 我想在Katalon Studio中制作一个关键字,这取决于Gmail API。 我修改了该行的示例代码:

InputStream in = GmailQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
为此:

InputStream ins = new FileInputStream(CREDENTIALS_FILE_PATH);
添加JAR文件,运行项目,打开浏览器窗口以获取令牌。成功授权后,我收到错误消息:

原因:java.lang.NoSuchMethodError: com.google.api.client.http.HttpRequest.setResponseReturnRawInputStream(Z)Lcom/google/api/client/http/HttpRequest

更新:导入的依赖项列表:

commons-codec-1.15.jar
commons-logging-1.2.jar
google-api-client-1.31.3.jar
google-api-client-extensions-1.6.0-beta.jar
google-api-client-jackson2-1.31.3.jar
google-api-client-java6-1.31.3.jar
google-api-services-gmail-v1-rev110-1.25.0.jar
google-http-client-1.39.1.jar
google-http-client-jackson2-1.39.1.jar
google-oauth-client-java6-1.31.4.jar
google-oauth-client-jetty-1.31.4.jar
guava-30.1.1-jre.jar
httpclient-4.5.13.jar
httpcore-4.4.14.jar
j2objc-annotations-1.3.jar
jackson-core-2.12.2.jar
jsr305-3.0.2.jar

由于能够删除存储在项目文件夹的.classpath文件中的内置库,您可以将内置库替换为外部库,以便在测试项目中灵活使用库

要求

  • 有效的Katalon Studio企业许可证
  • 卡塔隆工作室7.8版

UPD:

我得到了katalon 7.9.1,下面是我如何做到的:

将以下类添加到KS项目中:

包含/scripts/groovy/(默认包)/GroovyBox.java

import groovy.lang.*;
import java.util.regex.Pattern;
import java.util.Map;
import java.util.List;

/** run groovy script in isolated classloader*/
public class GroovyBox {
    GroovyShell gs;
    
    public GroovyBox(ClassLoader parentCL, Pattern excludeClassPattern ) {
        FilteredCL fcl = new FilteredCL(parentCL, excludeClassPattern);
        gs = new GroovyShell(fcl);
    }
    
    public GroovyBox withClassPath(List<String> classPathList) {
        GroovyClassLoader cl = gs.getClassLoader();
        for(String cp: classPathList) cl.addClasspath(cp);
        return this;
    }
    
    public Script parse(String scriptText) {
        return gs.parse(scriptText);
    }
    
    public static class FilteredCL extends GroovyClassLoader{
        Pattern filterOut;
        
        public FilteredCL(ClassLoader parent,Pattern excludeClassPattern){
            super(parent);
            filterOut = excludeClassPattern;
        }
        
        @Override protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException{
            if(filterOut.matcher(name).matches())throw new ClassNotFoundException("class not found "+ name);
            return super.loadClass(name, resolve);
        }
    }
}
定义外部依赖项的选项:

commons-codec-1.15.jar
commons-logging-1.2.jar
google-api-client-1.31.3.jar
google-api-client-extensions-1.6.0-beta.jar
google-api-client-jackson2-1.31.3.jar
google-api-client-java6-1.31.3.jar
google-api-services-gmail-v1-rev110-1.25.0.jar
google-http-client-1.39.1.jar
google-http-client-jackson2-1.39.1.jar
google-oauth-client-java6-1.31.4.jar
google-oauth-client-jetty-1.31.4.jar
guava-30.1.1-jre.jar
httpclient-4.5.13.jar
httpcore-4.4.14.jar
j2objc-annotations-1.3.jar
jackson-core-2.12.2.jar
jsr305-3.0.2.jar
  • @Grab(…)
    作为已解析脚本的第一行-从maven central加载所有必需的依赖项(默认情况下)。例如
    @Grab(group='com.google.api-client',module='google-api-client',version='1.31.3')
    对应于
  • 有时,您需要指定特定的maven存储库,然后添加
    @grabsolver(name='central',root='1〕https://repo1.maven.org/maven2/)
  • 如果要指定本地文件依赖项,请在上面的代码中:

这是否回答了您的问题@DaImTo:我导入了所有必需的类,看不到冲突,正如我看到的版本号也是正确的。您的代码不正确。您正试图调用
HttpRequest
对象上的
setResponseReturnRawInputStream
。对于您正在使用的参数,没有这样的方法。如果没有代码,则无法提供帮助you@daggett:问题是由KS引起的,因为其中有此软件包的内置版本作为插件。但这是一个旧版本,它不包含该方法。谢谢,但我使用KS的免费版本,因此,我无法使用此功能。我添加了一个如何使用自定义ClassLoader执行脚本的想法。我收到了以下错误消息:
Groovy:unexpected token:@
It is for@Grab.downloaded KS-对answeri进行了更改我添加了定义本地库的支持,并对Grab进行了一些解释
def gb = new GroovyBox(...).withClassPath([
    '/path/to/lib1.jar',
    '/path/to/lib2.jar'
])