最新の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 のサンプルがありますので、参考にしてもいいかも。
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を拡張できます。
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でアクセス。
sql = "select * from nodes_hierarchy"
p server.call ( "tl.getRecordSet", { "sql" => sql } )
TestLinkのバージョンによって、データの取得方法等が違うかったりするので、
自身が使っているTestLink のバージョンのソースを見て、理解して使っていただくのが
一番かとおもいます。
いつかは、カスタムレポートの話も書けたらいいなぁ。。。
それでは!!