LoginSignup
2
1

More than 5 years have passed since last update.

TestLink の XML-RPC を拡張する

Posted at

最新のTestLink は REST API があるらしいですが、今回は XML-RPC の話を。

前準備

XML-RPC で外部からアクセスするにはまず、API アクセスキー を取得する必要がありますので
config.inc.php 内の $tlCfg->api->enabled を TRUE にします。

その後で TestLink の アカウント設定 にアクセスすると API アクセスキー を生成するボタンが
表示されているので、押します。すると、API アクセスキーが表示されますので、それをメモっときます。

ruby で XML-RPC

次に、XML-RPCでアクセスするために、コードを書きます。
ruby だと 以下のような感じでアクセスできます。もし、他言語で書きたい場合、testlink/lib/api/sample_clients 下に java や php のサンプルがありますので、参考にしてもいいかも。

test.rb
require 'xmlrpc/client'

SERVER_URL = "http://localhost/testlink/lib/api/xmlrpc.php"
# localhost は 自身のサーバーURL
# xmlrpcのURLはTestLinkのバージョンによって異なります。
# 1.9.4 では上記のURLでアクセスできますが
# 1.9.9 では testlink/lib/api/xmlrpc/v1/xmlrpc.php で アクセス可能です。

sever = XMLRPC::Client.new2(SERVER_URL)
server.http_header_extra = { "accept-encoding" => "identity" }
puts server.call("tl.sayHello")
# ここでは使っていませんが、呼び出すAPIによっては、APIキーが必要になります。
# その場合は {"devKey" => メモしたAPIキー} を 第二引数として渡します
# 例) server.call ( "tl.XXXXXXXXX", {"devKey" => "ほげほげ"} )

testlink/lib/api/xmlrpc.class.php の内容を見れば、どのようなAPI があるか推測できますので、色々試してみましょう。

拡張XML-RPC

testlink/lib/api/sample_extended_server/extended_server.php を参考にXML-RPCを拡張できます。

extended_server.php
require_once('lib/api/xmlrpc.class.php')

class ExtendedXMLRPCServer extends TestlinkXMLRPCServer {
  public function __construct() {
    $callbacks = array(
      'tl.getRecordSet' => 'this:getRecordSet'
    );
  }

  public function getRecordSet($args)
  {
    $rs = $this->dbObj->get_recordset($args['sql']);
    $msg = $this->dbObj->db->ErrorMsg();
    if ($msg)
      return $msg;
    else
      return $rs;
  }
}

このファイルをtestlinkのルートディレクトリに置きます。そして外部からXML-RPCでアクセス。

test.rb
sql = "select * from nodes_hierarchy"
p server.call ( "tl.getRecordSet", { "sql" => sql } )

TestLinkのバージョンによって、データの取得方法等が違うかったりするので、
自身が使っているTestLink のバージョンのソースを見て、理解して使っていただくのが
一番かとおもいます。

いつかは、カスタムレポートの話も書けたらいいなぁ。。。

それでは!!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1