验收测试 - Db模块协助

  • 作者:KK

  • 发表日期:2015.12.13


好了,希望你也认同验收测试代码应该是部署在本地服务器,然后最好也只针对本地测试网站做测试这个理念,这样才好学本节的内容。

其实不管怎样,本节内容的前提就是:测试代码和被测试的网站都处于同一个内网,或者有办法共同连接同一个数据库

这样就好玩多了,因为这里还能够去测试数据库的变更和站点UI是否相对,中间缓存又是否已经生效。

添加模块

首先我们要为验收测试添加一个叫Db的模块,它是自带模块,只要在配置文件上追加一下名称并重构测试器即可

但是追加模块名称后还需要配置数据库的用户和密码信息以便这个模块能连接到数据库上,在codeception.yml全局配置的modules - config - Db里为Db模块配置各项信息,它默认提供了几个配置选项(即使以前没有使用该模块,但有这个信息配置存在也不会影响),而dsn就是PDO的dsn了,因为它是靠PDO来靠作数据库的


实践

然后比如要测试"赞"的功能正确

$testBookId = 99;	//要测试的书籍ID
$bookData = $I->grabFromDatabase('book', '*', ['id' => $testBookId]);	//从数据库取出书籍记录

$I->sendAjaxPostRequest('/book/support.do', ['id' => $testBookId]);	//假设这是对 ID为99的一本书进行"赞/喜欢"操作

$I->seeInDatabase('book', [
	'id' => $testBookId,
	'support' => $bookData['support'] + 1,
]);	//断言support字段被加1了

$I->dontSeeInDatabase('book', [
	'id' => $testBookId,
	'support' => $bookData['support'],
]); //或者断言不会是原来的值

由于测试目标网站和测试代码连的是同一个数据库,所以理论上从数据库读出的数据跟网站上呈现的数据应该是能对得上的,这样你就能确保一些读取数据库数据显示的代码是设计正确的了

个人经常用的是往数据库里随机抽一条数据记录,然后拿这个数据去站点的某个表单中填一填看看反应是不是正确的


还有个haveInDatabase方法,我觉得用途不是很大,有兴趣的话自己看看测试器的备注试用一下吧