0

我正在研究一个框架,我必须得到一些正则表达式,但在这一点上被卡住了。

Execution start time 09/13/2013 02:43:55 pm

[Case-Url] - www.google.com


[Req-URL ] - www.qtp.com


***Passed***
__________________________________________________________

[Case-Url] - www.yahoo.com


[Req-URL ] - www.msn.com


***Passed***

___________________________________________________________

[Case-Url] - www.google.com


[Req-URL ] - www.qtp.com


***Failed***

在上面的测试结果中,我必须获取 Passed 和 Failed 测试用例的 [Case-URL] 和 [Req-URL] 。如何仅获取传递结果的 Case-URL 和 Req-URL?

4

3 回答 3

1

正则表达式在这里不太合适。相反,将您的输入拆分为您单独解析的块:

use strict; use warnings; use feature 'say';

<DATA>; # discard first line;
# set record separator
local $/ = "__________________________________________________________\n";
while (my $chunk = <DATA>) {
  my ($case, $req, $statusline) = split /\n/, $chunk;
  # possibly parse $case and $req further here
  if ($statusline =~ /Passed/) {
    say for $case, $req;
  }
}

__DATA__
Execution start time 09/13/2013 02:43:55 pm
[Case-Url] - www.google.com
[Req-URL ] - www.qtp.com
***Passed***
__________________________________________________________
[Case-Url] - www.yahoo.com
[Req-URL ] - www.msn.com
***Passed***
___________________________________________________________
[Case-Url] - www.google.com
[Req-URL ] - www.qtp.com
***Failed***

输出将是:

[Case-Url] - www.google.com
[Req-URL ] - www.qtp.com
[Case-Url] - www.yahoo.com
[Req-URL ] - www.msn.com
于 2013-09-13T21:01:51.627 回答
0

这将提取失败的案例。然后,您可以轻松地从中提取 Case-Url 和 Req- $fifo[0]Url $fifo[3]。对于已通过的案例也可以这样做。

#!/usr/bin/perl 

use strict;
use warnings;

my @fifo=('') x 7; # Initialize an empty array with size = 7 (Message Block Size)
open(FILE,"temp.txt");

while(<FILE>)
{
    push(@fifo,$_);       # Add element to the end of array making its size 6  
    shift @fifo;          # Remove first element reverting its size back to 5  
    if($fifo[6]=~/Failed/) # Check if 7th line of block has Failed in it 
    {
        print @fifo;
    }
}
close(FILE);
于 2013-09-13T21:23:52.477 回答
0

除了这个特定应用程序的正则表达式的适用性之外,这里是一个将捕获传递的 URL 的正则表达式:

\([Case-Url\] - .*)\n+(\[Req-URL \] - (.*)\n+\*{3}Passed\*{3}

我无法在 regexplanet 的 Perl 模式下完成这项工作,但您可以在 Rubular此处看到它的运行情况

于 2013-09-13T21:24:58.073 回答