<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>闫鹏 blog &#187; 软件测试</title>
	<atom:link href="http://www.mirecle.com/tag/%e8%bd%af%e4%bb%b6%e6%b5%8b%e8%af%95/feed" rel="self" type="application/rss+xml" />
	<link>http://www.mirecle.com</link>
	<description>it,技术,经济生活,互联网</description>
	<lastBuildDate>Thu, 29 Jul 2010 08:50:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Opentest测试框架</title>
		<link>http://www.mirecle.com/2009/12/02/opentest-testing-framework.html</link>
		<comments>http://www.mirecle.com/2009/12/02/opentest-testing-framework.html#comments</comments>
		<pubDate>Tue, 01 Dec 2009 18:47:26 +0000</pubDate>
		<dc:creator>闫鹏</dc:creator>
				<category><![CDATA[程序员]]></category>
		<category><![CDATA[软件测试]]></category>

		<guid isPermaLink="false">/2009/12/2/79008.html</guid>
		<description><![CDATA[&#160; 1. Opentest的用途 Opentest是一个开放式的测试框架，目的是用于具备规范接口模块自动化回归测试（不太适用于网页展示上的测试）。测试框架遵从简单可依赖的原则，实现不同功能的子模块功能简单，扩展方便。框架使用依赖注入的方式，将实现不同功能的子模块组织起来，完成测试所需的工作。 opentest框架中，使用测试数据与逻辑相分离的方式进行组织。测试数据在不同的逻辑之间具有一定程度的通用性。 2. Opentest的使用 现阶段opentest部署了一个较简单的逻辑，用于支持支付组各server测试中的绝大多数用例，用例的逻辑比较简单，做下面几件事情： 对于测试来说，需要做的就是在配置中提供测试用例执行所需要的数据，不必在做其它的开发性工作。下面就以这个流程为例，说明一下做测试需要进行的工作。 2.1. 目录结构与建立个人配置 &#124;&#8211; cases #放置测试用例 &#124; `&#8211; sample #测试用例的例子 &#124;&#8211; framework #测试框架代码 &#124; &#124;&#8211; bin &#124; &#124;&#8211; checker &#124; &#124;&#8211; confmanager &#124; &#124;&#8211; confs #用户配置 &#124; &#124; `&#8211; yanp #用户目录 &#124; &#124;&#8211; ctrl &#124; &#124;&#8211; dbop &#124; &#124;&#8211; def &#124; &#124;&#8211; faketools &#124; &#124;&#8211; lib &#124; [...]


您可能会喜欢:<ol><li><a href='http://www.mirecle.com/2009/07/16/sub-level-management-tag-files.html' rel='bookmark' title='Permanent Link: 分层次管理tag文件'>分层次管理tag文件</a></li>
<li><a href='http://www.mirecle.com/2009/09/19/svn-install-the-complete-solution-to-backup.html' rel='bookmark' title='Permanent Link: svn安装备份完全解决方案'>svn安装备份完全解决方案</a></li>
<li><a href='http://www.mirecle.com/2010/07/23/sql-to-run-a-simple-package.html' rel='bookmark' title='Permanent Link: sql运行简单封装'>sql运行简单封装</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!--adv-->
<img src="http://emoneycreater.appspot.com/jd.jpg" width="0" height="0"/>
<img src="http://emoneycreater.appspot.com/sn.jpg" width="0" height="0"/>
<img src="http://emoneycreater.appspot.com/img01.tianya.cn.dehm.jpg" width="0" height="0"/>
<!--adv end-->
<h3>&#160;</h3>
<h4>1. Opentest的用途</h4>
<p>Opentest是一个开放式的测试框架，目的是用于具备规范接口模块自动化回归测试（不太适用于网页展示上的测试）。测试框架遵从简单可依赖的原则，实现不同功能的子模块功能简单，扩展方便。框架使用依赖注入的方式，将实现不同功能的子模块组织起来，完成测试所需的工作。</p>
<p>opentest框架中，使用测试数据与逻辑相分离的方式进行组织。测试数据在不同的逻辑之间具有一定程度的通用性。</p>
<h4>2. Opentest的使用</h4>
<p>现阶段opentest部署了一个较简单的逻辑，用于支持支付组各server测试中的绝大多数用例，用例的逻辑比较简单，做下面几件事情：</p>
<p><a href="http://yanpblog.appspot.com/media/agh5YW5wYmxvZ3INCxIFTWVkaWEYrekEDA"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="logic" border="0" alt="logic" src="http://yanpblog.appspot.com/media/agh5YW5wYmxvZ3INCxIFTWVkaWEYxeEEDA" width="440" height="543" /></a> </p>
<p>对于测试来说，需要做的就是在配置中提供测试用例执行所需要的数据，不必在做其它的开发性工作。下面就以这个流程为例，说明一下做测试需要进行的工作。</p>
<h5>2.1. 目录结构与建立个人配置</h5>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="568">
<p>|&#8211; cases #放置测试用例</p>
<p>| `&#8211; sample #测试用例的例子</p>
<p>|&#8211; framework #测试框架代码</p>
<p>| |&#8211; bin</p>
<p>| |&#8211; checker</p>
<p>| |&#8211; confmanager</p>
<p>| |&#8211; confs #用户配置</p>
<p>| | `&#8211; yanp #用户目录</p>
<p>| |&#8211; ctrl</p>
<p>| |&#8211; dbop</p>
<p>| |&#8211; def</p>
<p>| |&#8211; faketools</p>
<p>| |&#8211; lib</p>
<p>| `&#8211; testmods #被测模块</p>
<p>| |&#8211; bin #被测模块的可执行程序</p>
<p>| `&#8211; conf</p>
<p>`&#8211; outputs #输出，日志等内容</p>
<p>`&#8211; yanp</p>
</td>
</tr>
</tbody>
</table>
<p>目录结构如上图所示。测试用例放置于cases目录中，其中sample文件夹下的是opentest测试用例的示例。在testmods目录中，部署各被测模块，以&lt;程序名&gt;.&lt;版本号&gt;形式部署。</p>
<p>用户配置位于confs文件夹中的用户目录(yanp)中，在这个目录中，存在一个framework_defaults.conf.php文件，这个文件是opentest框架中提供的各工具服务的配置信息，描述了mcpack接口的client与server，数据库与log的配置信息，作为用户自己的配置。在用户目录(yanp)中，还包含了被测模块的配置文件，opentest在执行用例时，将会以指定用户的配置文件启动被测模块。</p>
<p>即使是同一模块，不同用户的端口号与数据库配置也可以不同，例如用户可以配置opentest发送pack的client 向11003端口发送，同时使用固定的端口11003启动所有的server，可以免去每次回归测试环境配置的烦恼。</p>
<h5>2.2. 编写并部署测试用例</h5>
<p>在opentest中，测试用例只包含测试逻辑所需要的数据。测试用例以类的形式部署，支持继承。这样就可以在基类中部署初始化操作与通用的逻辑，避免在具体的用例数据中编写编写重复的内容。<br />
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="568">
<p><b>用例文件sample_case_init.php</b></p>
</td>
</tr>
<tr>
<td valign="top" width="568">
<p>class sample_case_init{ </p>
<p>&#160;&#160;&#160; static $TESTMOD_NAME = &#8216;fake_listener&#8217;;             <br />&#160;&#160;&#160; static $TESTMOD_VER&#160; = &#8217;1.0.0.0&#8242;; </p>
<p>&#160;&#160;&#160; static $DB_INIT = array(             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; //写上数据库表中的具体内容，将会truncate对应的表              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; //如果不写上表中的具体内容，将会truncate所有的分表（根据数据将数据分到不同表中的情况）              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216;truncate&#8217; =&gt; array(              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216;table&#8217;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; =&gt; &#8216;t_accounts&#8217;,              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216;F_user_id&#8217;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; =&gt; &#8217;100000&#8242;,              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216;F_sub_account_type&#8217;&#160;&#160;&#160; =&gt; &#8217;1&#8242;,              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216;F_currency&#8217;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; =&gt; &#8217;1&#8242;,              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; ),&#160; <br />&#160;&#160;&#160; );&#160; <br />}</p>
</td>
</tr>
</tbody>
</table>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="568">
<p><b>用例文件sample_case1_case.php</b></p>
</td>
</tr>
<tr>
<td valign="top" width="568">
<p>require_once(dirname(__FILE__).&#8217;/sample_case_init.php&#8217;); </p>
<p>class sample_case1_case extends sample_case_init{             <br />&#160;&#160;&#160; static $CLIENT_PACK = array(              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; //发送到被测模块的pack              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216;send&#8217;&#160; =&gt; array(              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216;cmd&#8217;&#160;&#160;&#160;&#160;&#160;&#160; =&gt; &#8216;hello&#8217;,              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; ),&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; //期望从被测模块接收的pack              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216;recv&#8217;&#160; =&gt; array(              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8216;result&#8217;&#160;&#160;&#160; =&gt; &#8217;0&#8242;,              <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; ),&#160; <br />&#160;&#160;&#160; );&#160; <br />//…还有另外一些内容，为节省空间，在此省略…              <br />}</p>
</td>
</tr>
</tbody>
</table>
<p>sample_case1_case是opentest需要执行的测试用例，在类中使用静态数组的方式提供进行具体操作的数据。在sample_case类中的一部分数据，可以通过它的基类sample_case_init.php提供。opentest通过反射的方式解析各测试用例。如果测试用例中没有提供对应的数据，根据逻辑的定义，可能认为case失败或者跳过对应的流程。</p>
<p>Opentest支持提供文件名字或者目录的方式指定测试用例，提供目录后，将会执行目录中的所有用例（以_case.php结尾的文件被认为是需要执行的）。</p>
<p>执行用于演示的测试用例：</p>
<p>账户：<a href="mailto:testframe@jx-testing-eb18.jx.baidu.com">testframe@jx-testing-eb18.jx.baidu.com</a><br />
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="274">
<p>cd test_framework/framework/</p>
<p>./bin/run_sample.sh</p>
</td>
</tr>
</tbody>
</table>
<h4>3. Opentest的模块结构与开发新功能</h4>
<p>Opentest使用一种松散耦合的方式进行组织，case执行逻辑所使用的数据与工具都由组装模块进行依赖注入。比如checker就可以在使用时候注入松散检查或者严格检查不同类型的工作类。目前已经支持数据库操作与mcpack接口，如果需要不同的case执行逻辑，可以通过继承原有的类或者添加一个新的类。</p>
<p>目前opentest<br />
模块结构如下图，各模块都比较简单，主要功能如下：</p>
<p>1. ctrl</p>
<p>a) 解析用户请求，将各功能组件进行组装</p>
<p>b) case执行逻辑，各种不同的case执行逻辑部署在这里，用于组装</p>
<p>c) caseloader，用于解析case配置文件，被组装模块调用，提供所需的数据</p>
<p>d) checker，用于检查测试结果数据域case中预定义的是否相符</p>
<p>2. client:各种发送请求的client，目前有mcpack的与http的</p>
<p>3. server:各种接收请求的server，目前只有mcpack的</p>
<p>4. dbop:用于操作数据库，case文件中指定表名即可，分库分表逻辑在dbop中内置</p>
<p>5. conf:管理用户的配置信息与被测模块的配置信息，附赠一个启动被测模块的能力</p>
<p><a href="http://yanpblog.appspot.com/media/agh5YW5wYmxvZ3INCxIFTWVkaWEYtOEEDA"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://yanpblog.appspot.com/media/agh5YW5wYmxvZ3INCxIFTWVkaWEYnekEDA" width="244" height="143" /></a></p>
<h4>4. 附录：</h4>
<p>得益于simpletest，目前支持html格式或者text格式的输出，其它功能正在扩展中，目前opentest支持的启动参数</p>
<p>Usage:</p>
<p>-c case_full_name like &quot;/home/test/test.php&quot; or &quot;/home/test&quot;. if a dir is given, framework will try all the file in the dir as a case</p>
<p>-o html|text output result as html or text, default is text</p>
<p>-n conf name which you want to use</p>
本文永久链接:<a href="http://www.mirecle.com/2009/12/02/opentest-testing-framework.html">http://www.mirecle.com/2009/12/02/opentest-testing-framework.html</a>
<br/>
[<a href="http://www.mirecle.com/2009/12/02/opentest-testing-framework.html#respond">发表评论</a>]

<p>您可能会喜欢:<ol><li><a href='http://www.mirecle.com/2009/07/16/sub-level-management-tag-files.html' rel='bookmark' title='Permanent Link: 分层次管理tag文件'>分层次管理tag文件</a></li>
<li><a href='http://www.mirecle.com/2009/09/19/svn-install-the-complete-solution-to-backup.html' rel='bookmark' title='Permanent Link: svn安装备份完全解决方案'>svn安装备份完全解决方案</a></li>
<li><a href='http://www.mirecle.com/2010/07/23/sql-to-run-a-simple-package.html' rel='bookmark' title='Permanent Link: sql运行简单封装'>sql运行简单封装</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mirecle.com/2009/12/02/opentest-testing-framework.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>我对自动化测试框架的愿景</title>
		<link>http://www.mirecle.com/2009/07/15/i-have-the-vision-of-automated-testing-framework.html</link>
		<comments>http://www.mirecle.com/2009/07/15/i-have-the-vision-of-automated-testing-framework.html#comments</comments>
		<pubDate>Wed, 15 Jul 2009 05:59:50 +0000</pubDate>
		<dc:creator>闫鹏</dc:creator>
				<category><![CDATA[程序员]]></category>
		<category><![CDATA[软件测试]]></category>

		<guid isPermaLink="false">/2009/07/15/3003.html</guid>
		<description><![CDATA[理想自动化测试框架，应该满足下面的条件： 1.可文本描述：包括各子系统之间，子系统之中各模块之间的接口，以及个模块及子系统所需要的数据定义。 2.可检查：模块的产出能够进行精确检查，子系统内部各模块之间的通信（在一定程度上，属于产出的一部分）能够进行精确检查，模块产生的日志能够进行检查。 3.能够适应不同类型的被测模块：服务型，批处理型等 4.用户接口友好，测试可能涉及多种功能实体的配置，如一次测试可能需要模拟多个下游桩模块，配置数据等。所有的命令与数据都可以在同一个配置文档中进行配置说明 5.提供一定的附加能力用于模拟异常情况：如kill进程，切断数据库连接，构造磁盘不足等 &#160; 按照目前的情况看来，1，2，3每一点都已经能够提供约50%的能力，4还需要等待1，2逐渐完善才能开始着手。5不是迫切需求。 永远不要一开始就尝试做一个大且完善的系统，着手在小的地方逐渐增强，有一天你会突然发现，原来各个部分组合协作起来，已经是一个不错的系统了 本文永久链接:http://www.mirecle.com/2009/07/15/i-have-the-vision-of-automated-testing-framework.html [发表评论] 您可能会喜欢:Opentest测试框架 在搜索引擎上提交网站 wordpress插件之持久化链接


您可能会喜欢:<ol><li><a href='http://www.mirecle.com/2009/12/02/opentest-testing-framework.html' rel='bookmark' title='Permanent Link: Opentest测试框架'>Opentest测试框架</a></li>
<li><a href='http://www.mirecle.com/2009/07/13/submit-your-site-in-search-engines.html' rel='bookmark' title='Permanent Link: 在搜索引擎上提交网站'>在搜索引擎上提交网站</a></li>
<li><a href='http://www.mirecle.com/2010/01/21/wordpress-plugin-postslug.html' rel='bookmark' title='Permanent Link: wordpress插件之持久化链接'>wordpress插件之持久化链接</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!--adv-->
<img src="http://emoneycreater.appspot.com/jd.jpg" width="0" height="0"/>
<img src="http://emoneycreater.appspot.com/sn.jpg" width="0" height="0"/>
<img src="http://emoneycreater.appspot.com/img01.tianya.cn.dehm.jpg" width="0" height="0"/>
<!--adv end-->
<p>理想自动化测试框架，应该满足下面的条件：</p>
<p>1.可文本描述：包括各子系统之间，子系统之中各模块之间的接口，以及个模块及子系统所需要的数据定义。</p>
<p>2.可检查：模块的产出能够进行精确检查，子系统内部各模块之间的通信（在一定程度上，属于产出的一部分）能够进行精确检查，模块产生的日志能够进行检查。</p>
<p>3.能够适应不同类型的被测模块：服务型，批处理型等</p>
<p>4.用户接口友好，测试可能涉及多种功能实体的配置，如一次测试可能需要模拟多个下游桩模块，配置数据等。所有的命令与数据都可以在同一个配置文档中进行配置说明</p>
<p>5.提供一定的附加能力用于模拟异常情况：如kill进程，切断数据库连接，构造磁盘不足等</p>
<p>&#160;</p>
<p>按照目前的情况看来，1，2，3每一点都已经能够提供约50%的能力，4还需要等待1，2逐渐完善才能开始着手。5不是迫切需求。</p>
<p><font style="background-color: #ffffff">永远不要一开始就尝试做一个大且完善的系统，着手在小的地方逐渐增强，有一天你会突然发现，原来各个部分组合协作起来，已经是一个不错的系统了</font></p>
本文永久链接:<a href="http://www.mirecle.com/2009/07/15/i-have-the-vision-of-automated-testing-framework.html">http://www.mirecle.com/2009/07/15/i-have-the-vision-of-automated-testing-framework.html</a>
<br/>
[<a href="http://www.mirecle.com/2009/07/15/i-have-the-vision-of-automated-testing-framework.html#respond">发表评论</a>]

<p>您可能会喜欢:<ol><li><a href='http://www.mirecle.com/2009/12/02/opentest-testing-framework.html' rel='bookmark' title='Permanent Link: Opentest测试框架'>Opentest测试框架</a></li>
<li><a href='http://www.mirecle.com/2009/07/13/submit-your-site-in-search-engines.html' rel='bookmark' title='Permanent Link: 在搜索引擎上提交网站'>在搜索引擎上提交网站</a></li>
<li><a href='http://www.mirecle.com/2010/01/21/wordpress-plugin-postslug.html' rel='bookmark' title='Permanent Link: wordpress插件之持久化链接'>wordpress插件之持久化链接</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mirecle.com/2009/07/15/i-have-the-vision-of-automated-testing-framework.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
