2015-11-16 34 views
1

设置中同时有两个属性值我想测试中的GetWeather web服务如何使用Groovy从文本文件

http://www.webservicex.com/globalweather.asmx 

我有这个内容的文本文件: 蒙特利尔 加拿大 卡尔加里 加拿大

我的要求是:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webserviceX.NET"> 
     <soap:Header/> 
     <soap:Body> 
      <web:GetWeather> 
      <!--Optional:--> 
      <web:CityName>${#Project#City}</web:CityName> 
      <!--Optional:--> 
      <web:CountryName>${#Project#Country}</web:CountryName> 
      </web:GetWeather> 
     </soap:Body> 
    </soap:Envelope> 

我Groovy代码是:

def f = new File("c:\\temp\\Data.txt") 
def fr= new FileReader(f) 

def br = new BufferedReader(fr) 
def s = br.readLine() 
def x = br.readLine() 

while(s && x !=null) 
{ 
testRunner.testCase.setPropertyValue("City",s) 
testRunner.testCase.setPropertyValue("Country",x) 

testRunner.runTestStepByName("GetWeather - Request 1") 
s = br.readLine() 
x = br.readLine() 
} 

但我没有读取文件。 请任何帮助,谢谢

回答

2

Groovy简化了阅读文本文件的行。在你的情况下,由于创纪录的由两条线组成,试试这个:

def f = new File('c:\temp\Data.txt') 
def records = f.readLines().collate(2) 

records.each { 
    testRunner.testCase.setPropertyValue("City",it[0]) 
    testRunner.testCase.setPropertyValue("Country",it[1]) 

    testRunner.runTestStepByName("GetWeather - Request 1") 
} 

它是如何工作

让我们假设输入文件包含以下行:

New York 
USA 
Istanbul 
Turkey 

线1和2是城市和2号线和4号线是国家。 f.readLines()返回的文件内容的列表,这样的说法:

[ 
    'New York', 
    'USA', 
    'Istanbul', 
    'Turkey' 
] 

为了使数据更容易使用,我把它变成了城市和国家对的列表。这就是collate(2)做:

[ 
    ['New York', 'USA'], 
    ['Istanbul', 'Turkey]' 
] 

有了这个新的列表,each(Closure)用于通过对迭代。

records.each { 
    // it[0] is the city 
    // it[1] is the country 
} 
+0

谢谢你,它正在阅读txt文件,但如何阅读每一行,因为我有不同的城市和国家名称的多行。 – parisFoxparis

+0

不幸的是,我不明白你在问什么。我在我的答案中添加了一个解释。也许它会回答你的问题。 –

+0

现在我明白了,谢谢你的解释。这个对我有用 – parisFoxparis