Rubyの魔神 このページをアンテナに追加 RSSフィード

   「Ruby」は宝石の魔神のイメージ(The Jinn of the Ruby)
   [VB] [VB6] [backlog] [個人メモ] [仕事メモ] [アイデア] [TstLink] [ピジョン・ブラッド] [開発] [CE] [LTSA] [自動化] [Qt] [TOOLS]
   [RubyForge] [RAA] [Forge]   [機能別索引] [逆引きRuby] [マニュアル] [るびま] [標準ライブラリ] [るりまサーチ] [Try! Ruby] [PRaggerまとめ]
   [Rubyコーディング規約] [プログラミングのオキテ] [Rubyist SNS] [TOOLBIS]
   [RubyネットワークProg] [druby] [コードなにがし] [RDocテンプレ] [Ruby/Tkサンプル]
   [WAVE] [Xperia] [github] [twitterなど] [Android] [Java] [EA]

2007-11-17

テスト管理ツールTestLinkでWordなどで書かれたテストケースを使うためのツールpdfPageList2testcase.rb

18:22 | テスト管理ツールTestLinkでWordなどで書かれたテストケースを使うためのツールpdfPageList2testcase.rb - Rubyの魔神 を含むブックマーク はてなブックマーク - テスト管理ツールTestLinkでWordなどで書かれたテストケースを使うためのツールpdfPageList2testcase.rb - Rubyの魔神 テスト管理ツールTestLinkでWordなどで書かれたテストケースを使うためのツールpdfPageList2testcase.rb - Rubyの魔神 のブックマークコメント

動作環境:Windows

実行ファイルダウンロード:

http://testlinkjp.org/modules/mydownloads/singlefile.php?cid=1&lid=10

機能:テストケース名とページが書かれたCSVファイルを読み込んでTestLink用のテストケースに変換する

お勧め:日々大量のテストケースを実施し結果を集計している評価チームのリーダー


テスト管理ツールを導入する際に「これまで作ったテストケース」をどうするのかは問題だと思う。

今もWordで数万件くらいのテストケースがあり、これをテスト管理ツールのテストケースに書き直すのはそれだけで数人月かかり現実的ではない。

しかし導入できないとまた次の機種もWordでかかれてテスト管理ツールに乗らないという悪循環になる。

そこで「テスト内容は既存のテストケースを参照し、テスト結果はテスト管理ツールで管理」という方法を考えた。

具体的にはテスト管理ツールのテストケースから既存のテストケース(WordなりをPDF化したもの)のテスト内容を記載した「ページ」へリンクをはり、ブラウザでテスト内容を参照するという方法である。

f:id:garyo:20071117174935j:image

cf. http://d.hatena.ne.jp/garyo/20071116/1195182501

以下がソース

pdfPageList2testcace.rb

#! /usr/local/bin/ruby -Ks
# pdfpagelist2testcase
# pdfpagelist -> testcase converter
# 
# 2007/11/15 0.00 garyo release 


require 'csv'
require 'kconv'
require 'vr/vruby'
require '_frm_pdfpagelist2testcace.rb'

class TestCase
  attr_accessor :name,:summary,:steps,:expectedresults
  @name
  @summary
  @steps
  @expectedresults
  @xml
  def initialize(name,summary,steps,expectedresults)
    @name=Kconv.toutf8(name)
    @summary=Kconv.toutf8(summary)
    @steps=Kconv.toutf8(steps)
    @expectedresults=Kconv.toutf8(expectedresults)
  end
  def getXML
    @xml="<testcase name=\"#{name}\">"
    @xml=@xml+"<summary><![CDATA[\n#{summary}\n]]></summary>"
    @xml=@xml+"<steps><![CDATA[\n#{steps}\n]]></steps>"
    @xml=@xml+"<expectedresults><![CDATA[\n#{expectedresults}\n]]></expectedresults>\n"
    @xml=@xml+"</testcase>\n"
    @xml
  end
end

class TestSuite
  attr_accessor :name,:details,:testcase,:testsuite
  @name
  @details
  @testcase
  @testsuite
  @xml
  def initialize(name,details)
    @name=Kconv.toutf8(name)
    @details=Kconv.toutf8(details)
    @testcase=[]
    @testsuite=[]
  end
  def addTestCase(t)
    @testcase << t
  end
  def addTestSuite(t)
    @testsuite << t
  end
  def getXML
    @xml="<testsuite name=\"#{name}\"><details><![CDATA[\n#{details}\n]]></details>\n"
    @testcase.each{|s| @xml = @xml + s.getXML}
    @testsuite.each{|s| @xml = @xml + s.getXML}
    @xml=@xml + "</testsuite>\n"
    @xml
  end
end

class AllTestSuite
  attr_accessor :testsuite
  @testsuite
  def initialize(ts)
    @testsuite=ts
  end
  def getXML
    @xml="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
    @xml=@xml + @testsuite.getXML
    @xml
  end
end


class Pdfpagelist2testcase
  TestcaseTitle = 0
  TestcasePage = 1

  attr_accessor :pdfFileName

  def initialize
  end

  def initTestSuite(name,details)
    @testsuite=TestSuite.new(name,details)
  end

  def addTestcase(name,summary,steps,expectedresults)
      s=TestCase.new(name,summary,steps,expectedresults)
      @testsuite.addTestCase(s)
  end

  def readFile(infile)
    pdfpagelist = CSV.open(infile, 'r')
    pdfpagelist.each_with_index {|line, i|
      if /^#/ =~ line[0] then
        #commnet
      elsif /PDF file/ =~ line[0] then
        #PDF filename
        @pdfFileName = line[1]
      elsif  /Test Suite Name/ =~ line[0] then
        #Test Suite Name
        @testsuite.name = Kconv.toutf8(line[1])
      else
        #page data
        steps="<p><a href=\"#{@pdfFileName}#page=#{line[TestcasePage]}\" target=\"_blank\">#{line[TestcaseTitle]}</a></p>"
        addTestcase(line[TestcaseTitle],line[TestcaseTitle],steps,"")
      end
    }
  end

  def writeFile(outfile)
    f = File.open(outfile,"w")
    ats=AllTestSuite.new(@testsuite)
    f.puts ats.getXML
    f.close
  end

  def convCvs2Testcase(infile,outfile,testSuiteName)
    initTestSuite(testSuiteName,"")
    readFile(infile)
    writeFile(outfile)
  end
end


module Frm_form1
  def self_created
    
  end
  def open_clicked
    @edit1.text=openFilenameDialog([["all(*.*)", "*.*"]],0x1000,nil,nil)
  end

  def exit_clicked
    exit(0)
  end

  def doConvert_clicked
    button2_clicked
  end

  def button2_clicked
    if @edit1.text =="" then
      messageBox "Filename error","MSGBOX",0
    else
      cx=Pdfpagelist2testcase.new
      file = @edit1.text
      wrfile = File.dirname(file) + "/" + File.basename(file, ".*") + ".xml"
      cx.convCvs2Testcase(file,wrfile,"testSuiteName")
      messageBox "finish","MSGBOX",0
    end
  end
end

VRLocalScreen.start Frm_form1

_frm_pdfPageList2testcace.rb

## CAUTION!! ## This code was automagically ;-) created by FormDesigner.
# NEVER modify manualy -- otherwise, you'll have a terrible experience.

require 'vr/vruby'
require 'vr/vrcontrol'

module Frm_form1
  include VRMenuUseable if defined? VRMenuUseable

  def _form1_init
    self.caption = 'PDF Page List to Testcase(TestLink) Ver 0.00'
    self.move(324,379,500,210)
    #$_addControl(FDOpenDlg,'openDlg1',"openDlg1",16,240,24,24,1342177280)
    #$_ctn_openDlg1=[16,240,[["all(*.*)", "*.*"]],4096,nil,nil]
    @mainmenu1 = newMenu.set(
      [
        ["&File",[
          ["&Open", "open"],
          ["sep", "_vrmenusep", 2048],
          ["E&xit", "exit"]]
        ],
        ["&Tool",[
          ["&Convert", "doConvert"]]
        ]
      ]
    )
    setMenu(@mainmenu1,true)
    #$_ctn_mainmenu1=[96,224]
    addControl(VRButton,'button2',"Convert",152,112,152,32,1342177280)
    addControl(VRStatic,'static1',"PDF Page List FileName",8,24,256,24,1342177280)
    addControl(VREdit,'edit1',"",8,48,464,24,1342177408)
  end 

  def construct
    _form1_init
  end 

end 

#VRLocalScreen.start Frm_form1
トラックバック - http://ruby.g.hatena.ne.jp/garyo/20071117