PHP服务接口测试

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

    最近百度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.

  • 阿里云国际版折扣https://www.yundadi.com

  • 阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
    标签: php

    “PHP服务接口测试” 的相关文章

    Pytorch怎么安装pip、conda、Docker容器 - 开发技术

    这篇文章主要介绍“Pytorch怎么安装pip、conda、Docker容器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Pytorch怎么安装pip、conda、Docker容器”文章能帮助大家解决问题。一、Pyorch介绍...

    JavaScript闭包哟哪些用途及怎么实现 - 开发技术

    这篇文章主要介绍了JavaScript闭包哟哪些用途及怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript闭包哟哪些用途及怎么实现文章都会有所收获,下面我们一起来看看吧。一、闭包的概念当通过调用外部函数返回的内部函数...

    期货怎么看仓单(如何查看期货仓单)

    怎样查某一期货品种的仓单数量? 进入交易所的网站上可以查询。 以上海证券交易所为例,查询方法如下: 打开上海证券交易所的官方首页(),点击右侧数据与行情的栏目中的【仓单日报】即可查询。 期货持仓线怎么看 您...

    【spring学习笔记】(二)Spring MVC注解配置 参数转换注解@RequestMapping@RequestParam、@PathVariable@MatrixVariable

    @TOC介绍在Spring MVC项目中,<\context:component-scan>配置标签还会开启@Request-Mapping、@GetMapping等映射注解功能(也就是会注册RequestMappingHandler-Mapping和RequestMappingHand...

    零知识证明学习(三)—— 非交互式零知识证明(zkSNARKs)

    非交互式零知识证明 本节主要介绍一种新的零知识证明- z k S N...

    如何用Python实现邮件发送 - 编程语言

    今天小编给大家分享一下如何用Python实现邮件发送的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 一. 准备用来发送邮件的...