验收测试 - 断言大全 ¶
作者:KK
发表日期:2015.12.13
好了其实各种see,dontSee,click,grabTextFrom这些方法都是断言方法,当它们期望的东西执行不成功时就会停止运行,跟单元测试里的assert系列断言方法的效果是一样的
其实有经验的人士应该想像得出来,就是通过curl把目标网站的源代码下载来,再往里面搜索字符串这样实现断言的
那么我们要针对页面测试时都能执行哪些断言呢?这实在是太多啦,抱歉我还没有精力把全部翻译并列出来,其实你可以查看tests/acceptance/AcceptanceTester.php
这个文件的类里的方法,默认情况下它的所有方法就是可以使用的断言方法,比如开头你应该能看到一个叫setHeader
的方法,则在编程时可以使用
$I->setHeader('content-type', 'application/json')
而不用像单元测试那样要调用$this->tester
接下来我主要介绍几个可能经常用得到的方法,大家可以参考这几个方法去理解其它类似的方法,毕竟不是全部人都能看懂官方那个类里面自带的英文注解的~
amOnPage($url)
将当前页面切换到指定的URL,这个url可以是完整的URL也可以是一个相对URLamOnUrl($url)
切换当前基础网址,本身我们 $I->amOnPage('/index.html') 的话会默认相对于yml配置里的URL的嘛,现在如果通过这个方法切换成别的URL,则后面所有 amOnPage 方法的相对URL都是相对于这个新的URL,可以说是动态修改那个URL配置了,仅限该测试用例的当前会话生效,运行结束后下一个测试用例无效see($text, $selector = null)
断言页面上会存在$text这个参数的字符,如果指定$selector的话则会在$selector里面查找这个字符canSee($text, $selector = null)
跟see方法一样是查找文本的,但是如果找不到文本却不会停止运行,还有其它很多can开头的方法名称,都是断言失败不停止的方法,但失败会产生在报告里click($link, $context = null)
点击一个链接,这样会导致当前页面变更哦而
$link
参数可以是a标签里的文字,也可以是选择器但是其实如果button的name或value的值符合$link的话都会被定位到哦
对于img标签则会把alt属性也加入匹配定位的内容中
最后呢如果匹配到的是一个type=submit的button的话则会同时触发表单的提交
fillField($field, $value)
向name="$field"
这个表单项填充$value这个值比如你有一个注册页,用select控件来选择性别,value=2就是女性
$I->fillField('sex', 2); //选择女性
seeInField($field, $value)
断言name="$field"
的表单项的value值与$value是匹配的接上面
fillField
的例子,默认性别是未知
,value是0,做一个表单修改的测试$I->seeInField('sex', 3); //断言默认是3 $I->fillField('sex', 2); //填充2 $I->seeInField('sex', 2); //断言填充后就是2,但实际是填充后再断言,在基础的验收测试里意义不大,用在后面的WebDriver验收测试中才最能彰显测试效果 $I->amOnPage('/user-center.html'); //假如切换到注册页面 $I->seeInField('username', '请填写用户名'); //断言用户名的默认值
seeCheckboxIsChecked($checkbox)
断言$checkbox所指的勾选项是已经勾选了的($checkbox也是一个选择器!个人觉得该参数应该命名为$selector)然后如果要断言是未勾选的就是用
dontSeeCheckboxIsChecked($checkbox)
submitForm($selector, $params, $button = null)
将$selector选中的表单发起提交,$params是key => value表达的表单参数值,这样你就不需要慢慢用 $I->fillField 这些方法来填充表单而是在这里直接传递参数了, $button 是提交按钮的选择器,可以不填,但如果存在 修改/删除 等多个提交按钮时就需要用 $button 了seeCookie($name)
断言存在指定$name的CookieresetCookie($name)
删除cookie断言没有指定Cookie的话当然也是用
dontSeeCookie($name)
了,其实好多see方法都有一个对应的dontSee方法和canSee方法canSeePageNotFound
断言当前是404页面,之前的例子里你有见过,我这里不举例了grabValueFrom($field)
获取HTML中name="$field"
这个表单项的值,但这里要注意,这个表单项必须要被form
标签包起来哦,我试过有一次对一个select标签的值死活取不出来,后来发现form里的能拿出来,于是才注意到有这个坑...而关于这个方法的使用嘛,我要举一下例子,为什么呢?因为验收测试中默认是没有assert系列的断言方法的!你想想喔,如果你想测试的页面是一个注册页,用select控件来选择性别,默认是
未知
,value是3,然后你想测试时确认这个值默认是3怎么办?我认为只能这样:先通过grabValueFrom
方法将表单值获取出来,再用断言方法断言这个值,代码如下://顶上要 use \Codeception\Module\Asserts; $gender = $I->grabValueFrom('sex'); Asserts::assertEquals(3, $gender);
这样来断言,其实之前的例子有刻意添加过这个演示代码,具体嘛,将会在 验收测试 - 扩展 章节中解释,反正如果你要断言的话就要引用
Asserts
,然后再通过静态方法来调用断言方法,它的断言方法和PHPUnit差不多amOnSubdomain($subdomain)
切换到子域名,比如配置时URL是 qq.com,或者 www.qq.com, 又或者是 shop.qq.com ,执行$I->amOnSubdomain('pay');
则是意味着
$I->amOnPage('/xxx.html');
会切换到
http://pay.qq.com/xxx.html