我爱编程

Tigase-dev-7: Tests

2018-06-21  本文已影响6人  Share猿

小猿“思前享后”为大家分享优质内容!————Share猿

7. Tests

7.1. Tests

  测试是Tigase服务器开发过程中非常重要的一部分。
  每个版本都要经过完全自动化的测试过程。所有服务器功能都被考虑只有当它们通过测试周期时才会实现。Tigase测试套件适用于我们所有的自动测试,允许定义不同的测试场景。
  在数据库中没有对测试进行调整。所有的数据库都以标准的方式安装使用默认设置运行。在测试周期开始之前,数据库被清除。
  对于Tigase的配置文件也不需要进行任何修改。所有的测试在配置向导生成的默认配置上执行。
  服务器在所有受支持的环境中进行测试:

7.1.1.功能测试

  基本检查,看看是否所有的函数都正确工作。这些测试每次都执行代码被发送到源存储库。


7.1.2. Performance Tests(性能测试)

  检查这个函数是否执行得足够好。


7.1.3.稳定性测试

  检查该函数是否在长期运行中表现良好。它必须处理上百个在几个小时的服务器运行中请求第二个请求。


7.2. Tigase测试套件

  Tigase测试套件是一个允许您运行测试的引擎。本质上,它只是执行TestCase实现。测试可能依赖于其他测试,这意味着它们将被执行特定的顺序。例如,身份验证测试是在流公开测试之后执行的在网络套接字连接测试后执行转。
  每个TestCase实现都有自己的特定参数集。有一组可以应用于任何TestCase的通用参数。作为一个共同的例子您可以使用-loop=10,指定TestCase必须执行10次。测试特定的参数可能是-用户名=测试人员,它可以设置用户名验证测试。
  引擎是非常通用的并且允许你编写任何类型的测试但是对于Tigase项目当前的TestCase实现模仿XMPP客户机,并被设计用来测试XMPP服务器。

7.2.1. 运行Tigase测试套件(TTS)

  要获得TTS,您首先需要克隆存储库

git clone https://repository.tigase.org/git/tigase-testsuite.git

  克隆完成后,导航到TTS根目录并使用maven编译:

mvn clean install

  Maven将编译TTS并将jar放在必要的位置。从同一个目录,你可以使用以下命令开始运行TTS:

./scripts/all-tests-runner.sh

  您应该看到以下内容,它概述了定制测试运行的可能选项

Run selected or all tests for Tigase server
----
Author: Artur Hefczyc <artur_hefczyc@vnu.co.uk>
Version: 2.0.0
----
--help|-h This help message
--func [mysql|pgsql|derby|mssql|mongodb]
Run all functional tests for a single database configuration
--lmem [mysql|pgsql|derby|mssql|mongodb]
Run low memory tests for a single database configuration
--perf [mysql|pgsql|derby|mssql|mongodb]
Run all performance tests for a single database configuration
--stab [mysql|pgsql|derby|mssql|mongodb]
Run all stability tests for a single database
configuration
--func-all Run all functional tests for all database
configurations
--lmem-all Run low memory tests for all database
configurations
--perf-all Run all performance tests for all database
configurations
--stab-all Run all stability tests for all database
configurations
--all-tests Run all functionality and performance tests for
database configurations
--single test_file.cot
--other script_file.xmpt
----
Special parameters only at the beginning of the parameters list
--debug|-d Turns on debug mode
--skip-db-relad|-no-db Turns off reloading database
--skip-server|-no-serv Turns off Tigase server start
--small-mem|-sm Run in small memory mode
-----------
Other possible parameters are in following order:
[server-dir] [server-ip]

定制Tigase测试套件
您可以从上面的命令行运行测试,但是您可以创建和编辑/scripts/tests-runner-settings.sh。用于安装您的Tigase安装,避免使用长时间这个模板的复杂命令显示:

#!/bin/bash
func_rep="func-rep.html"
perf_rep="perf-rep.html"
db_name="tigasetest"
db_user="tigase"
db_pass="tigase"
root_user="root"
root_pass="root"
TESTS=("derby" "mysql" "pgsql" "mssql")
IPS=("127.0.0.1" "127.0.0.1" "127.0.0.1" "127.0.0.1")
server_timeout=10
server_dir="/home/tigase/tigase-server"
database="derby"
#database="mysql"
server_ip="127.0.0.1"
MS_MEM=100
MX_MEM=1000
SMALL_MS_MEM=10
SMALL_MX_MEM=50

  这将允许您通过多次运行TTS来维护相同的设置。请参见下学习脚本语言如何工作的部分,以及如何创建和运行您的自定义测试。

7.3.测试套件脚本语言

  测试套件包含脚本语言,允许您将测试用例合并到一个测试中场景。在最低的层次上,语言的设计是为了让你描述通过设置测试参数、测试注释、标识等进行测试。
  让我们看一下示例测试描述。

Short name@test-id-1;test-id-2: Short description  for the test  case
{
-loop = 10
-user-name = Frank
# This is a comment which is ignored
}
>> Long, detailed description of the test  case <<

  所有元素的意义:

  1. Short name你想要什么描述性的名字。它不需要是唯一的,只是一些东西
    它告诉你这个测试是关于什么的。@是短名称和测试之间的分隔符id。
    2.** test-id-1;test-id-2**是一个分号分隔的测试用例id。测试用例被执行以列出的顺序。在那里列出它们意味着test-id-2依赖于test-id-1。通常你不需要列出所有的依赖项因为所有的强制依赖项自动包含。也就是说,如果你有一个认证测试用例自动添加网络套接字连接和流开启测试。有时但是,有一些依赖项是可选的或多个强制依赖项你需要选择要执行的那个。一个很好的例子是认证测试用例。有很多认证测试:纯认证,PLAIN-AUTH, SASL-DIGESTMD5, SASL-PLAIN, DIGEST-AUTH,它们都是大多数其他测试的强制要求比如 tests,roster,到场等等。其中一个身份验证测试是默认的依赖关系,但是如果您将使用不同的身份验证,而不是默认的身份验证。
    3.:是测试用例id列表和简短测试描述之间的分隔符。
  2. Short test description放置在:-冒号和开-花括号之间。这是通常很简短,单行测试描述。
  3. { }花括号包含所有的测试参数,比如测试的次数在一个单独的线程中执行或运行测试,用户名,网络的主机IP地址连接和许多其他人。
  4. <<内,测试描述。
      至于在开花括号和关闭括号之间的测试脚本你可以把所有的测试放在一起你希望的情况下参数。它的格式是:

-parameter-name = value

  参数名称总是以-。注意,有些参数不需要任何值。他们可以在没有任何价值的情况下独立存在:

-debug-on-error

  如果你把yes或true作为值,就会模仿。
  脚本语言还包括对可以分配任何值的变量的支持以后多次使用。你给变量赋值的方式和你分配给它的方式是一样的
参数:

$(variable-name) = value

  变量名必须总是用括号括起来(),然后以$开头。
  该值可以在双引号内括起来,“或者双引号可以省略。如果这是一个简单的字符串,比如数字或字符串,只包含数字、字母、下划线还有连字符——然后你可以省略双引号,否则你必须附上它的值。
  测试用例描述可以嵌套在其他测试用例描述中。嵌套的测试用例描述继承了来自外部测试用例描述的参数和变量。

7.4.为插件编写测试

 您可以在一个简单的文本文件中编写测试,该文件是在测试套件运行时加载的。
  您只需要指定应该发送给服务器的内容以及应该预期的响应从服务器。不需要编写Java代码并重新编译整个测试套件以进行新的测试。它意味着新的测试用例可以轻松快速地写出来,希望更多对服务器进行详细的测试。
  它是如何运作的
  让我们使用XEP-0049(http://www.xmpp.org/extensions/xep-0049.html)私有XML存储。看在规范中我们可以看到第一个例子:
  例1。客户端存储私有数据
客户端:

<iq type="set" id="1001">
<query xmlns="jabber:iq:private">
<exodus xmlns="exodus:prefs">
<defaultnick>Hamlet</defaultnick>
</exodus>
</query>
</iq>

服务端:

<iq type="result" id="1001"/>

  这对于第一个简单的测试来说已经足够了。我必须创建文本文件JabberIqPrivate。测试看是这样的:

send: {
<iq type="set" id="1001">
<query xmlns="jabber:iq:private">
<exodus xmlns="exodus:prefs">
<defaultnick>Hamlet</defaultnick>
</exodus>
</query>
</iq>
}
expect: {
<iq type="result" id="1001"/>
}

  现在我可以执行测试了:

testsuite $ ./scripts/all-tests-runner.sh --single JabberIqPrivate.test
Tigase server home directory: ../server
Version: 2.8.5-b422
Database: xmldb
Server IP: 127.0.0.1
Extra parameters: JabberIqPrivate.test
Starting Tigase:
Tigase running pid=6751
Running: 2.8.5-b422-xmldb test, IP 127.0.0.1...
Script name: scripts/single-xmpp-test.xmpt
Common test: Common test ... failure!
FAILURE, (Received result doesnt match expected result.,
Expected one of: [<iq id="1001" type="result"/>],
received:
[<iq id="1001" type="error">
<query xmlns="jabber:iq:private">
<exodus xmlns="exodus:prefs">
<defaultnick>Hamlet</defaultnick>
</exodus>
</query>
<error type="cancel">
<feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
<text xml:lang="en" xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">
Feature not supported yet.</text>
</error>
</iq>]),
Total: 100ms
Test time: 00:00:02
Shutting down Tigase: 6751

  如果我刚开始处理这个XEP并且服务器端没有代码,结果是虽然这不是我们想要的,但这是完全意料之中的。在工作了一段时间后服务器代码,我可以再次执行测试:

testsuite $ ./scripts/all-tests-runner.sh --single JabberIqPrivate.test
Tigase server home directory: ../server
Version: 2.8.5-b422
Database: xmldb
Server IP: 127.0.0.1
Extra parameters: JabberIqPrivate.test
Starting Tigase:
Tigase running pid=6984
Running: 2.8.5-b422-xmldb test, IP 127.0.0.1...
Script name: scripts/single-xmpp-test.xmpt
Common test: Common test ... success, Total: 40ms
Test time: 00:00:01
Shutting down Tigase: 6984

  这是它。我们想要的结果是简单而有效的。我们可以重复很多次在长期的试验中,这一点尤其重要。每次我们更改服务器代码我们可以重新运行测试,以确保我们从服务器得到正确的响应。
  你可以看一下当前的构建,有了更完整的测试用例,JabberIqPrivate文件。(https://projects.tigase.org/projects/tigase-
testsuite/repository/revisions/master/entry/tests/data/JabberIqPrivate.cot)
  现在我的服务器测试不再过时了。当然,并不是所有的案例都这么简单。一些XEPs要求在节被发送之前进行计算,或者比较收到的结果。一个好的
这个例子的例子是用户认证,比如SASL,甚至是非SASL。但是,有许多可以通过简单测试来解决的案例:roster 管理,隐私列表管理,vCard,私有数据存储等等

7.5.测试用例参数描述

  有一长串参数可以应用于任何测试用例。这是对所有可能的参数,可以用来构建测试场景。

7.5.1.测试报告配置

  有测试报告参数,必须在主脚本文件中设置,以便生成来自测试的HTML报告。这些参数没有效果是在测试用例中设置的描述。

5: "Test name", "Result", "Test time", "Description" [, "History" ]
7: "Test name", "Result", "Total time", "OK", "Average", "Description" [, "History" ]
  1. -title= 报告页面的标题“这个参数设置了被放置的测试报告标题在HTML。页面在 <title/>元素中,以及在第一个页面标题中。
7.5.2.基本的测试参数

  这些参数可以设置在每个测试用例的基础上,但是通常它们是在主脚本文件中设置的将它们应用到所有的测试用例中。

7.5.3. 测试用例的参数

  测试参数通常在每个测试用例的基础上设置,并且只应用于它们的测试设置和所有继承的测试。一些参数只应用于遗传测试用例。请查看下面的描述以找到更多的细节。

参考文章:
【1】Tigase Development Guide

扫描以下公众号关注小猿↓↓↓↓↓↓↓↓

image

更多资讯请在简书、微博、今日头条、掘金、CSDN都可以通过搜索“Share猿”找到小猿哦!!!

上一篇下一篇

猜你喜欢

热点阅读