前提知识准备

在学习本课程之前,你需要准备以下知识点:

  • 掌握一般的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,但是国家好像觉得我们学这个技术会煽动民族什么的我不懂反正被屏蔽了,你得翻墙访问 ~_~

  • 它是开源的框架,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一定程度上会方便点,但不懂也没多大关系。它会提供配置让你决定运行时要调用哪个浏览器,并且运行过程中可以动态修改配置,这样你可以轮流调用多个浏览器测试什么兼容性啥的

  • 它的。..算了,,,由于去官网要翻墙,我借到个VPN翻墙后就将官网的英文手册一页页地另存成doc文档回家慢慢看了,现在上传到百度云分享给大家,下载地址是http://pan.baidu.com/s/1i3LJHJn,有英文文档自学能力的同学,我比较建议你直接学习英文资料,我翻译得不一定完全正确,讲得也不像他们那么细,我就把主要能用到的,并且是我学到的东西讲出来让大家学会普通的测试开发而已,深入学还是要看官网的东西


那么接下来

使用Codeception创建测试项目的前提条件:

  1. 将PHP目录添加到系统环境path变量中,并且确定cmd中运行php -v命令查看到的版本号是5.4或以上,小于5.4不行!

  2. 获取一个叫codecept.phar的文件,最好下载我共享到百度云的这个http://pan.baidu.com/s/1bnfY4Vl

    因为我的教程是基于Codeception 2.0.9版进行教学的,所以我共享的就是2.0.9版,让测试代码运行起来就要靠这个了哦

    根据本教程学会后,你也可以自行前往官方网站进行下载更新的版本,但是访问官方网站需要翻墙

    下载后,比如放在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到代码仓库上就行了

PHP测试用例-前言 1的更多相关文章

  1. Cypress系列(3)- Cypress 的初次体验

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 这里的栗子项目时 Cypress ...

  2. PPT资料下载 - 问题驱动的软件测试设计:强化测试用例设计

    测试用例设计是整个软件测试过程中非常重要的测试活动,需求规格说明是测试人员开展测试设计的主要参考输入.而在测试实践中基于需求规格说明得到的测试用例,在测试覆盖率.测试效率.测试有效性和测试质量等方面的 ...

  3. pytest-xdist分布式执行测试用例

    前言 平常我们手工测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟.如果一个测试人员执行需要1000分钟才能执行完,当项目非常紧急的时候,我们会用测试人力成本换取时间成本,这个时候多找个 ...

  4. pytest自动化6:pytest.mark.parametrize装饰器--测试用例参数化

    前言:pytest.mark.parametrize装饰器可以实现测试用例参数化. parametrizing 1.  下面是一个简单是实例,检查一定的输入和期望输出测试功能的典型例子 2.  标记单 ...

  5. Testlink1.9.17使用方法(第一章 前言)

    第一章 前言 QQ交流群:585499566 一.Testlink主要功能: 测试项目管理 测试需求管理 测试用例管理 测试计划的制定 测试用例对测试需求的覆盖管理 测试用例的执行 大量测试数据的度量 ...

  6. Python自动化测试用例设计--自动化测试用例与手工测试用例区别与联系

    1. 前言 手工测试用例是针对手工测试人员,自动化测试用例是针对自动化测试框架,前者是手工测试用例人员应用手工方式进行用例解析,后者是应用脚本技术进行用例解析,两者最大的各自特点在于,前者具有较好的异 ...

  7. 【测试设计】基于正交法的测试用例设计工具--PICT

    前言 我们都知道成对组合覆盖是一种非常有效的测试用例设计方法,但是实际工作过程中当成对组合量太大,我们往往很难做到有效的用例覆盖. PICT是微软公司出品的一款成对组合命令行生成工具,它很好的解决了上 ...

  8. DPDK测试用例(sample)编译

    前言 要使用DPDK的测试用例,必须先进行编译,以此记录编译的操作,方便日后查找 编译用例 设置环境变量,将DPDK的目录路径添加到编译代码中,RTE_SDK指示DPDK目录路径: export RT ...

  9. TPA测试项目管理系统-测试用例管理

            Test Project Administrator(简称TPA)是经纬恒润自主研发的一款专业的测试项目管理工具,目前已广泛的应用于国内二十余个整车厂和零部件供应商.它可以管理测试过程 ...

随机推荐

  1. linux系统备份脚本

    前言 之前写过<<linux系统简单备份的脚本>>, 最开始一直用着,后来觉得有必要改进下它,不管是从操作方式上还是脚本的工作方式上.之所以这么看重备份,是因为我经历过磁盘损坏 ...

  2. strncpy 引起的思考,重新认识了strncpy这个函数【转】

    转自:http://blog.csdn.net/edwardlulinux/article/details/47134513 版权声明:本文为博主原创文章,未经博主允许不得转载. 首先来看一个司空见惯 ...

  3. 原型 Boolean String Math Date知识点

    原型 1.定义 每一个对象都有原型 原型仍然是一个对象 模拟实现面向对象的继承性 2.原型链 对象的原型还有原型 对象除了可以使用自有属性还可以继承原型上的属性 3.获取原型 对象.__proto__ ...

  4. 各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解

    来自:http://blog.csdn.net/lvxiangan/article/details/8151670 ------------------------------------------ ...

  5. Solidity 文档--目录

    Solidity是一种语法类似JavaScript的高级语言.它被设计成以编译的方式生成以太坊虚拟机代码.在后续内容中你将会发现,使用它很容易创建用于投票.众筹.封闭拍卖.多重签名钱包等等的合约. 注 ...

  6. django 分页django-pure-pagination(zz)

    虽然django自带了一个paginator,但不是很方便,我们使用django-pure-pagination github地址https://github.com/jamespacileo/dja ...

  7. Swagger 2.0 摘要

    官网地址:http://springfox.github.io/springfox/docs/current/

  8. Android 用AsyncTask下载网络图片并显示百分比

    1.添加布局文件:activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a ...

  9. javascript面试题(一)(转载)

    1,判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母.数字.下划线,总长度为5-20 var reg = /^[a-zA-Z][a-zA-Z_0-9]{4,19}$/; /*注意:1.要用 ...

  10. 【Linux命令】du -h --max-depth=1 /usr/local/

    查看文件夹中各文件(夹)的大小 例如 du -h --max-depth=1 /usr/local/ 应用:比如mysql 无法启动,提示:ERROR! Manager of pid-file qui ...