什么是php接口测试工具(如何测试PHP)

网友投稿 339 2022-12-29


本篇文章给大家谈谈什么是php接口测试工具,以及如何测试PHP对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享什么是php接口测试工具的知识,其中也会对如何测试PHP进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

比较常用的几个PHP开发工具

1、浏览器扩展组件工具(Firefox扩展)--

FirePHP FirePHP是一款基于Firebug的扩展,phpLangEditor 一款PHP函数库解释工具。 PHP Lookup :是一个内置的搜索栏,以帮助您快速查找引用的PHP语法。 PHP ManualSearch :一个方便的搜索栏,从您的Web浏览器中搜索官方PHP文档。

2、PHP代码调试工具--

Webgrind Webgrind完美支持PHP 5,安装迅速简便,可以跨越多个平台运行。 Xdebug Xdebug是使用极为广泛的PHP代码调试工具,它提供大量的工具帮助你找出程序中潜在的BUG,并且它得到了很多PHP开发工具的支持,以做为专门的测试工具继承在这些开发工具中,比如PHPEclipse、phpDesigner等。

3、PHP框架支持--

Dwoo :PHP5 的模板引擎。CodeIgniter 用于敏捷软件开发的PHP框架。 YII Framework :一个高性能的基于组件的PHP框架。 NetBeans :强大的PHP扩展框架支持集,拥有完善的GUI界面,独自成为一款强大的PHP开发工具。 Solar symfony :一个开源的PHP Web框架,加速Web应用程序开发的创建与维护。

4、PHP代码测试、优化工具--

PHPUnit :一款基于PHP 5的JUnit组件测试工具。 SimpleTest SimpleTest是一款高度集成的PHP代码测试工具。 Selenium :一款专业全自动WEB站点PHP代码测试工具,比较侧重的UI输入输出数据测试。PHP_CodeSniffer dBug 一款专注于测试类、对象、数组以及XML文件的PHP工具。 PHP Profile Class

5、PHP扩展、工具集、类库支持--

SimplePie 此工具可用于PHP RSS解析。 HTML Purifier :此工具可以用来移除所有恶意代码(XSS),而且还能确保你的页面遵循W3C的标准规范。 TCPDF :一个可以用于快速生成PDF文件的PHP5函数包。 htmlSQL :一组可以使你方便的对HTML和XML内容方便的使用类似SQL语句进行检索的PHP类集。

6、PHP集成开发环境(IDE)、编辑器--

PHPEclipse 一个强大的Eclipse环境下开发PHP的插件,包括的主要功能有:PHP语法分析,调试,代码格式化,大纲视图,代码模板定制等。 PhpED 一套Windows环境下的PHP集成开发环境。phpDesigner 一款轻量级的PHP集成开发工具,代码编辑器功能特别强大,支持在线预览。 ZendStudio 一 款Eclipse下优秀的PHP开发环境,适用于开发包含丰富接口的RIAs应用程序。

7、PHP在线工具及资源--

Minify:该工具使用 PHP5 开发,用于合并压缩js/css 文件的应用程序,合并压缩之后的结果可通过 HTTP gzip/deflate 及一些相关头,优化客户端缓存。 HTTP_StaticMerger:CSS和java script文件自动"合并"。 PHP Object Generator 一款PHP代码生成器,它能够为你的PHP4/PHP5应用程序生成简洁和可测试的面向对象代码。

接口自动化测试工具有哪些?

接口自动化工具有以下:

1、QTP。是quicktest Professional什么是php接口测试工具的简称什么是php接口测试工具,是一种自动测试工具。使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等。

2、WinRunner。是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。

3、AdventNetQEngine。是一个应用广泛且独立于平台的自动化软件测试工具,可用于Web功能测试、web性能测试、Java应用功能测试、Java API测试、SOAP测试、回归测试和Java应用性能测试。

自动化(Automation)是指机器设备、系统或过程(生产、管理过程)在没有人或较少人的直接参与下,按照人的要求,经过自动检测、信息处理、分析判断、操纵控制,实现预期的目标的过程。

自动化技术广泛用于工业、农业、军事、科学研究、交通运输、商业、医疗、服务和家庭等方面。采用自动化技术不仅可以把人从繁重的体力劳动、部分脑力劳动以及恶劣、危险的工作环境中解放出来,而且能扩展人的器官功能,极大地提高劳动生产率,增强人类认识世界和改造世界的能力。

php是什么?

PHP(PHP:Hypertext Prerocessor)是一种在电脑上执行的脚本语言,主要是用途在于处理动态网页,也包含了命令行执行接口(command line interface),或者产生图形使用者接口(GUI)程序。[1]
PHP 最早由 Rasmus Lerdorf 在1995年发明,现在PHP实质上的标准由PHP Group和开放源代码社群维护。PHP 以 PHP License 作为许可协议,不过因为这个协议限制了PHP名称的使用,所以和开放源代码许可协议GPL不相容。[2]
PHP 目前被广泛的应用,特别是在服务器端的网页程序开发。一般来说 PHP 大多执行在网页服务器上,透过执行PHP程序码来产生使用者浏览的网页。PHP 几乎可以在任何的操作系统上执行,而且使用 PHP 完全是免费的。根据2007年4月的统计资料,PHP 已经被安装在超过2000万个网站和100万台服务器上[3]。
目录 [隐藏]
1 开发历史
1.1 版本历程
2 应用
3 语法
3.1 类型
3.2 变量
3.3 面向对象
4 PHP相关资源
4.1 函数库
4.2 源代码编码和加速
4.3 样板引擎
5 未来发展
5.1 PHP 5.3
6 参考资料
7 外部链接
[编辑] 开发历史

PHP 的发明人 Rasmus Lerdorf
Zend Technologies的创办人之一 - Andi GutmansFile:Zeev Suraski.jpg
Zend Technologies的创办人之一 - Zeev SuraskiPHP 原本的简称为 Personal Home Page[4],是Rasmus Lerdorf 为了要维护个人网页,而用c语言开发的一些CGI工具程序集,来取代原先使用的 Perl 程序。最初这些工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量[5]。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。Rasmus Lerdorf 在1995年6月8日将 PHP/FI 公开释出,希望可以透过社群来加速程序开发与寻找错误[6]。这个释出的版本命名为 PHP 2,已经有今日 PHP 的一些雏型,像是类似 Perl 的变量命名方式、表单处理功能、以及嵌入到 HTML 中执行的能力。程序语法上也类似 Perl,有较多的限制,不过更简单、更有弹性。[5]
在1997年,任职于 Technion IIT 公司的两个以色列程序设计师:Zeev Suraski 和 Andi Gutmans,重写了 PHP 的剖析器,成为 PHP 3 的基础,而 PHP 也在这个时候改称为PHP: Hypertext Preprocessor.[5]。经过几个月测试,开发团队在1997年11月释出了 PHP/FI 2,随后就开始 PHP 3 的开放测试,最后在1998年6月正式释出 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 释出后开始改写 PHP 的核心,这个在1999年释出的剖析器称为 Zend Engine[7],他们也在以色列的 Ramat Gan 成立了 Zend Technologies 来管理 PHP 的开发。[5]
在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式释出,2004年7月13日则释出了PHP 5,PHP 5则使用了第二代的Zend Engine[5]。PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强[8]。目前PHP 4已经不会继续更新,以鼓励用户转移到PHP 5。[9][10]
2008年PHP 5成为了PHP唯一的有在开发的PHP版本。将来的PHP 5.3将会加入Late static binding和一些其他的功能强化[11][12] 。PHP 6 的开发也正在进行中,主要的改进有移除register_globals[13]、magic quotes 和 Safe mode的功能。[9][14]
[编辑] 版本历程
代表意义
红色 旧版;官方停止支持
黄色 旧版;官方维护中
绿色 目前版本
蓝色 未来版本
主要版本 次要版本 释出日期 说明
1.0 1.0.0 1995年6月8日 正式名称为"Personal Home Page Tools (PHP Tools)",第一次使用了"PHP"的名字。[5]
2.0 2.0.0 1994年4月16日 针对PHP 1.0的改进版,速度更快、体积更小,更容易产生动态网页。[5]
3.0 3.0.0 1998年6月6日 开发方式改成多人共同参与。Zeev Suraski 和 Andi Gutmans 为了这个版本重写了剖析引擎。[5]
4.0 4.0.0 2000年5月22日 改成以Zend引擎作为剖析器,具有两阶段剖析/标签剖析系统等先进功能。[15]
4.1.0 2001年12月10日 加入"超全域变量"(superglobals)功能,包含了$_GET、$_POST、 $_SESSION等[15]
4.2.0 2002年4月22日 默认取消register_globals功能。从网络接收的资料将不会设定成全域变量,增加程序安全性[15]。
4.3.0 2002年12月27日 加入命令行执行档,称为CLI。[15]
4.4.0 2005年7月11日 Added man pages for phpize and php-config scripts.[15]
4.4.8 2008年1月3日 Several security enhancements and bug fixes. Was to be the end of life release for PHP 4. Security updates only until 2008-08-08, if necessary.[16]
4.4.9 2008年8月7日 More security enhancements and bug fixes. The last release of the PHP 4.4 series.[17][18]
5.0 5.0.0 2004年7月13日 Zend Engine II with a new object model.[19]
5.1.0 2005年11月24日 Performance improvements with introduction of compiler variables in re-engineered PHP Engine.[19]
5.2.0 2006年11月2日 Enabled the filter extension by default.[19]
5.2.8 2008年12月8日[20] emergent bug fix[20]
5.2.9 2009年2月26日[21] 这个版本解决了5.2.*的超过了50多个错误和多个安全问题,增加了稳定性。[21]
5.2.9-2(Windows) 2009年3月10日[22] 这个版本解决了在Windows系统下OpenSSL的安全缺陷,与其绑定的OpenSSL版本升级到0.9.8k。[22]
5.3.0 预计2009年第二季[23] 支持命名空间; 使用XMLReader和XMLWriter增强XML支持; 支持SOAP ,[24] 延迟静态绑定, 跳转标签(有限的 goto), 闭包,Native PHP archives
6.0 6.0.0 ??? 支持Unicode; 移除ereg扩展, 'register_globals', 'magic_quotes' 和 'safe_mode'; Alternative PHP Cache;Removal of mime_magic and rewrite of fileinfo() for better MIME support[25]
[编辑] 应用
PHP 是一个应用范围很广的语言,特别是在网络程序开发方面。一般来说 PHP 大多在服务器端执行,透过执行 PHP 的程序码来产生网页提供浏览器读取,此外也可以用来开发命令行脚本程序和使用者端的GUI应用程序。PHP可以在许多的不同种的服务器、操作系统、平台上执行,也可以和许多数据库系统结合。使用 PHP 不需要任何费用,官方组织 PHP Group 提供了完整的程序源代码,允许使用者修改、编译、扩充来使用。[26]
[编辑] 语法
PHP的语法参考了Perl、C语言,而且可以整合在HTML之中,以下是一个简单的Hello World程序:
<?php
echo 'Hello World!';
?
PHP剖析引擎只剖析<?php到?之间的程序码,而不包含在<?php到?之间的内容则会直接送出,所以可以用以下的方式来将PHP程序码嵌入在HTML之中:
<?php
//-PHP程式码
?
html内容
<?php
//-PHP程式码
?
但是在判断语句中的HTML代码并不会被直接送出:
<?php
if (false) {
?
HTML Code
<?php
}
?
PHP可以用三种注解的形式:C与C++所使用的“/*...*/”与“//”,和Perl的“#”。
[编辑] 类型
PHP主要有以下四种变量类型:
整数 (integer)
浮点数 (float)
布尔数 (boolean)
字串 (string)
两种复合类型:
阵列 (array)
物件 (object)
两种特殊类型
NULL
资源 (resource)[27]
[编辑] 变量
PHP中,变量以“$”后接变量名称来表示。变量名称区分大小写。有效的变量名称以字母或底线开头,后接任意数目的字母、数字或底线。[28]
[编辑] 面向对象
PHP从PHP 3开始有了基本的面向对象的特性,但直到PHP 5将面向对象部份重新改写之后,PHP的面向对象功能才比较完善。现在PHP可以说是一个有完整面向对象功能的语言。
[编辑] PHP相关资源
[编辑] 函数库
主条目:PHP函数库列表
内建多样化的函数是PHP主要的特点之一,这些开放程序码的函数提供了各种不同的功能,例如档案处理、FTP、字串处理、等等。这些函数的使用方法和C语言相近(例如printf),这也是PHP广为流行的原因之一。
除了内建的函数之外,PHP也提供了很多延伸函数库(extension),像是各种数据库连接函数、资料压缩函数、图形处理等等。有些延伸函数库需要从PECL(PHP Extension Community Library)取得。
[编辑] 源代码编码和加速
PHP源代码是可以直接读取的,即使放到服务器上执行也是一样。虽然让PHP多了弹性,但相对的会造成安全危机和性能下降的问题。
透过PHP编码器,可以保护PHP的源代码不被读取(对商业软件来说特别有需求),也可以提升执行的效能。有许多公司或团体开发PHP的编码器,将PHP程序编译成字节码(byte code),再透过服务器上安装对应的程序来执行PHP脚本。
除了透过编码器加速之外,PHP还可以透过动态的快取机制来提升速度,加速工具有商业版的,例如Zend Platform,也有开放源代码的加速软件如eAccelerator、APC、XCache。
[编辑] 样板引擎
样板引擎让PHP应用程序可以做逻辑和使用接口上的分离,让程序开发更容易进行,目前比较受欢迎的样板引擎是PHP官方开发的Smarty。不过样板引擎有效能上的争议,因为PHP本身就是一个样板引擎,使用样板引擎反而变成“重新发明了轮子”(reinventing the wheel)。样板引擎最主要的好处就是让不懂PHP程序码的人也可以参与使用接口的开发,因为样板引擎的语言远比PHP简单。
[编辑] 未来发展
[编辑] PHP 5.3
命名空间(namespaces)原本预计在PHP 6提供支持,现在可能改至PHP 5.3就支持[29

接口测试怎么才能做好?

这个问题还是从需求、测试用例设计、执行来说吧。



A.需求

首先要了解这个接口提供的服务的需求定义,那么我们就知道大概测试的结果是啥。同时理论上要先提供接口规范,方便后续测试,以及给调用者联调的一个文档约定。


B.测试用例设计


根据测试的接口规范,基于业务进行场景设计,再结合边界值设计方法、等价类划分等常用设计方法进行用例设计。


1.设计的方向是常规的测试用例设计:协议规范测试、接口入参、接口出参。

协议规范测试:比如HTTP协议:URL地址、Header测试。不过一般情况下,默认调用者按照接口规范正常调用。这个不用过于详细测试。


2.接口入参:参数个数测试(注意是否必传字段),参数值测试(为空、正常值、非法值等,以及首尾有空格是否过滤)。


3.接口出参:至少涵盖一条成功的响应和一条失败的响应,当然我们测试出更多错误码,我们的覆盖率也就更全面。


4.业务场景用例: 这个需要你对于这个接口的业务的了解程度,而且这是最重要的部分。

比如中间使用了缓存服务(第一次缓存没有,是不是直接读数据源,并存入缓存;第二次直接读取缓存是否正确);

比如需要考虑请求外部的接口获取相应的信息的时间损耗(连接不上外部接口,外部接口下线了,外部接口响应太慢);



C.测试用例执行


1.需要你对接口协议有一定的了解,选择适当的开源工具(如postman)或者自己编写脚本进行模拟请求。

2.需要熟悉接口所使用的中间件等知识(比如redis、kafka、mysql数据库)。

3.需要模拟外部接口返回给你现在正在验证的程序的接口。(比如扣费业务,你不可能每测一个业务,就去调真实扣费)。



是web开发接口吗?建议使用Postman

一、什么是接口?

接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。

二、 常用接口采用方式:

1、webService接口:是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。可以使用的工具有apipost、jmeter、loadrunner等;

2、http api接口:是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和

post等方法,这也是最常用的两种请求方式。可以使用的工具有apipost、jmeter、loadrunner等;

三、前端和后端

前端:网站前端是对网页静态页面的设计,通俗的来说,就是我们肉眼能看的到的东西,当我们浏览网站的时候所看到的页面上的内容几乎都是属于前端,前端的工作就是网站页面,静态的页面是没有后端成分的,前端主要包括html和css外加js等一些样式和布局。

后端: 网站的后端就是动态网站的技术,比如网站上的一些注册登录和一些弹窗,这些都是后端的逻辑,常用的后端语言有php,jsp等,后端的数据库也包含myspl等,都是对后端进行存储数据。

四、 接口测试概念

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等(通俗来说就是,检查业务逻辑是否满足业务需求,校验字段是否正常你实际结果是否满足预期)

五、 接口的组成:

a、接口说明

b、调用url

c、请求方法(getpostput等)

d、请求参数、参数类型、请求参数说明

e、返回参数说明

六、为什么要做接口测试,接口测试的目标

接口其实app和前端交互用的,所以好多人问,为啥做功能测试还要测接口,目标是啥不是多此一举吗?首先我告诉大家,这种想法是错误的

那么举一个例子:

例如一个登陆接口,例如产品上规定用户名6-10个字符数字下划线,但后端没做判断。但我们业务人员测试肯定验证,但只是前端做了校验,后端压根就忘了这个小需求.那么后果来了如果一个懂的直接抓包去篡改你的接口,然后绕过校验,通过sql注入直接随意登录。如果你这是一个下单业务,是不是给公司造成了很大损失

所以此时此刻接口测试目标来了:

1.可能发现客户端没有发现的bug(那么也叫隐藏bug)

2.及早爆出风险(保证质量正常上线)

3.接口稳定了,前端随便改

4.最重要检查系统安全性,稳定性

七、如何进行接口测试

1.使用接口测试工具进行测试,接口测试和接口文档生成工具apipost,接口测试和性能测试工具jmeter

2.接口状态码表示含义

例如:200(成功)/300(重定向别的地方)/400(请求语法错误)/500(服务器异常)

测试点:

B. 参数组合(传入不同值)

C. 接口安全(绕过验证/绕过身份验证/参数是否加密等)

D. 异常验证(输入异常参数边界值)

如何利用cURL和python对服务端和web端进行接口测试

工具描述
cURL是利用URL语法在命令行方式下工作的文件传输工具,是开源爱好者编写维护的免费工具,支持包括Windows、Linux、Mac等数十个操作系统,最新版本为7.27.0,但是我推荐大家使用7.26.0,从这里可以下载7.26.0版本。
以下是官方介绍的翻译:
cURL是一个使用URL语法来传输数据的命令行工具,支持
DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,POP3,POP3S,RTMP,RTSP,SCP,SFTP,SMTP,SMTPS,Telnet
和TFTP。 cURL支持SSL证书,HTTP POST,HTTP
PUT,FTP上传,HTTP基础表单上传,代理,cookies,用户+密码身份验证(Basic, Digest, NTLM,
Negotiate, kerberos...),恢复文件传输,隧道代理等等。
Python是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明,它的强大和易用就无需多做说明了,在web开发中或者对开发速度要求较高的开发中应用十分广,不过因为属于脚本类语言,它的性能始终比不上C++、C等语言。
本文主要利用实例说明这两款工具的在测试中的部分用途,更多用法留待大家继续探索。
应用场景
使用cURL模拟客户端对服务端进行查询
在进行接口测试时,应该先找开发人员提供接口列表和对应参数,这样测试的时候就可以验证测试方法是否正确,不过如果可以用浏览器模拟操作的话,也可以自己先试试的,后面的例子会提到。
首先使用客户端访问需要测试的服务端接口,用wireshark抓包结果如下:
把查询字符串以multipart方式post数据到服务器的file_health_info.php接口。
Tips:
Windows版的cURL不像Linux或者Mac一样属于系统自带工具,需要下载,如果要在命令提示符下使用就需要跳转到工具所在目录下才能运
行,十分麻烦,我们可以直接把这个工具文件放到Windows目录下,这样无论在哪个目录都可以直接使用“curl”命令运行工具了。
cURL默认就是以post方式发送数据的,所以只需要加入multipart方式就可以了,-F在cURL帮助中的解释是:
-F, --form CONTENT Specify HTTP multipart POST data (H)
--form-string STRING Specify HTTP multipart POST data (H)
--ftp-account DATA Account data string (F)
--ftp-alternative-to-user COMMAND String to replace "USER [name]" (F)
--ftp-create-dirs Create the remote dirs if not present (F)
--ftp-method [MULTICWD/NOCWD/SINGLECWD] Control CWD usage (F)
--ftp-pasv Use PASV/EPSV instead of PORT (F)
Specify HTTP multipart POST data正好满足我们的要求,所以模拟的语句是:
curl -F "newmd5=3bcad21af5f17c1fbff419137297c942###25016566###d:\test.exe###1###" file_health_info.php
后面的都是参数,测试前就要找开发确认好。
不过因为服务端支持以gzip方式返回数据,所以我们还可以在请求中加入—compressed参数,即是:
curl --compressed -F "newmd5=3bcad21af5f17c1fbff419137297c942###25016566###d:\test.exe###1###" file_health_info.php
为了更好判断服务端接口是否正常,除了对返回数据进行判断外,我们还需要对服务端返回的数据包头进行解析,所以还可以在cURL请求中加入-i参数,最终这个测试语句就变为:
curl –i --compressed -F "newmd5=3bcad21af5f17c1fbff419137297c942###25016566###d:\test.exe###1###" file_health_info.php
模拟完成后就要考虑判断返回值的事了,我们首先在命令提示符下运行这个语句,看看返回值。
运行以上命令后,返回的数据如下:
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Date: Fri, 24 Aug 2012 07:47:45 GMT
Content-Type: application/xml
Transfer-Encoding: chunked
Connection: keep-alive
Server: 360 web server
Content-Encoding: gzip
<?xml version="1.0" encoding="GBK" ?
<ret
<retinfo code="0" msg="Operation success" total="1" success="1" empty="0"
cost="999.92752075195"/
<softs
<soft
<md53bcad21af5f17c1fbff419137297c942</md5
<sha1</sha1
<level4040</level
<e_level40.3</e_level
<size</size
<soft_name<![CDATA[]] </soft_name
<describ<![CDATA[]]</describ
<file_desc<![CDATA[]]</file_desc
<upload0</upload
<attr_upload2</attr_upload
<class<![CDATA[private]]</class
<malware<![CDATA[cloud.virus]]</malware
<is_sys_file0</is_sys_file
<is_rep0</is_rep
<age0</age
<pop0</pop
</soft
</softs
</ret
数据包包头是常见的,一般来说,我们只要判断包头中含有“HTTP/1.1 200
OK”就可以确定服务端正常返回了数据。另外从内容可以看到这是一个xml格式的数据包,我们只需要判断是否存在关键的字段即可,比
如<level,确定这些之后我们就可以在python中添加如下案例代码了:
首先运行指定的curl命令:
response = os.popen(‘‘‘curl -i --compressed -F "newmd5=3bcad21af5f17c1fbff419137297c942###25016566###d:\test.exe###1###" file_health_info.php
然后判断返回值中是否存在我们想要的字段:
self.assertNotEqual(response.find(‘HTTP/1.1 200 OK‘),-1)
self.assertNotEqual(response.find(‘<level‘),-1)
上面的内容看起来差不多可以了,但实际还不够严谨,因为服务端返回的这些数据是从数据库中获取的,所以我们还需要查询数据库获取指定值,判断是否和数据包中的一致,比如<level:
首先使用python登录数据库服务器:
conn = MySQLdb.connect(host=‘172.22.54.31‘, user=‘user‘,passwd=‘test321‘,db=‘cloud‘)
cursor = conn.cursor()
count = cursor.execute(‘SELECT plevel FROM file where md5="3bcad21af5f17c1fbff419137297c942"‘)
result = cursor.fetchone()
然后判断返回值中的level是否数据库中的值:
self.assertNotEqual(response.find(‘‘‘<level%s</level‘‘‘%result[0]),-1)
测试时除了使用cURL等工具进行模拟,还可以自己用python或其他语言写代码进行post数据,不过当时简单起见所以就选择了用cURL测试。
使用cURL模拟控制台登录
说到模拟登录或者模拟点击,很多同学可能直接联想到QTP等模拟界面操作的工具,事实上这种工具有一个很大的弊端是太依赖控件,如果界面控件变了,
那么可能整个脚本就无效了,现在的程序设计都倾向界面逻辑分离,这样修改界面时就不会动到底下的功能接口,开发人员可以随时修改界面控件,如果还是采取
QTP等模拟点击的方法测试,结果可能是事倍功半的,如果测试时直接点用接口就可以避免这种问题。
下面的例子是模拟控制台登录的,登录URL为:
cloud/index.php?r=site/login ,首先使用浏览器登录一次,看看实际效果如何。
Tips:
测试php或其他web程序时建议使用chrome,因为它自带的Developer
Tools十分好用,当然firefox或者IE9也有类似的工具,看个人习惯吧。按F12打开工具,选择Network标签页,然后输入用户名、密码点
击登录,这时Network下方会显示登录过程中浏览器想控制台请求的所有数据,包括请求类型、表单数据等,这些是我们模拟操作的数据来源。
从上图可以获取几个重点信息:请求URL、请求类型、数据类型、数据内容、并且支持gzip压缩等。我们用curl模拟如下:
curl -i --compressed cloud/index.php?r=site/login -d “username=admin” -d “userpass=admin”
使用-i和—compressed的原因再上一个例子已经说了,这里不再赘述,重点是后面的-d,它在官方帮助的解释是:
-d, --data DATA HTTP POST data (H)
--data-ascii DATA HTTP POST ASCII data (H)
--data-binary DATA HTTP POST binary data (H)
--data-urlencode DATA HTTP POST data url encoded (H)
--delegation STRING GSS-API delegation permission
--digest Use HTTP Digest Authentication (H)
--disable-eprt Inhibit using EPRT or LPRT (F)
--disable-epsv Inhibit using EPSV (F)
而我们从Developer Tools返回的数据已经知道,返回数据的格式是
“application/x-www-form-urlencoded”,所以很明显需要使用-d的HTTP POST data url encoded特性。不过格式中还有关键字form,莫非也支持-F参数登录,试试:
curl -i --compressed cloud/index.php?r=site/login -F “username=admin” -F “userpass=admin”,果然成功,呵呵~
也许有同学有疑问,为何不模拟warnsetup、refer,这是因为测试时发现登录界面只需要用户名和密码就够了,refer 用于记录来源网页,在这里用处不大,warnsetup只是用于验证登录码的,这个已经去掉了。
接下来要验证数据,我们在命令提示符中运行上面的命令,返回结果如下:
HTTP/1.1 302 Moved Temporarily
Date: Fri, 24 Aug 2012 08:29:07 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.4.3
Set-Cookie: PHPSESSID=4711d2365de9aaaca0c28b1ca52183f0; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=81d4bb65e888c1b6347120641eb4798b; path=/
Location: ./index.php
Server: 360 web server
很奇怪吧,乍一看控制台没有返回任何有用信息,不过里面那句HTTP/1.1 302 Moved
Temporarily是不是特别眼熟?这个特殊的302(表示http重定向)正是我们在Developer
Tools看到的状态值,看到这个已经可以80%确定我们登录已经成功了,更重要的是返回包中的内容:Location:
./index.php,这说明控制台已经通知请求端跳转到index.php,如果登录失败控制台会继续停留在当前登录界面的,我们只需要修改curl
语句中的用户名或者密码就知道了,这种情况下返回包就是登录界面的php源码,这里不再赘述。
使用cURL以get方式测试控制台搜索接口
测试方法同上面差不多,首先使用chrome打开控制台进入对应页面,在搜索框中输入“test.exe”,点击搜索,使用developer tools抓包,内容如下:
cURL模拟get方式发送数据的参数是-G,了解这个后面要模拟就很简单了:
curl -i --compressed -G “cloud/index.php?r=file_cloud/api/searchfilename=59c7dd2eafdbe86b2e23bcdabb575448bg=0lm=19

其中每个参数的含义要分别了解:filename表示输入的关键字,bg表示数据库第一行,lm表示共显示19行数据。这个接口返回的数据如下:
{"rows":[{"level":"10","plevel":"10","id":"20","md5":"59c7dd2eafdbe86b2e23bcdabb575448","soft_name":"","soft_desc":"","file_desc":"QVBJIFRyYWNpbmcgWDg2IEhvb2sgRW5naW5l","is_sys_file":"127","size":"41984","is_rep":"0","file_name":"apihex86.d
ll","file_version":"6.1.7600.16385","product_version":"6.1.7600.16385","copyright":"\u00a9 Microsoft Corporation. All rights reserved.","lang":"0","org_name":"YXBpaGV4ODYuZGxs","sign_name":"TWljcm9zb2Z0IFdpbmRvd3M=","company_name":"Microsof
t Corporation","update_time":"2012-07-31 18:14:27","create_time":"2012-07-31 18:14:27","creator_mid":"15be5b7dce003cdc2c1d1448afcf6cf0"}],"count":"1"}
分别是文件属性和文件信息,这涉及到两个数据库表,所以验证数据需要用python从两张表中获取对应信息。
从第一张表获取文件属性,比如只获取plevel:
SELECT plevel FROM `file` where md5="59c7dd2eafdbe86b2e23bcdabb575448"
从第二张表获取文件信息,比如只获取company_name:
SELECT company_name FROM file_info where md5="59c7dd2eafdbe86b2e23bcdabb575448"
Python代码如下:
conn = MySQLdb.connect(host=‘%s‘% self.host, user=‘user‘,passwd=‘test321‘,db=‘cloud‘)
cursor = conn.cursor()
count = cursor.execute(‘SELECT plevel FROM `file` where md5="111111932490c813bf5ea9d8aa6fa60c"‘)
result = cursor.fetchone()
self.assertNotEqual(response.find(str(result[0])),-1)
count = cursor.execute(‘SELECT company_name FROM file_info where md5="111111932490c813bf5ea9d8aa6fa60c"‘)
result1 = cursor.fetchone()
self.assertNotEqual(response.find(result1[0]),-1)
当然严谨的测试案例是每一个属性字段都需要进行查找和匹配,这里就不再赘述了。

php有没必要单元测试,?有必要用phpunit么?请详情说明理由,谢谢

当然需要单元测试,软件开发过程中,有这明确的分工,为了保证每个人提交的产品的质量,必须要使用单元测试详细测试。
至于phpunit的使用,不是特别必要,你可以自己拿个php文件来专门测试接口、功能。当然了你会使用phpunit做好。我学习php的时候用个phpunit,到了公司就基本上不用了。 关于什么是php接口测试工具和如何测试PHP的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 什么是php接口测试工具的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于如何测试PHP、什么是php接口测试工具的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:系统接口设计论文怎么写(系统接口设计原则)
下一篇:微服务网关做权限验证(微服务 权限验证)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~