最近百度Hi项目拟针对内部员工版本增加设备绑定功能,也许是公司出于对员工聊天信息安全性的考虑,同时也考虑到后期会有相应的员工名片等功能的推出,设备绑定的过程也是为了员工名片功能做个准备吧!设备绑定的服务是用php语言实现的,我的主要工作就是在现有的平台上搭建好这个新的服务,然后测试各个接口,保证功能的可用性和性能等。我比较擅长的语言是C++和Python,Java和php基本处于听过、看过,没有写过的这种程度。我在搭建好测试环境之后,开始思考到底怎么去完成这件事?对于这种web请求,或许Java是最好的选择,C++太费事,Python也还是可以,但这个服务都是php提供的,用php去做这件事情也是个不错的选择。就是上个周末,周末闲来无聊,我就想公司最近内推的邮件中对php开发的需求蛮多的,我是不是该学学php呢,然后我就着手在linux下搭建了一个php开发环境,花了1天的时间看php cookbook的大概1/3左右。然后这周就遇到php的需求,所以当时就很愉快的做了一个决定,就用php了,正好验收下我上周末的学习情况。phpunit是php语言中的单测框架,就用它了,bingo!

使用phpunit编写测试用例要遵守如下规则:

  1. 在测试用例中,可以扩展PHPUnit_Framework_TestCase类,单测中的setUP、tearDown等方法就是在这个类中定义的;
  2. 测试用例的名字最好是使用约定俗成的格式,即在被测试类的后面加上Test,比如要测试的类为DeviceBind,则测试用例的命名为DeviceBindTest。
  3. 在一个测试用例中的所有的测试方法,在命名时都应该以test+测试方法名去命名,如test_devicebind(),要注意的是该方法必须是声明为public类型的。当然可以在你的测试用例中包含private的方法,但它们不能被phpunit所调用。
  4. 测试方法中是不能接收参数的。

开始动手吧,考虑到一些频繁需求,比如在设备绑定前登录Hi账号,对get和post请求过程的封装这些过程。我首先自定义了一个测试类,即对PHPUnit_Framework_TestCase类的扩展,我给它命名为HiTest。

class HiTest extends PHPUnit_Framework_TestCase

Hi在成功登录之后,会生成cookies文件,我们的post方法定义如下:

public function Post_Data($url, $fields, $cookie_file)

这个类定义结束之后,设备绑定的单测才刚刚开始。针对设备绑定的几个端口,分别实现一个测试类去完成测试工作,我们一绑定接口为例:

class DeviceBindTest extends HiTest

针对绑定接口,我们设计了几种测试用例,笨笨的办法就是写几个测试方法一个一个的去做这件事情,可是那样显得多么的不高大上啊!还好,有phpunit提供了高大上的方法,即Data Provides.

这是phpunit官方给出的使用帮助:

A test method can accept arbitrary arguments. These arguments are to be provided by a data provider method (provider()). The data provider method to be used is specified using the @dataProvider annotation.

好了,开始动手吧,先定义数据提供函数:

public function provider_bind()

然后使用标记告诉测试用例使用我们定义的数据提供函数中的数据:

 /**
* @dataProvider provider_bind
*/
public function test_devicebind($userName, $random, $device_id, $device_id_fixed, $device_name)

在测试方法中使用assertEquails等诸多断言去完成我们的测试工作吧!

最后,单测怎么跑起来?很简单:

phpunit devicebind.php

好了,就这些了,算是工作的一个小记录吧!这个是3周前的工作,花了半天的时间学了下php的单测框架,对设备绑定项目接口做了测试。目前我主要的工作是使用gtest做协议的测试,当然对gtest的使用不是什么难点,主要的难点在于协议的模拟,目前使用的协议模拟是从源码拿协议的定义过来,然后封装一些函数去完成协议中请求包的发送,A包和N包的接收等系列工作。

Published with Windows Livewriter.

PHP服务接口测试的更多相关文章

  1. 基于Spring开发的DUBBO服务接口测试

    基于Spring开发的DUBBO服务接口测试 知识共享主要内容: 1. Dubbo相关概念和架构,以及dubbo服务程序开发步骤. 2. 基于Spring开发框架的dubbo服务接口测试相关配置. 3 ...

  2. 关于Web服务接口测试的一些问题及答案

    本篇主要是像想要了解并且学习接口测试的朋友,做一个入门的简单介绍 1.什么是接口 答:接口就是内部模块对模块,外部系统对其他服务提供的一种可调用或者连接的能力的标准,就好比usb接口,他是系统向外接提 ...

  3. 使用jMeter测试Solr服务接口

    之前一直用ab做简单的服务接口测试,ab功能强悍,使用简单,但是没有生成专题图和表格等功能,因此,我们决定使用jmeter来作为我们测试工具.接下来,我们将详细介绍jmeter使用的步骤,主要包括:j ...

  4. springcloud之自定义简易消费服务组件

    本次和大家分享的是怎么来消费服务,上篇文章讲了使用Feign来消费,本篇来使用rest+ribbon消费服务,并且通过轮询方式来自定义了个简易消费组件,本文分享的宗旨是:自定义消费服务的思路:思路如果 ...

  5. DevOps架构下如何进行微服务性能测试?

    一. 微服务架构下的性能测试挑战 微服务与DevOps 微服务是实现DevOps的重要架构 微服务3S原则 DevOps核心点 微服务架构下的业务特点 亿级用户的平台 单服务业务随时扩容 服务之间存在 ...

  6. 微服务架构实践 - 你只懂docker与spring boot就够了吗?

    微服务架构实践 - 你只懂docker与spring boot就够了吗? 作者 浮云发发 已关注 2017.02.27 02:50* 字数 2613 阅读 2583评论 6喜欢 35赞赏 2 微服务并 ...

  7. LR常用函数以及调用自定义函数

    2.LR常用函数以及调用自定义函数 2.1.LR常用函数以及对信息的判断 2.1.1. LR内部自定义函数 在LR脚本中定义变量和编写自定义函数,需将变量的声明放在脚本其他内容的上方,否则会提示[il ...

  8. #研发解决方案介绍#Recsys-Evaluate(推荐评测)

    郑昀 基于刘金鑫文档 最后更新于2014/12/1 关键词:recsys.推荐评测.Evaluation of Recommender System.piwik.flume.kafka.storm.r ...

  9. .net WCF简单实例

    最近看到网上招聘有许多都需要WCF技术的人员,我之前一直没接触过这个东西,以后工作中难免会遇到,所谓笨鸟先飞,于是我就一探究竟,便有了这边文章.由于是初学WCF没有深入研究其原理,只是写了一个demo ...

随机推荐

  1. VS开发软winform软件的更改用户使用权限

    在使用软件的过程中,我们经常需要使用的软件拥有管理员权限,在开发的过程中,本人就遇到了应为权限不足的问题导致软件不能正常使用的状况. 在此我来记录我遇到的问题. 为开发的软件赋予管理员权限 https ...

  2. Luogu P1666 前缀单词

    校内资格赛题目,差点高一就要\(\tt{AFO}\)了 30分思路 对30%的数据,满足$1≤n≤10 $ 所以我们可以子集枚举,实际得分40pts #include<iostream> ...

  3. 用promise封装ajax

    首先贴代码 var ajaxOptions = { url: 'url', method: 'GET', async: true, data: null, dataType: 'text', } fu ...

  4. LaTeX中常用数学符号总结

    博主一些小小的总结,以后会继续更的. 某个传送门. ⎝⎛•‿•⎞⎠⎝⎛•‿•⎞⎠⎝⎛•‿•⎞⎠ 1.左右一个$: 1+1=2 $1+1=2$ ($3$及以后的都需要$) 2.左右两个$: 1+1=2 ...

  5. 11Vim文本编辑器

    Vim文本编辑器 在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数. Vim提供了三种模式:命令模式.输入模式.末行模式 1.命令模式 每次运行Vim编辑器时,默认进入命令模式 ...

  6. pre-commit钩子,代码质量检查

    目前基本使用三款js代码质量检查工具: jslint, jshint, eslint.许多IDE里面也有对应的检查插件,在每次ctrl + s 保存文件的时候,检查当前文件是否符合规范,保证代码质量. ...

  7. memcache 协议 && Golang实现

    https://github.com/quguolin/memcache 一:Error ERROR\r\n 客户端发送了一个不存在的命令 CLIENT_ERROR\r\n 客户端发送了一个不符合协议 ...

  8. Python学习笔记:wxPython(GUI图形用户界面)

    wxPython是一套基于Python的第三方GUI插件,可用Python制作丰富的图形化界面程序. 安装:pip install wxPython 或者 网站下载安装https://pypi.org ...

  9. org.apache.catalina.webresources.Cache.backgroundProcess The background cache eviction process was unable to free [10] percent of the cache for Context [/filestore] - consider increasing the maximum s

    需要耐心啊,太急于求成,希望直接就得到解决方法了...以至于正确方法都已经出现了,我却没有耐心看下去,所以反而又耽误了不少时间.... 项目加载100+张图片,还有一个小的MP4,所以console警 ...

  10. Tracer Deployment UVALive - 8271 二分图匹配

    复习二分图又想起了这道题,裸的二分图匹配,直接匈牙利算法就可以了,mark一下这个比较好用的稠密图匈牙利算法模板 题目:题目链接 AC代码: #include <iostream> #in ...