當前位置:首頁 » 編程軟體 » groovy腳本執行

groovy腳本執行

發布時間: 2022-08-15 04:43:45

① 如何使用groovy console

1、靜態編譯,在java工程中直接寫groovy的文件,然後可以在groovy的文件中引用java工程的類,這種方式能夠有效的利用groovy自身的語言特性,例如閉包; 2、通過groovyShell類直接執行腳本,例如: package groovy_dsl.shell;import groovy.lang....

② 利用groovy腳本獲取soapui中請求和響應的值

例如如下數據,calendar_id是需要根據返回值動態獲取的,此時需要通過獲得數組中的calendar_id
{"calendar":
[
{"calendar_id":"1705","showtime":"1288927800","endshowtime":"1288931400","allDay":false},
{"calendar_id":"1706","showtime":"1288933200","endshowtime":"1288936800","allDay":false},
{"calendar_id":"1709","showtime":"1288935600","endshowtime":"1288938900","allDay":false}
]
}

在SoapUI中可以通過groovy腳本實現提取json數組數據,提取到數據後就可以遍歷訪問列表中的每條新聞正文了
1.新建一個REST請求步驟,獲取介面返回的數據
2.新建一個DataSource步驟,選擇Groovy方式
3.添加一個名為cal_id的Properties
4.groovy編輯框中輸入實現代碼

[java] view plain
import groovy.json.JsonSlurper

def xresponse = testRunner.testCase.testSteps["getCalendarListByCoid"].testRequest.response.contentAsString
def slurper = new JsonSlurper()
def re = slurper.parseText(xresponse)
def num=re.calendar.size()
def i = testRunner.testCase.testSteps["DataSource"].currentRow
if(i<num)
{
result["cal_id"]=String.valueOf(re.calendar_id.id[i])
}

5.新建一個Property Transfer步驟,將DataSource的cal_id傳遞給當前testCase的變數
6.新建 一個REST請求步驟,將得到的cal_id去請求另一個介面
7.新建一個DataSource Loop步驟,使DataSource與Property Transfer步驟循環,這樣就可以遍歷數組中的每個數據了

[reply]tz0705010216[/reply]
你好
以博文中的json為例,新增的groovy步驟則如下:
def xresponse = testRunner.testCase.testSteps["getCalendarListByCoid"].testRequest.response.contentAsString
def slurper = new JsonSlurper()
def re = slurper.parseText(xresponse)
def id = re.calendar.calendar_id[i] //i為json數組中的第i個子json對象
若為在腳本斷言處添加groovy斷言,則如下:
def xresponse = messageExchange.modelItem.testCase.testSteps["getCalendarListByCoid"].testRequest.response.contentAsString
def slurper = new JsonSlurper()
def result = slurper.parseText(xresponse)
def id = re.calendar.calendar_id[i] //i為json數組中的第i個子json對象

③ 如何在Ant里運行Groovy腳本

Call 命令\r\n從一個批處理程序調用另一個批處理程序,並且不終止父批處理程序。call 命令接受用作調用目標的標簽。如果在腳本或批處理文件外使用 Call,它將不會在命令行起作用。\r\n語法\r\ncall [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]\r\n參數\r\n[Drive:}[Path] FileName \r\n指定要調用的批處理程序的位置和名稱。filename 參數必須具有 .bat 或 .cmd 擴展名。\r\n\r\n\r\n如下:\r\n--------\r\ncd c:\aa \r\nant build 保存為1.bat\r\n-------------- \r\ncd ..\bb \r\nant test.db1 保存為2.bat\r\n-----------\r\ncd ..\cc \r\nant test.db2 保存為3.bat\r\n----------------\r\n\r\n\r\n\r\ncls \r\necho on Create a Test DB start.... \r\n\r\ncall 1.bat\r\ncall 2.bat\r\ncall 3.bat\r\n\r\necho on Create a Test DB finish....

④ 性能測試groovy腳本怎麼調用參數

...
public static NVPair[] params = []

public static List<String> lineList
public def param
public def lineNumber = 0
@BeforeProcess
public static void...
...
request = new HTTPRequest()
lineList = new File("./resources/param.txt").readLines("UTF-8") //參數化數組存放路徑
在腳本中需要使用參數化替代的位置使用param代替,取數方式根據需要採取順序、隨機、唯一等。

⑤ java程序員為什麼使用Groovy

Groovy是一門基於JVM的腳本語言。它在兼容Java語法的同時,借鑒了Ruby、Python等語言的特性,有自己一套簡潔而靈活的語法。同時,運行在JVM上也意味著它也可以使用Java語言編寫的庫。這兩點結合,讓Groovy極其適合編寫Java代碼的測試腳本。

選擇Groovy作為測試腳本的語言的原因:

  • Groovy基於JVM,這使我能夠調用產品的Java代碼,也能夠調用Java標准庫里的代碼。除些之外,還可以通過Maven或Gradle使用大量的第三方Java庫。

  • Groovy是動態語言,擴展了Java的容器類,提供了完善的函數式編程和元編程支持。這讓我們可以寫出簡潔而富有表現力的代碼。

  • Groovy提供了大量的語法糖。與Java自身繁冗的代碼相比,這些語法糖大大節約了我們編寫腳本的時間,減少了我的腳本的代碼量。

然而,Groovy在帶來上述三個優點的同時,也會帶來有相應的缺點:

  • 效率問題。Groovy作為運行在JVM上的動態語言,運行效率是低於Java的。雖然可以用@CompileStatic註解來靜態編譯一些類以提高效率,但這樣又會失去Groovy的一些動態語言的特性。

  • 語法過於靈活,運用不當會降低可讀性與可維護性。Groovy支持元編程特性,可以在運行時動態添加方法。這一點自然可以簡化代碼,但也有很大的可能會降低可維護性。函數式編程與大量的語法糖會讓不熟悉Groovy的人讀起來一頭霧水,反而降低了可讀性。

⑥ 什麼是 Groovy

● 是一個基於 Java虛擬機的敏捷 動態語言。 ● 構建在強大的Java語言之上 並 添加了從Python,Ruby和Smalltalk等語言中學到的 諸多特徵。 ●為Java開發者提供了 現代最流行的編程語言特性,而且學習成本很低(幾乎為零)。 ● 支持DSL(Domain Specific Languages領域定義語言)和其它簡潔的語法,讓你的代碼變得易於閱讀和維護。 ● Groovy擁有處理原生類型,面向對象以及一個Ant DSL,使得創建Shell Scripts變的非常簡單。 ● 在開發Web,GUI,資料庫或控制台程序時 通過 減少框架性代碼 大大提高了開發者的效率。 ● 支持單元測試和模擬(對象),可以 簡化測試。 ● 無縫集成 所有已經存在的 Java對象和類庫。 ● 直接編譯成Java位元組碼,這樣可以在任何使用Java的地方 使用Groovy。 Groovy 的一個好處是,它的語法與 Java 語言的語法很相似。雖然 Groovy 的語法源於 Smalltalk 和 Ruby 這類語言的理念,但是可以將它想像成 Java 語言的一種更加簡單、表達能力更強的變體。(在這點上,Ruby 與 Groovy 不同,因為它的語法與 Java 語法差異很大。) Groovy 快捷方式 開始使用 Groovy 時,您會發現它使日常的編程活動變得快了許多。完成本教程之後,您會了解更多的 Groovy 語法快捷方式。不過現在只需知道以下這些要點: Groovy 的鬆散的 Java 語法允許省略分號和修改符。 除非另行指定,Groovy 的所有內容都為 public。 Groovy 允許定義簡單腳本,同時無需定義正規的class 對象。 Groovy 在普通的常用 Java 對象上增加了一些獨特的方法和快捷方式,使得它們更容易使用。 Groovy 語法還允許省略變數類型。 Groovy 的新增特性 雖然Groovy 允許省略 Java 語法中的一些元素,但也增加了一些新特性,例如本地集合、內置的正則表達式和閉包。在標準的 Java 代碼中,如果想要創建一個項列表,首先要導入<code>java.util.ArrayList</code>,然後程序化地初始化 <code>ArrayList</code> 實例,然後 再向實例中添加項。在 Groovy 中,列表和映射都內置在語法中 — 無需導入任何內容。正則表達式也不需要額外的導入或對象;它們可以通過特殊的 Groovy 語法來創建。 關於閉包 對於任何 Java 開發人員來說,閉包都是一個令人興奮的新技巧。這些神奇的構造將會包含在未來的 Java 發行版(很可能是 Java 7)中,成為正式的 Java 語法,但現在已經可以在 Groovy 中使用了。可以將閉包 想像為一個代碼塊,可以現在定義,以後再執行。可以使用這些強大的構造做許多漂亮的事,不過最著名的是簡化迭代。使用 Groovy 之後,就有可能再也不需要編寫Iterator 實例了。 動態的 Groovy 從技術上講,Groovy 可能是您最近聽說過的類型最鬆散的動態語言之一。從這個角度講,Groovy 與 Java 語言的區別很大,Java 語言是一種固定類型語言。在 Groovy 中,類型是可選的,所以您不必輸入String myStr = "Hello"; 來聲明 String 變數,可以使用def myStr = "Hello";(分號可有可無)。 除此之外,Groovy 代碼還能在運行時輕松地改變自己。這實際上意味著,能夠在運行時輕松地為對象指定新方法和屬性。這一編程領域稱為元編程,Groovy 能夠很好地支持這種編程方式。在學習本教程的過程中,您將了解到關於 Groovy 的動態性質的更多內容。現在惟一要補充的是,您會驚訝地發現,在 Groovy 會使操作 XML 或普通的 java.io.File 實例變得非常輕松。 一體兩面 用Groovy 編寫的任何內容都可以編譯成標準的 Java 類文件並在 Java 代碼中重用。類似地,用標准 Java 代碼編寫的內容也可以在 Groovy 中重用。所以,可以輕易地使用 Groovy 為 Java 代碼編寫單元測試。而且,如果用 Groovy 編寫一個方便的小工具,那麼也可以在 Java 程序中使用這個小工具。 Groovy是用Java實現的開源腳本語言並且和它聯系緊密.它需要JDK 1.4. Groovy向Java添加了許多Ruby和Python腳本語言的特性. Groovy的特性包括動態類型(dynamic typing), 閉包(closures),簡單對象導航( easy object navigation)和更加簡潔的Lists和Maps語法. Groovy是由James Strachan和Bob McWhirter創造的. James還參與了許多其他開源項目的開發,其中包括Jelly, dom4j, Jaxen, Betwixt和Maven. Bob是Jaxen和Drools (一個開源的面向對象的JAVA規則引擎) 的創始人. 目前最新穩定版為Groovy1.8。

⑦ 在java中使用groovy怎麼搞

一種基於Java虛擬機的動態語言,可以和java無縫集成,正是這個特性,很多時候把二者同時使用,把groovy作為java的有效補充。對於Java程序員來說,學習成本幾乎為零。同時支持DSL和其他簡介的語法(例如閉包),使代碼便於閱讀。可以用groovy的動態特性來做規則引擎,在DB中維護腳本,業務變化的時候讓應用系統動態載入。

如果引入groovy在java工程中?

這個很簡單,不需要做別的事情,僅僅把groovy的二方包加入到pom文件中即可。例如:

<dependency>

<groupId>org.codehaus.groovy</groupId>

<artifactId>groovy-all</artifactId>

<version> 1.8 . 3 </version>

</dependency>

java和groovy混合使用的方法有幾種?

1、 靜態編譯 ,在java工程中直接寫groovy的文件,然後可以在groovy的文件中引用java工程的類,這種方式能夠有效的利用groovy自身的語言特性,例如閉包;

2、通過 groovyShell 類直接執行腳本,例如:

package groovy_dsl.shell;

import groovy.lang.Binding;

import groovy.lang.GroovyShell;

public class GroovyShellEx {

public static void main(String[] args) {

Binding bind = new Binding();

bind.setVariable( "name" , "iamzhongyong" );

bind.setVariable( "age" , "25" );

GroovyShell shell = new GroovyShell(bind);

Object obj = shell.evaluate( "str = name+age;return str" );

System.out.println(obj);

}
}

3、通過 groovyScriptEngine 執行文件或者腳本,例如:

package groovy_dsl.script;

import groovy.util.GroovyScriptEngine;

public class ScriptEngine {

public static void main(String[] args) throws Exception {

GroovyScriptEngine engine = new GroovyScriptEngine( "" );

Object obj = engine.run( "src/main/java/groovy_dsl/script/script_test.groovy" , "iamzhongyong" );

System.out.println(obj);

}
}

4、通過 GroovyClassLoader 來執行,例如:

package groovy_dsl.classloader;

import groovy.lang.GroovyClassLoader;

import groovy.lang.GroovyObject;

import java.io.File;

import java.io.IOException;

public class GroovyClassLoaderEx {

public static void main(String[] args) throws Exception, IOException {

GroovyClassLoader loader = new GroovyClassLoader();

for ( int i= 0 ;i< 100 ;i++){

Class<?> clazz = loader.parseClass( new File( "src/main/java/groovy_dsl/classloader/UserDO.groovy" ));

GroovyObject clazzObj = (GroovyObject)clazz.newInstance();

clazzObj.invokeMethod( "setName" , "iamzhongyong" );

clazzObj.invokeMethod( "setSex" , "Boy" );

clazzObj.invokeMethod( "setAge" , "26" );

System.out.println(clazzObj.invokeMethod( "getAllInfo" , null ));

}

}
}

使用groovy尤其需要主要的問題?

通過看groovy的創建類的地方,就能發現,每次執行的時候,都會新生成一個class文件,這樣就會導致JVM的perm區持續增長,進而導致FullGCc問題,解決辦法很簡單,就是腳本文件變化了之後才去創建文件,之前從緩存中獲取即可。

groovy中的源碼如下:

return parseClass(text, "script" + System.currentTimeMillis() + Math.abs(text.hashCode()) + ".groovy" );

這個是增加緩存的代碼:

GroovyClassLoader groovyClassLoader = new GroovyClassLoader(GroovyScriptExecute. class .getClassLoader());

Class<?> groovyClass = null ;

String classKey = String.valueOf(scriptClass.hashCode());

//先從緩存裡面去Class文件

if (GroovyScriptClassCache.newInstance().containsKey(classKey)){

groovyClass = GroovyScriptClassCache.newInstance().getClassByKey(classKey);
} else {

groovyClass = groovyClassLoader.parseClass(scriptClass);

GroovyScriptClassCache.newInstance().putClass(classKey, groovyClass);
}

GroovyObject go = (GroovyObject)groovyClass.newInstance();

下面這個是緩存的單例類,貼一下:
public class GroovyScriptClassCache {

private static final Map<String /*class文件的描述*/ ,Class<?>> GROOVY_SCRIPT_CLASS_CACHE = new HashMap<String,Class<?>>();

private GroovyScriptClassCache(){}

private static GroovyScriptClassCache instance = new GroovyScriptClassCache();

public static GroovyScriptClassCache newInstance(){

return instance;

}

public Class<?> getClassByKey(String key){

return GROOVY_SCRIPT_CLASS_CACHE.get(key);

}

public void putClass(String key,Class<?> clazz){

GROOVY_SCRIPT_CLASS_CACHE.put(key, clazz);

}

public boolean containsKey(String key){

return GROOVY_SCRIPT_CLASS_CACHE.containsKey(key);

}
}

為啥要每次new一個GroovyClassLoader,而不是所有的腳本持有一個?

因為如果腳本重新載入了,這時候就會有新老兩個class文件,如果通過一個classloader持有的話,這樣在GC掃描的時候,會認為老的類還在存活,導致回收不掉,所以每次new一個就能解決這個問題了。

注意CodeCache的設置大小

對於大量使用Groovy的應用,尤其是Groovy腳本還會經常更新的應用,由於這些Groovy腳本在執行了很多次後都會被JVM編譯為native進行優化,會占據一些CodeCache空間,而如果這樣的腳本很多的話,可能會導致CodeCache被用滿,而CodeCache一旦被用滿,JVM的Compiler就會被禁用,那性能下降的就不是一點點了。

Code Cache用滿一方面是因為空間可能不夠用,另一方面是Code Cache是不會回收的,所以會累積的越來越多(其實在不採用groovy這種動態更新/裝載class的情況下的話,是不會太多的),所以解法一可以是增大code cache的size,可通過在啟動參數上增加-XX:ReservedCodeCacheSize=256m(Oracle JVM Team那邊也是推薦把code cache調大的),二是啟用code cache的回收機制(關於Code Cache flushing的具體策略請參見此文),可通過在啟動參數上增加:-XX:+UseCodeCacheFlushing來啟用。

⑧ 如何從Groovy腳本輸出重定向

1. 嘗試綁定public void exec(File file, OutputStream output) throws Exception {
Binding binding = new Binding()
binding.setProperty("out", output)
GroovyShell shell = new GroovyShell(binding);
shell.evaluate(file);
}

Groovy腳本def name='World'
out << "Hello $name!"

2. 使用SystemOutputInterceptor類。你就可以開始攔截腳本之前評估和輸出後停止。
3. 正是您需要的。
4. 我懷疑你可以通過覆蓋做到這一點相當不錯的println方法在你的了GroovyShell「在Groovy控制台以下工作:StringBuilder b = new StringBuilder()
this.metaClass.println = {
b.append(it)
System.out.println it
}
println "Hello, world!"
System.out.println b.toString()

輸出:Hello, world!
Hello, world!

5. javax.script.ScriptEngine中怎麼樣?你可以指定它的作家。ScriptEngine engine = new ScriptEngineManager().getEngineByName("Groovy");
PrintWriter writer = new PrintWriter(new StringWriter());
engine.getContext().setWriter(writer);
engine.getContext().setErrorWriter(writer);
engine.eval("println 'HELLO'")

⑨ 如何使用Elasticsearch groovy script腳本更新數據

Python

script.disable_dynamic: false

關於elasticsearch script的文章,總是會沒完沒了的修改

ES支持更新,但是更新的方式是通過一個提供的腳本進行的。ES的做法是,通過
index找到相應的存放記錄的節點,然後執行腳本,執行完之後,返回新的索引。實際上執行的是一個get和reindex的過程,在這個過程中,通過
versioning來控制沒有其它的更新操作(這個功能是0.19後可用的)。具體實現的原理應該和elasticsearch
Versioning相關。

⑩ Groovy怎麼調用本地命令.比如我要在Groovy腳本中調用cmd命令

Androidstudio使用groovyconsole命令的具體方法如下:進行打開Androidstudio的軟體,進入到界面中,進行點擊菜單中的「tools」的選項。就會彈出了一個下拉的菜單的選項,進行選擇下拉的菜單中的「Groovyconsole」的選項。在代碼的窗口當中就會彈出了一個窗口,進行選擇一個為「app」的選項。然後就會在底部的位置中進行彈出了一個Groovyconsole的命令的窗口。在Groovyconsole的命令的窗口中進行輸入一條命令」system.out.println("小蝦")「,然後進行點擊左側位置中的運行按鈕。這樣就會彈出了執行的命令的結果中內容,要關閉Groovyconsole的命令的窗口,進行點擊」關閉「按鈕。就會彈出了一個process」Groovyconsole「isRunning命令窗口確認框,進行點擊discounect的按鈕。

熱點內容
ceph緩存變慢 發布:2025-02-07 11:46:52 瀏覽:923
python做什麼用的 發布:2025-02-07 11:46:46 瀏覽:563
o2o與資料庫設計 發布:2025-02-07 11:35:27 瀏覽:928
ftp伺服器推薦 發布:2025-02-07 11:35:16 瀏覽:700
吉利星瑞豪華加6000是有哪些配置 發布:2025-02-07 11:25:18 瀏覽:971
李字加工編程 發布:2025-02-07 11:23:50 瀏覽:881
linux安全運維 發布:2025-02-07 11:14:19 瀏覽:737
阿里雲集群伺服器 發布:2025-02-07 11:12:38 瀏覽:453
如何選擇家庭最佳配置 發布:2025-02-07 11:06:50 瀏覽:89
javatomcat伺服器搭建伺服器 發布:2025-02-07 10:55:22 瀏覽:624