PHP测试用例-前言 1
前提知识准备
在学习本课程之前,你需要准备以下知识点:
- 掌握一般的PHP开发技能,使用面向对象的框架开发过三个月以上
-
会一些JS知识
-
了解http协议
拥有以下知识会学得更加顺利:
-
掌握PHPUnit测试框架或者有其它语言的测试开发经验,比如
JUnit
,安卓的AndroidUnitTest
或JavaScript的Jasmine
等 -
熟悉任何一种操作系统的命令行操作,了解标准输入/输出
-
掌握Selenium知识并有一些实战经验
-
具有高度模块化/抽象化程序设计意识
-
能阅读英文文档
关于测试这东西
一个长期发展维护的项目,或者明显会越变越庞大复杂的项目我相信大家都有所参与过,尽管它可能不是一个成功的项目,因为成不成功不取决于它复杂不复杂,而是怎么设计怎么运营嘛.
那么即使是一个不成功的项目也是会有规模增长以及复杂度的增加的,你一定经历过改那么一丁点东西但却影响了别的东西,于是当初你开始执行了一些测试操作————点点这里点点那里什么的,但效果总不如意,最后总结下来其实人工测试有以下缺点:
-
测试不全面,会漏测某一个功能,长期实施后只能用笔记记下要测哪些哪些,然后次次对着笔记清单去测试,好了你这时候看似挺全面了,可是有新的功能/页面时,它又涉及了一个新的方面,你暂时又忘了笔记,于是你还是测试不够全面
-
没有足够数据和条件去测试某种情况,比如你想测试领奖得第1名后名称是否红色,但由于游戏难度你实在很难弄出第一名,还有时候数据关联复杂你更加难模拟出那个场景
-
没有足够精力去测试那么多东西,中国IT行业通常都是
赶
的态度来对技术,快点快点,时间没多少,加班加班,赶紧实现...有时候你根本不够时间做各种你觉得很全方位测试 -
你就是修改了一个key还是啥的,涉及的变更肯定不超过5个字节的代码,目测之下感觉就是不用测试啊,直接提交吧————坑爹了就在这个与爱人甜的周末收到公司电话叫你去修BUG,你万万想不到这个改动会影响几个页面
至于你的上面怎么处罚你的过失是另一回事了,但你一定至少有那么一丁点的挫败感涌上心头:我写的代码就这么不可靠?
想变得可靠点吗?往下学学自动化测试呗..
软件测试工程嘛,我更加没专门学过哦,个人认为起码它的存在解决了重复的人工测试,以自动化运行的方式来快速重复地对程序进行确认,确认它会显示1的,不会显示2的,你只要不小心修改代码导致它显示了2,它就将失败的测试结果反馈给你.
如果你对软件测试感到陌生,请相信,这是可以做到的.
本栏目内容主要介绍如何使用PHP编程来实现针对以下三种情况的质量保障测试:
-
你写了一些PHP代码,希望未来修改中可以不影响原有的其它代码运行
-
你用某种语言写了一些HTTP程序(比如接口),希望修改不影响所有接口的输出
-
你用某种语言写了个Web程序,希望各种修改不要使得页面突然无法如常工作了
我这里要教大家使用的Codeception
是一款PHP编写的全栈式测试框架,能解决上面三个需求,接下来-action!
创建测试项目
我们使用PHP的Codeception
框架进行测试开发
那个。..先给你灌点Codeception的基本知识:
-
它的官方网站是http://codeception.com,但是国家好像觉得我们学这个技术会煽动民族什么的我不懂反正被屏蔽了,你得FQ访问 ~_~
-
它是开源的框架,github项目地址是https://github.com/codeception/codeception,其中本套教程是基于
2.0.9版
做教学的,如果你的是比较新的版本,则会与本教程所述的运行效果有所不同 -
它是目前在PHP领域里最著名的测试框架,但在国内比较少传播,我也没找到多少中文资料,凭这身渣英文慢慢点划词翻译学下来的
-
它的测试主要包括
单元测试
,功能测试
和验收测试
三个方面,另外听说新版还有API测试
的我暂时没及时了解,其中功能测试
这个东西我学会并用了几下感觉不咋好最后弃用了,所以没有深入学习,并且没有撰写相关教程分享,要学习的话请大家自行前往官网看英文指引 -
它的
单元测试
是基于PHPUnit进行封装
的,所有PHPUnit代码都可以迁移到它的框架内
运行而不需做任何改造,PHPUnit我相信大部分同学都了解并有一定使用,可以说要在Codeception里写单元测试你就少了很多学习成本。 -
它的
验收测试
是通过Selenium
这个WebDriver
将类似$I->click('#btnLogin')
这样的PHP代码传达给Chrome/FireFox/IE
浏览器执行,所以如果你懂Selenium
一定程度上会方便点,但不懂也没多大关系。它会提供配置让你决定运行时要调用哪个浏览器,并且运行过程中可以动态修改配置,这样你可以轮流调用多个浏览器测试什么兼容性啥的 -
它的。..算了,,,由于去官网要FQ,我借到个VPNFQ后就将官网的英文手册一页页地另存成doc文档回家慢慢看了,现在上传到百度云分享给大家,下载地址是http://pan.baidu.com/s/1i3LJHJn,有英文文档自学能力的同学,我比较建议你直接学习英文资料,我翻译得不一定完全正确,讲得也不像他们那么细,我就把主要能用到的,并且是我学到的东西讲出来让大家学会普通的测试开发而已,深入学还是要看官网的东西
那么接下来
使用Codeception创建测试项目的前提条件:
-
将PHP目录添加到系统环境path变量中,并且确定
cmd
中运行php -v
命令查看到的版本号是5.4或以上,小于5.4不行! -
获取一个叫
codecept.phar
的文件,最好下载我共享到百度云的这个http://pan.baidu.com/s/1bnfY4Vl因为我的教程是基于
Codeception 2.0.9版
进行教学的,所以我共享的就是2.0.9版
,让测试代码运行起来就要靠这个了哦根据本教程学会后,你也可以自行前往官方网站进行下载更新的版本,但是访问官方网站需要FQ
下载后,比如放在D盘吧,然后就确认一下cmd运行
php D:\codecept.phar -V
这个命令会输出Codeception version 2.0.9
接下来我们开始创建项目,以windows系统为例,我假设我们接下来的演示测试项目的目录就在E:\project1-tests
,并且后面我会经常称它为测试项目目录
将cpdecept.phar
放在E盘根目录下面;在E盘下手动创建project1-tests
目录
运行cmd
,输入E:
回车,这样将当前目录切换到E盘,再cd进到project1-tests
目录
执行
php codecept.phar bootstrap --namespace project1_tests
然后你就能发现测试项目目录
下有一个tests目录和一个。yml文件,就是刚才的命令生成出来的,yml是个配置文件,暂时别管它,而tests里面才是写测试代码的地方
我们以后学习过程中需要继续输入很多命令来做运行呀,配置呀,重构呀什么的,但是敲这些命令之前要先开启cmd,切换到测试项目目录
下才能开始敲
其实你只要执行
php codecept.phar bootstrap
都行,只是测试项目的命名空间会默认为叫tests
,我只是顺带教下大家如何自定义命名空间(注意命名空间不要带有-
号呀,所以我的演示命令里才写成--namespace project1_tests
而不是--namespace project1-tests
),当你有多个测试项目并有互相引用或者需要区分命名空间时,创建项目时就指定命名空间是很重要的
这样就初始化了测试项目的文件,接下来学习单元测试吧(别关掉那个cmd会话窗口哦!后面还要用的)
对了,以后写单元测试建议用这个,因为只要一个codecept.phar
就够了,装PHPUnit又要装pear什么的最讨厌了。..虽然新版也有PHPUnit.phar,但国内大家搜PHPUnit教程时基本都在教pear那套装法,phar那套用法还没在国内推广,而且这个单元测试还基于PHPUnit增强了呢
前言 - 认识配置文件
配置文件是一种后缀名为yml的文件,内容是纯文本。但它有一定的编排格式规范,详细请搜索关键词YAML
,官网http://www.yaml.org
我们可以在测试项目目录下看到一个codeception.yml
,这是整个测试项目的全局配置
简要说明
虽然它的格式很明显,一下子看出怎么编写,只是有时候多个少个空格你都会导致语法错误。根据自己一段时间的探索后很快找到了一些规律。我的IDE支持yml文件语法高亮(NetBeans),所以一旦我写错格式时它就会显示红色报错,大概就是这样摸索到语法的。
它是一种层级缩进语法(这是我自己的叫法哦),比如codeception.yml中,大家可以看到最外层的paths
下面有几个配置项是缩进了的,比如log
,说明log是属于paths的子配置选项。
以后的教程中我会不时跟大家提到一些配置让大家跟着去配,一般我都会这样说“请将paths - log
的配置项修改成xxx",就这么说好了哦,别忘啦。
包括它下面还有modules
,里面有config
,再里面又有。..很明显大家在这里看到了数据库配置,那modules - config - Db - password
这个配置项是啥,又在yml配置的哪里,我相信以你的高强悟性一定能看懂!
内容编辑
这只是一个格式,但是格式里面写什么值没有规定你,你根据自己的应用需求去写不同的配置名称就好,比如你以后扩展了Codeception是吧,可以自己加个xxxpath
的配置名称都可以
配置名称与值之间用冒号分隔(:
),并且冒号是紧跟配置名称后面,比如password:
这样是正确的,但password :
这样是错误的,而配置的值又要在冒号后面空一个空格才可以开始写
要注释掉备注内容则是在行首加#号,于是批量注释时就麻烦了,每一行都要加,有必要的话可以自行上官网找找有没有批量注释的方式
Codeception的配置
我自己也并不是完全了解所有配置,暂时也不打算详细讲解这些配置,而且实际上大家基本上不用对配置文件做什么修改就能开始学习整个测试,未来我也是叫大家来来去去修改那么两三个配置选项而已,这里大家只要看看了解即可。
Codeception框架运作需要4个配置文件:
-
codeception.yml : 全局配置文件,控制全局的东西,比如日志存放位置,扩展模块的位置,最大内存和数据库配置什么的
-
tests/unit.suite.yml : 单元测试的相关配置,如果你永远不运行单元测试的话可以删除它,新手最好别乱动咯
-
tets/acceptance.suite.yml : 验收测试的相关配置
-
tets/functional.suite.yml : 功能测试的相关配置
就这样,打开看看即可,别乱改它先!
dist配置支持
以全局配置文件为例,如果你想在本地开发时使用自己特殊的路径和数据库信息配置,但是又不想影响其他开发成员,以及在测试机上不使用你自己的配置来运行,那就使用这个特性,有经验的成员一看就懂,其实你只要知道“codeception.dist.yml这个配置文件如果存在的话,会与codeception.yml进行合并,并且两者存在相同配置时会优先使用codeception.yml的“(依然有读者提问codeception.dist.yml是不是要自己创建的,我这里明确声明是的!
你不创建的话测试程序会无视它,创建了就会合并它)
dist配置文件可以不存在,一旦存在就会被合并
比如codeception.dist.yml的内容是↓↓↓
config1: aaa
config2: bbb
然后codeception.yml的配置内容是↓↓↓
config2: xxx2
则测试框架启动时会将它们合并成
config1: aaa
config2: xxx
你只要别提交codeception.yml到代码仓库上就行了